Commit Graph

3454 Commits

Author SHA1 Message Date
Barend Gehrels
67ac81e5b2 [overlay] fix cases where intersection point is in the middle of the
first segment, and not at the endpoint
2015-11-18 14:53:00 +01:00
Barend Gehrels
a48a935064 [overlay] self-tangencies, similarly as handling side left/right,
handle cases where one leg continues collinearly
2015-11-18 11:14:35 +01:00
Barend Gehrels
2e7e21dd31 [overlay] don' t discard for difference too 2015-11-15 12:33:13 +01:00
Barend Gehrels
e2764a795b [overlay] sort on cc too. Also, sort/fix cases where ux is considered for intersection too.
They are discarded now, besides the sorting order is fixed (but that
alone does not help)
2015-11-15 11:55:13 +01:00
Barend Gehrels
c7d419785e [overlay] in less_by_segment_ratio, sort turns where operation occurs
(and not in the other turn) first
2015-11-14 11:23:37 +01:00
Barend Gehrels
d038e58f16 [overlay] check for sides w.r.t. both, this fixes two cases for
intersection
2015-11-13 20:08:14 +01:00
Barend Gehrels
b891bbe741 [overlay] use same functionality also for intersection 2015-11-13 19:29:55 +01:00
Barend Gehrels
e97bbb4da1 [overlay] fix cases where IP is not at endpoint. This fixes the last
union/buffer cases with less_by_segment_ratio instead of handle_tangencies
2015-11-12 19:46:29 +01:00
Barend Gehrels
242c619b35 [overlay] handle ux/ui and ui/ui in a more generic way, for union,
checking the relative sides of the outgoing segments (in the sorting)
2015-11-11 21:50:34 +01:00
Barend Gehrels
529b8e804c [overlay] fix ux/ux cases by sort order
(instead of handle tangencies)
2015-11-11 16:18:19 +01:00
Barend Gehrels
6b0be79ff3 [enrich] move indexed_turn_operation/sort to separate source file to
reuse it for handle_touch

Also, remove the unused member variable m_strategy from it

Conflicts:
	include/boost/geometry/algorithms/detail/overlay/enrich_intersection_points.hpp
2015-11-11 15:54:47 +01:00
Barend Gehrels
4a05869d2f [overlay] turn off handle_tangencies 2015-11-11 15:43:29 +01:00
Barend Gehrels
9ec7e5f3d3 Merge branch 'develop' of https://github.com/boostorg/geometry into develop 2015-11-11 10:27:42 +01:00
Menelaos Karavelas
d9317bdba6 Merge pull request #334 from mkaravel/fix/is_simple_for_empty_geometries
Boost.Trac tickets 11709 and 11710
2015-11-10 08:06:17 +02:00
Adam Wulkiewicz
450cfb42be [arithmetic] Add missing include in determinant.hpp 2015-11-08 05:30:07 +01:00
Menelaos Karavelas
80c706df39 [algorithms][is_simple] patch the is_simple algorithm to address Boost.trac tickets
11709 and 11710;

Ticket 11709 (is_simple segfault): modify the is_simple algorithm to check a linestring
for emptiness; if an empty linestring is discovered, return false; the actual return
value does not really matter as empty linestrings are considered as invalid, which means
that the behavior of is_simple for empty linestrings is undefined; on the other hand,
we do want to avoid segfaults, which is achieved with the patch; the same approach has
been applied to emtpy rings, and as a result to empty polygons;

Ticket 11710 (empty geometry logic): modify the behavior of the is_simple algorithm with
respect to empty multi-geometries; the old behavior was considering empty multi-geometries
as non-simple, whereas the current behavior is the opposite; this change has been made in
order to be consistent with the fact that empty multi-geometries are considered as valid;
2015-11-05 14:56:18 +02:00
Barend Gehrels
cd6bfc54d4 [colocations] extract code to separate function 2015-11-04 13:22:41 +01:00
Barend Gehrels
7ee6bd99b1 [buffer] prefix traits::detail namespace 2015-11-01 11:17:32 +01:00
Barend Gehrels
085d641dab [difference] fix colocations 2015-10-31 20:06:39 +01:00
Barend Gehrels
c1aeab008b [enrich] add overlay_type template parameter
which will be used later
2015-10-31 19:35:18 +01:00
Barend Gehrels
d6b7e052ba [union] fix new case #80 to discard i/i turn of interior ring with
interior ring, in case of a colocation
2015-10-31 18:53:55 +01:00
Barend Gehrels
4cc8112544 [colocations] fix: the condition to select on uu or ux should be there 2015-10-31 12:26:09 +01:00
Barend Gehrels
013420fd07 [colocations] fix debug info 2015-10-31 11:00:41 +01:00
Barend Gehrels
7cfe3dc337 [union] instead of checking on u/u, sort/check
on exterior ring/interior rings such that also cases with u/x are handled

This fixes case mysql_21964049
2015-10-31 10:56:27 +01:00
Barend Gehrels
ac5bc527e7 [union] fix cases where a polygon is touching the interior ring of another
polygon at a point where that interior ring touches its exterior ring
2015-10-28 19:48:34 +01:00
Barend Gehrels
f98e0ed947 Merge pull request #324 from jeremy-murphy/pj_units
Split pj units at divisor, support fractional multipliers.
2015-10-17 10:42:57 +02:00
Adam Wulkiewicz
3e22205687 Merge pull request #329 from springmeyer/fix-lineclip-int
[algorithms][intersection] Fixes liang_barsky for integral data
2015-10-14 23:41:08 +02:00
Dane Springmeyer
6f214c54c6 use select_most_precise + better naming of TemplateType 2015-10-14 11:36:50 -07:00
Barend Gehrels
533543e86b [traverse][robustness] in case of cc, instead of arbitrary candidate,
take candidate with largest remaining distance. This fixes some
errors if rescaling is turned off.
2015-10-14 17:15:53 +02:00
Barend Gehrels
4c29a2f7d5 [buffer] initialize intersection point to avoid warning 2015-10-14 12:58:05 +02:00
Barend Gehrels
ec017da3f0 [buffer] move same code fragments to finish_ring 2015-10-14 12:57:46 +02:00
Barend Gehrels
71143c1b68 [buffer][fix] Fix case where side calculation fails because of length 2015-10-14 12:14:38 +02:00
Menelaos Karavelas
b029641604 [algorithms][detail][point_is_spike_or_equal] fix inconsistency between sideness/collinearity
test and check for direction of vectors;

Problem: when checking whether a point q creates a spike or not with respect to two (ordered)
points a and b, the first check performed is whether q, a and b are collinear; if so, then it
is determined whether the vectors q-b and b-a have the same direction or not; for points with
floating-point coordinates, due to rounding errors as well as due to the fact that equality to
zero is checked using some tolerance, the three points may be detected as collinear; however,
when the directions of the two vectors are checked, computations are done without taking into
account any tolerance and this can lead to inconsistent results;

Fix: when checking the directions of the vectors q-b and b-a, compute signs of differences using
numerical tolerances, that is using math::equals() instead of plain comparison operators;
2015-10-12 12:07:10 +03:00
Jeremy W. Murphy
013ed09a55 [projections] Use lexical_cast, check for zeroes.
-99 is a placeholder.
2015-10-11 23:36:22 +11:00
Jeremy W. Murphy
37b3487a0d [projections] Punctuation and naming. 2015-10-11 18:13:22 +11:00
Adam Wulkiewicz
605d6d2e9b [relate] Comment-out unused variable to suppress compiler warning. 2015-10-09 17:04:38 +02:00
Adam Wulkiewicz
51d683c737 Merge pull request #321 from awulkiew/fix/rtree_eps2
Enlarge nodes boxes in the rtree WRT epsilon when non-Box values are indexed.
2015-10-09 15:54:03 +02:00
Menelaos Karavelas
8614c403f0 Merge pull request #325 from mkaravel/fix/difference_intersection_linear_areal
Fix/difference intersection linear areal
2015-10-09 08:13:52 +03:00
Menelaos Karavelas
49b7be215e [algorithms][intersection] use more descriptive name for method;
change template parameter name to something more descreptive;
2015-10-09 08:11:39 +03:00
Adam Wulkiewicz
350e75bfc2 Merge pull request #328 from jeremy-murphy/redefined_macro
[transform][strategies] Don't clobber BOOST_UBLAS_TYPE_CHECK macro.
2015-10-09 02:26:00 +02:00
Adam Wulkiewicz
bef1a98d2e [index] Add #ifdef for conditional enabling of Values' bounds in the rtree. 2015-10-08 19:01:00 +02:00
Adam Wulkiewicz
25d9f9c195 [distance] Fix assertion failure in distance(Pt, Box) for NaN coordinates.
If there are NaN coordinates the conditions cannot be reasonably
calculated, therefore if the condition isn't met check if NaN coordinates
were not involved. This is consistent with the general policy WRT invalid
geometries, the algorithm don't fail but may generate invalid result.
2015-10-08 17:39:16 +02:00
Adam Wulkiewicz
d518688486 [relate][touches] Fix bugs in relate(A,A) and use it in touches(A,A)
Bugs are related to the handling of interior rings intersecting the second
geometry.

touches(A,A) now calls relate(A,A) besides a Ring/Ring case bcause Rings
have no holes so the simpified version may be used.
2015-10-08 13:55:11 +02:00
Dane Springmeyer
eb7613e703 [algorithms][intersection] Fixes liang_barsky for integer coordinate types
- Fixes an integer division bug which caused incorrect clipping results when
   a geometry is clipped by a box and the coordinate type is integral
 - Refs https://github.com/mapbox/mapnik-vector-tile/pull/102
2015-10-06 13:58:18 -07:00
Menelaos Karavelas
b3be70aee2 [algorithms][overlay][exception] move inconsistent_turns_exception to a separate file 2015-10-05 14:06:58 +03:00
Menelaos Karavelas
7f5f894535 [algorithms][overlay][exception] move inconsistent_turns_exception to a separate file 2015-10-05 12:24:31 +03:00
Jeremy W. Murphy
2c9cf6cc5f [transform][strategies] Don't clobber BOOST_UBLAS_TYPE_CHECK macro.
This macro is also defined in boost/numeric/ublas/detail/config.hpp.
2015-09-27 19:50:15 +10:00
Menelaos Karavelas
c8b1095eea [algorithms][is_valid] fix issue with use of std::cout only in debug mode:
originally reported by Jeremy Murphy (GitHub PR #326); the problem is that
when debug_print_complement_graph() is called, std::cout needs to be defined
which requires the inclusion of <iostream> even in non-debug mode; with this
commit the call to debug_print_complement_graph() is guarded by the appropriate
macro and the use inclusion of <iostream> is no longer needed in non-debug mode;
2015-09-17 09:28:55 +03:00
Jeremy W. Murphy
cb78622a8e Merge branch 'develop' into pj_units 2015-09-07 23:44:29 +10:00
Adam Wulkiewicz
a71aaa3617 [core] Make geometry::exception::what() public. 2015-09-07 14:03:54 +02:00