2
votes

I'm using boost::geometry::union_ to merge a vector of random polygons, and here what I wrote:

#include <iostream>
#include <vector>
#include <fstream>
#include <boost/geometry.hpp>
#include <boost/geometry/geometries/point_xy.hpp>
#include <boost/geometry/geometries/polygon.hpp>
#include <boost/geometry/io/wkt/wkt.hpp>

#include <boost/foreach.hpp>
typedef boost::geometry::model::polygon<boost::geometry::model::d2::point_xy<double> > polygon;


void union_polys(std::vector<polygon> In_polys,std::vector<polygon> &Out_polys)
{
    std::vector<polygon> temp_polys;
    bool *considered = new bool [In_polys.size()];
    for(unsigned i = 0 ; i < In_polys.size() ; i++) considered[i] = false;
    for(unsigned i = 0 ; i < In_polys.size()/2; i++)
    {
        if(!considered[i])
        {
            polygon inetr = In_polys.at(i);
            for(unsigned j = i + 1 ; j < In_polys.size() ; j++)
            {

                if(!considered[j])
                {
                    temp_polys.clear();
                    boost::geometry::union_(inetr, In_polys.at(j) , temp_polys);
                    if(temp_polys.size() == 1)
                    {
                        inetr = temp_polys.at(0);
                        considered[j] = true;
                        j = i;
                    }
                }
            }
            Out_polys.push_back(inetr);
        }
    }
}

int main()
{
    std::ifstream file("test01.txt");

    polygon *poly;
    std::vector<polygon> input;


    while(!file.eof())
    {
        poly = new polygon;
        std::string poly_str;

        std::getline(file, poly_str);

        boost::geometry::read_wkt(poly_str, *poly);
        boost::geometry::correct(*poly);

        input.push_back(*poly);
    }
    std::cout << " input size is : " << input.size() << std::endl;

    std::vector<polygon> output;
    union_polys(input, output);

    std::cout << " output size is : " << output.size() << std::endl;

    int i = 0;
    std::cout << "green || blue:" << std::endl;

    BOOST_FOREACH(polygon const& p, output)
    {
        std::cout << i++ << ": " << boost::geometry::area(p) << std::endl;
    }

    system("pause");
    return 0;
}

I tested this function union_polys with two different polygon sets:

test 01 test 02

It works for the first test but it fails for the second, I searched but I can't spot the mistake, can any one helps ?

1
Have a look at stackoverflow.com/questions/20080868/… regarding supported data types.user2249683
@DieterLücking how is that relevant?sehe
@sehe The 2D point is utilizing doubleuser2249683
@DieterLücking Ah. I never actually knew this. Thanks. Anyways, it's likely not the problem here (unless the self-intersection is only apparent /due to/ floating point inaccuracy)sehe
that note about integral coordinates is talking about Boost.Polygon which is a different library than Boost.Geometryjwezorek

1 Answers

4
votes

The problem is your second file contains a self-intersecting polygon. This is not allowed.

You can enable debugging by defining

#define BOOST_GEOMETRY_DEBUG_HAS_SELF_INTERSECTIONS

before inclusion of the Boost Geometry headers.

The documentation says: http://www.boost.org/doc/libs/1_55_0/libs/geometry/doc/html/geometry/reference/concepts/concept_polygon.html#geometry.reference.concepts.concept_polygon.rules

Rules

Besides the Concepts, which are checks on compile-time, there are some other rules that valid polygons must fulfill. This follows the opengeospatial rules (see link above).

  • Polygons are simple geometric objects (See also wiki but holes are allowed in Boost.Geometry polygons).
  • If the polygons underlying ring_type is defined as clockwise, the exterior ring must have the clockwise orientation, and any interior ring must be reversed w.r.t. the defined orientation (so: counter clockwise for clockwise exterior rings). If the ring_type is defined counter clockwise, it is vice versa.
  • If the polygons underlying ring_type is defined as closed, all rings must be closed: the first point must be spatially equal to the last point.
  • The interior is a connected point set.
  • There should be no self intersections, but self tangencies (between exterior/interior rings) are allowed (as long as the interior is a connected point set.
  • There should be no cut lines, spikes or punctures.
  • The interior rings should be located within the exterior ring. Interior rings may not be located within each other.

The algorithms such as intersection, area, centroid, union, etc. do not check validity. There will be an algorithm is_valid which checks for validity against these rules, at runtime, and which can be called (by the library user) before.

So currently, the self-intersection is only available in the implementation details of the library

If you don't mind using these you can e.g. use the following to weed out the offending polygons:

std::string poly_str;
while(std::getline(file, poly_str))
{
    polygon poly;

    boost::geometry::read_wkt(poly_str, poly);
    boost::geometry::correct(poly);

    try
    {
        bool ignored = boost::geometry::detail::overlay::has_self_intersections(poly);

        // redundant:
        if (ignored)
            throw boost::geometry::overlay_invalid_input_exception();

        input.push_back(std::move(poly));
    } catch(boost::geometry::overlay_invalid_input_exception const& e)
    {
        std::cerr << "Self intersecing polygon ignored: " << boost::geometry::dsv(poly) << "\n";
    }
}

(Note the removal of memory leaks from your code and the fixed loop condition)

Self intersecing polygon ignored: (((449719, 4.04975e+06), (449720, 4.04976e+06), (449721, 4.04976e+06), (449727, 4.04976e+06), (449734, 4.04976e+06), (449736, 4.04976e+06), (449739, 4.04975e+06), (449742, 4.04975e+06), (449744, 4.04975e+06), (449745, 4.04974e+06), (449744, 4.04973e+06), (449741, 4.04973e+06), (449737, 4.04973e+06), (449734, 4.04973e+06), (449728, 4.04972e+06), (449725, 4.04972e+06), (449721, 4.04973e+06), (449716, 4.04973e+06), (449712, 4.04973e+06), (449711, 4.04974e+06), (449710, 4.04974e+06), (449711, 4.04975e+06), (449714, 4.04975e+06), (449718, 4.04976e+06), (449721, 4.04975e+06), (449721, 4.04975e+06), (449719, 4.04975e+06), (449718, 4.04974e+06), (449719, 4.04974e+06), (449719, 4.04974e+06), (449721, 4.04974e+06), (449724, 4.04973e+06), (449726, 4.04973e+06), (449728, 4.04973e+06), (449731, 4.04973e+06), (449733, 4.04973e+06), (449734, 4.04974e+06), (449736, 4.04974e+06), (449737, 4.04974e+06), (449736, 4.04975e+06), (449735, 4.04975e+06), (449734, 4.04975e+06), (449732, 4.04975e+06), (449731, 4.04975e+06), (449727, 4.04975e+06), (449724, 4.04975e+06), (449719, 4.04975e+06)))
Self intersecing polygon ignored: (((451355, 4.04939e+06), (451363, 4.0494e+06), (451365, 4.0494e+06), (451368, 4.0494e+06), (451369, 4.04939e+06), (451370, 4.04939e+06), (451368, 4.04938e+06), (451366, 4.04938e+06), (451362, 4.04938e+06), (451359, 4.04938e+06), (451355, 4.04938e+06), (451351, 4.04938e+06), (451347, 4.04938e+06), (451345, 4.04939e+06), (451345, 4.04939e+06), (451346, 4.04939e+06), (451348, 4.0494e+06), (451351, 4.0494e+06), (451355, 4.0494e+06), (451362, 4.0494e+06), (451356, 4.04939e+06), (451357, 4.04939e+06), (451355, 4.04939e+06), (451354, 4.04939e+06), (451354, 4.04939e+06), (451353, 4.04939e+06), (451353, 4.04939e+06), (451354, 4.04939e+06), (451355, 4.04939e+06), (451356, 4.04938e+06), (451358, 4.04938e+06), (451359, 4.04938e+06), (451360, 4.04939e+06), (451361, 4.04939e+06), (451361, 4.04939e+06), (451361, 4.04939e+06), (451361, 4.04939e+06), (451360, 4.04939e+06), (451355, 4.04939e+06)))
Self intersecing polygon ignored: (((451353, 4.04937e+06), (451361, 4.04938e+06), (451360, 4.04938e+06), (451380, 4.04937e+06), (451403, 4.04936e+06), (451427, 4.04936e+06), (451442, 4.04935e+06), (451466, 4.04934e+06), (451489, 4.04933e+06), (451508, 4.04932e+06), (451517, 4.04933e+06), (451518, 4.04933e+06), (451524, 4.04936e+06), (451526, 4.04937e+06), (451534, 4.04939e+06), (451541, 4.04942e+06), (451542, 4.04942e+06), (451557, 4.04944e+06), (451558, 4.04944e+06), (451577, 4.04946e+06), (451579, 4.04946e+06), (451601, 4.04947e+06), (451620, 4.04948e+06), (451630, 4.04949e+06), (451635, 4.0495e+06), (451640, 4.04952e+06), (451645, 4.04955e+06), (451646, 4.04955e+06), (451649, 4.04956e+06), (451654, 4.04959e+06), (451655, 4.04959e+06), (451660, 4.04962e+06), (451664, 4.04964e+06), (451669, 4.04966e+06), (451674, 4.04969e+06), (451675, 4.04969e+06), (451680, 4.04972e+06), (451686, 4.04974e+06), (451688, 4.04975e+06), (451696, 4.04977e+06), (451701, 4.04976e+06), (451696, 4.04975e+06), (451694, 4.04974e+06), (451689, 4.04972e+06), (451683, 4.04969e+06), (451682, 4.04969e+06), (451677, 4.04966e+06), (451673, 4.04964e+06), (451668, 4.04961e+06), (451663, 4.04959e+06), (451661, 4.04958e+06), (451655, 4.04955e+06), (451653, 4.04954e+06), (451653, 4.04954e+06), (451648, 4.04952e+06), (451642, 4.04949e+06), (451636, 4.04948e+06), (451624, 4.04947e+06), (451606, 4.04946e+06), (451584, 4.04945e+06), (451583, 4.04945e+06), (451564, 4.04944e+06), (451550, 4.04942e+06), (451549, 4.04941e+06), (451542, 4.04939e+06), (451535, 4.04937e+06), (451531, 4.04935e+06), (451526, 4.04933e+06), (451521, 4.04932e+06), (451509, 4.04931e+06), (451486, 4.04932e+06), (451463, 4.04933e+06), (451440, 4.04934e+06), (451424, 4.04935e+06), (451400, 4.04936e+06), (451377, 4.04936e+06), (451357, 4.04937e+06), (451353, 4.04937e+06)))
Self intersecing polygon ignored: (((451703, 4.04978e+06), (451693, 4.04978e+06), (451693, 4.04978e+06), (451691, 4.04978e+06), (451688, 4.04978e+06), (451686, 4.04978e+06), (451683, 4.04978e+06), (451681, 4.04978e+06), (451679, 4.04977e+06), (451678, 4.04977e+06), (451679, 4.04977e+06), (451680, 4.04977e+06), (451682, 4.04976e+06), (451685, 4.04976e+06), (451688, 4.04976e+06), (451691, 4.04976e+06), (451693, 4.04976e+06), (451694, 4.04977e+06), (451695, 4.04977e+06), (451693, 4.04978e+06), (451703, 4.04977e+06), (451704, 4.04977e+06), (451702, 4.04976e+06), (451699, 4.04976e+06), (451695, 4.04976e+06), (451689, 4.04975e+06), (451683, 4.04975e+06), (451678, 4.04976e+06), (451673, 4.04976e+06), (451670, 4.04977e+06), (451670, 4.04977e+06), (451672, 4.04978e+06), (451674, 4.04978e+06), (451679, 4.04979e+06), (451685, 4.04979e+06), (451690, 4.04979e+06), (451696, 4.04978e+06), (451700, 4.04978e+06), (451703, 4.04978e+06)))
Self intersecing polygon ignored: (((452873, 4.05001e+06), (452866, 4.05e+06), (452863, 4.05e+06), (452854, 4.04999e+06), (452841, 4.04998e+06), (452818, 4.04997e+06), (452817, 4.04997e+06), (452793, 4.04997e+06), (452783, 4.04997e+06), (452773, 4.04997e+06), (452750, 4.04998e+06), (452741, 4.04999e+06), (452737, 4.04999e+06), (452731, 4.04999e+06), (452719, 4.04998e+06), (452699, 4.04997e+06), (452685, 4.04997e+06), (452680, 4.04997e+06), (452680, 4.04997e+06), (452679, 4.04997e+06), (452679, 4.04996e+06), (452677, 4.04995e+06), (452678, 4.04995e+06), (452687, 4.04994e+06), (452697, 4.04994e+06), (452705, 4.04993e+06), (452713, 4.04992e+06), (452729, 4.04992e+06), (452747, 4.04992e+06), (452762, 4.04991e+06), (452772, 4.04991e+06), (452779, 4.04991e+06), (452770, 4.0499e+06), (452768, 4.0499e+06), (452759, 4.04991e+06), (452746, 4.04991e+06), (452728, 4.04991e+06), (452708, 4.04991e+06), (452699, 4.04992e+06), (452692, 4.04993e+06), (452683, 4.04994e+06), (452674, 4.04994e+06), (452668, 4.04994e+06), (452671, 4.04996e+06), (452670, 4.04997e+06), (452672, 4.04997e+06), (452674, 4.04998e+06), (452684, 4.04998e+06), (452698, 4.04998e+06), (452716, 4.04999e+06), (452729, 4.04999e+06), (452737, 4.05e+06), (452745, 4.04999e+06), (452753, 4.04999e+06), (452753, 4.04999e+06), (452776, 4.04998e+06), (452786, 4.04998e+06), (452793, 4.04998e+06), (452815, 4.04998e+06), (452837, 4.04999e+06), (452848, 4.05e+06), (452861, 4.05001e+06), (452873, 4.05001e+06)))
Self intersecing polygon ignored: (((452726, 4.04987e+06), (452733, 4.04986e+06), (452731, 4.04985e+06), (452730, 4.04985e+06), (452722, 4.04985e+06), (452722, 4.04985e+06), (452726, 4.04987e+06)))
Self intersecing polygon ignored: (((440107, 4.04713e+06), (440102, 4.04714e+06), (440112, 4.04717e+06), (440122, 4.04719e+06), (440132, 4.04721e+06), (440134, 4.04722e+06), (440143, 4.04724e+06), (440153, 4.04726e+06), (440163, 4.04728e+06), (440173, 4.04731e+06), (440183, 4.04733e+06), (440186, 4.04734e+06), (440196, 4.04736e+06), (440206, 4.04738e+06), (440215, 4.04741e+06), (440225, 4.04743e+06), (440227, 4.04744e+06), (440238, 4.04746e+06), (440247, 4.04748e+06), (440255, 4.0475e+06), (440259, 4.04752e+06), (440262, 4.04753e+06), (440267, 4.04754e+06), (440273, 4.04755e+06), (440289, 4.04756e+06), (440311, 4.04757e+06), (440325, 4.04758e+06), (440342, 4.04758e+06), (440346, 4.04759e+06), (440362, 4.0476e+06), (440363, 4.04761e+06), (440374, 4.04762e+06), (440388, 4.04763e+06), (440391, 4.04764e+06), (440392, 4.04765e+06), (440390, 4.04765e+06), (440382, 4.04768e+06), (440381, 4.04768e+06), (440378, 4.04769e+06), (440377, 4.04769e+06), (440376, 4.04769e+06), (440376, 4.04769e+06), (440375, 4.04767e+06), (440372, 4.04767e+06), (440368, 4.04766e+06), (440363, 4.04766e+06), (440356, 4.04766e+06), (440331, 4.04765e+06), (440319, 4.04765e+06), (440304, 4.04765e+06), (440288, 4.04765e+06), (440263, 4.04765e+06), (440253, 4.04765e+06), (440244, 4.04766e+06), (440238, 4.04767e+06), (440237, 4.04768e+06), (440238, 4.04768e+06), (440245, 4.04769e+06), (440258, 4.0477e+06), (440265, 4.04771e+06), (440270, 4.04772e+06), (440272, 4.04772e+06), (440271, 4.04774e+06), (440266, 4.04776e+06), (440266, 4.04777e+06), (440271, 4.04779e+06), (440276, 4.04781e+06), (440278, 4.04782e+06), (440277, 4.04783e+06), (440273, 4.04783e+06), (440266, 4.04784e+06), (440254, 4.04784e+06), (440237, 4.04785e+06), (440217, 4.04786e+06), (440214, 4.04786e+06), (440194, 4.04788e+06), (440191, 4.04788e+06), (440178, 4.0479e+06), (440170, 4.04791e+06), (440164, 4.04792e+06), (440158, 4.04794e+06), (440154, 4.04795e+06), (440147, 4.04795e+06), (440127, 4.04796e+06), (440106, 4.04796e+06), (440082, 4.04797e+06), (440079, 4.04797e+06), (440069, 4.04798e+06), (440061, 4.04798e+06), (440051, 4.04798e+06), (440028, 4.04797e+06), (440018, 4.04797e+06), (440006, 4.04797e+06), (439997, 4.04798e+06), (439986, 4.04798e+06), (439975, 4.04799e+06), (439964, 4.04801e+06), (439952, 4.04803e+06), (439950, 4.04804e+06), (439937, 4.04806e+06), (439931, 4.04807e+06), (439918, 4.04809e+06), (439905, 4.04811e+06), (439902, 4.04812e+06), (439892, 4.04814e+06), (439891, 4.04815e+06), (439893, 4.04816e+06), (439906, 4.04818e+06), (439917, 4.0482e+06), (439930, 4.04822e+06), (439930, 4.04822e+06), (439939, 4.04823e+06), (439953, 4.04824e+06), (439967, 4.04825e+06), (439970, 4.04825e+06), (439972, 4.04826e+06), (439971, 4.04826e+06), (439967, 4.04826e+06), (439951, 4.04827e+06), (439932, 4.04828e+06), (439913, 4.0483e+06), (439893, 4.04831e+06), (439874, 4.04833e+06), (439854, 4.04835e+06), (439845, 4.04835e+06), (439831, 4.04836e+06), (439818, 4.04837e+06), (439813, 4.04838e+06), (439816, 4.04839e+06), (439825, 4.04839e+06), (439835, 4.04839e+06), (439859, 4.04838e+06), (439884, 4.04838e+06), (439889, 4.04838e+06), (439914, 4.04837e+06), (439935, 4.04837e+06), (439959, 4.04836e+06), (439984, 4.04836e+06), (440009, 4.04836e+06), (440034, 4.04835e+06), (440058, 4.04835e+06), (440083, 4.04835e+06), (440108, 4.04834e+06), (440118, 4.04834e+06), (440143, 4.04834e+06), (440152, 4.04834e+06), (440166, 4.04834e+06), (440179, 4.04834e+06), (440200, 4.04835e+06), (440216, 4.04836e+06), (440230, 4.04837e+06), (440240, 4.04838e+06), (440251, 4.04839e+06), (440265, 4.04841e+06), (440265, 4.04841e+06), (440277, 4.04844e+06), (440283, 4.04845e+06), (440294, 4.04847e+06), (440301, 4.04849e+06), (440310, 4.04851e+06), (440319, 4.04853e+06), (440323, 4.04855e+06), (440324, 4.04856e+06), (440323, 4.04858e+06), (440319, 4.04861e+06), (440316, 4.04863e+06), (440310, 4.04865e+06), (440304, 4.04867e+06), (440303, 4.04868e+06), (440296, 4.04871e+06), (440294, 4.04871e+06), (440287, 4.04873e+06), (440281, 4.04874e+06), (440270, 4.04875e+06), (440254, 4.04877e+06), (440254, 4.04877e+06), (440241, 4.04879e+06), (440240, 4.0488e+06), (440235, 4.04881e+06), (440230, 4.04882e+06), (440226, 4.04885e+06), (440225, 4.04885e+06), (440217, 4.04887e+06), (440217, 4.04887e+06), (440206, 4.04889e+06), (440192, 4.04891e+06), (440186, 4.04892e+06), (440172, 4.04894e+06), (440157, 4.04896e+06), (440143, 4.04898e+06), (440136, 4.04899e+06), (440119, 4.04901e+06), (440103, 4.04903e+06), (440087, 4.04905e+06), (440071, 4.04907e+06), (440064, 4.04908e+06), (440047, 4.0491e+06), (440044, 4.0491e+06), (440054, 4.0491e+06), (440070, 4.04908e+06), (440077, 4.04907e+06), (440093, 4.04905e+06), (440110, 4.04904e+06), (440126, 4.04902e+06), (440142, 4.049e+06), (440149, 4.04899e+06), (440164, 4.04897e+06), (440178, 4.04895e+06), (440193, 4.04893e+06), (440199, 4.04892e+06), (440213, 4.0489e+06), (440224, 4.04888e+06), (440225, 4.04888e+06), (440233, 4.04885e+06), (440234, 4.04885e+06), (440238, 4.04883e+06), (440243, 4.04881e+06), (440247, 4.0488e+06), (440260, 4.04878e+06), (440276, 4.04876e+06), (440288, 4.04874e+06), (440294, 4.04873e+06), (440301, 4.04871e+06), (440304, 4.04871e+06), (440311, 4.04868e+06), (440312, 4.04868e+06), (440318, 4.04865e+06), (440324, 4.04863e+06), (440327, 4.04861e+06), (440331, 4.04858e+06), (440332, 4.04856e+06), (440332, 4.04855e+06), (440327, 4.04853e+06), (440327, 4.04853e+06), (440318, 4.0485e+06), (440309, 4.04848e+06), (440301, 4.04847e+06), (440291, 4.04844e+06), (440284, 4.04843e+06), (440272, 4.04841e+06), (440271, 4.04841e+06), (440257, 4.04839e+06), (440246, 4.04837e+06), (440236, 4.04836e+06), (440221, 4.04835e+06), (440203, 4.04834e+06), (440182, 4.04833e+06), (440168, 4.04833e+06), (440152, 4.04833e+06), (440140, 4.04833e+06), (440116, 4.04833e+06), (440107, 4.04834e+06), (440082, 4.04834e+06), (440057, 4.04834e+06), (440032, 4.04835e+06), (440007, 4.04835e+06), (439983, 4.04835e+06), (439958, 4.04836e+06), (439933, 4.04836e+06), (439912, 4.04836e+06), (439887, 4.04837e+06), (439883, 4.04837e+06), (439859, 4.04838e+06), (439834, 4.04838e+06), (439826, 4.04838e+06), (439823, 4.04838e+06), (439822, 4.04838e+06), (439825, 4.04837e+06), (439835, 4.04837e+06), (439849, 4.04836e+06), (439859, 4.04835e+06), (439879, 4.04834e+06), (439898, 4.04832e+06), (439918, 4.0483e+06), (439937, 4.04829e+06), (439955, 4.04828e+06), (439970, 4.04827e+06), (439978, 4.04827e+06), (439980, 4.04826e+06), (439978, 4.04825e+06), (439971, 4.04824e+06), (439957, 4.04823e+06), (439945, 4.04823e+06), (439937, 4.04822e+06), (439937, 4.04822e+06), (439924, 4.04819e+06), (439913, 4.04818e+06), (439901, 4.04816e+06), (439900, 4.04815e+06), (439900, 4.04814e+06), (439909, 4.04812e+06), (439912, 4.04812e+06), (439925, 4.04809e+06), (439939, 4.04807e+06), (439944, 4.04806e+06), (439957, 4.04804e+06), (439958, 4.04804e+06), (439970, 4.04802e+06), (439982, 4.048e+06), (439990, 4.04799e+06), (439999, 4.04798e+06), (440007, 4.04798e+06), (440018, 4.04798e+06), (440027, 4.04798e+06), (440050, 4.04798e+06), (440062, 4.04798e+06), (440071, 4.04798e+06), (440082, 4.04798e+06), (440085, 4.04798e+06), (440108, 4.04797e+06), (440129, 4.04796e+06), (440149, 4.04796e+06), (440159, 4.04796e+06), (440166, 4.04795e+06), (440172, 4.04793e+06), (440178, 4.04791e+06), (440184, 4.0479e+06), (440196, 4.04789e+06), (440199, 4.04789e+06), (440219, 4.04787e+06), (440221, 4.04787e+06), (440241, 4.04785e+06), (440256, 4.04785e+06), (440270, 4.04784e+06), (440279, 4.04784e+06), (440285, 4.04783e+06), (440286, 4.04782e+06), (440284, 4.04781e+06), (440279, 4.04778e+06), (440275, 4.04777e+06), (440275, 4.04776e+06), (440279, 4.04774e+06), (440280, 4.04772e+06), (440278, 4.04771e+06), (440272, 4.0477e+06), (440264, 4.04769e+06), (440250, 4.04768e+06), (440246, 4.04768e+06), (440245, 4.04768e+06), (440246, 4.04767e+06), (440250, 4.04767e+06), (440256, 4.04766e+06), (440264, 4.04766e+06), (440289, 4.04766e+06), (440304, 4.04766e+06), (440318, 4.04766e+06), (440329, 4.04766e+06), (440354, 4.04766e+06), (440359, 4.04767e+06), (440362, 4.04767e+06), (440365, 4.04767e+06), (440367, 4.04768e+06), (440368, 4.04769e+06), (440370, 4.04769e+06), (440376, 4.04769e+06), (440382, 4.04769e+06), (440388, 4.04769e+06), (440390, 4.04768e+06), (440398, 4.04766e+06), (440400, 4.04765e+06), (440399, 4.04764e+06), (440395, 4.04762e+06), (440380, 4.04761e+06), (440369, 4.0476e+06), (440368, 4.0476e+06), (440352, 4.04758e+06), (440345, 4.04757e+06), (440328, 4.04757e+06), (440315, 4.04756e+06), (440294, 4.04755e+06), (440278, 4.04754e+06), (440274, 4.04754e+06), (440270, 4.04753e+06), (440267, 4.04751e+06), (440263, 4.0475e+06), (440255, 4.04748e+06), (440246, 4.04746e+06), (440235, 4.04743e+06), (440232, 4.04743e+06), (440223, 4.0474e+06), (440213, 4.04738e+06), (440204, 4.04736e+06), (440194, 4.04733e+06), (440189, 4.04732e+06), (440179, 4.0473e+06), (440169, 4.04728e+06), (440159, 4.04725e+06), (440149, 4.04723e+06), (440139, 4.04721e+06), (440137, 4.0472e+06), (440127, 4.04718e+06), (440117, 4.04716e+06), (440107, 4.04713e+06)))
Self intersecing polygon ignored: (((440604, 4.04772e+06), (440595, 4.04772e+06), (440593, 4.04772e+06), (440593, 4.04773e+06), (440597, 4.04773e+06), (440601, 4.04774e+06), (440608, 4.04775e+06), (440618, 4.04776e+06), (440628, 4.04776e+06), (440638, 4.04776e+06), (440650, 4.04776e+06), (440642, 4.04775e+06), (440637, 4.04775e+06), (440630, 4.04775e+06), (440623, 4.04775e+06), (440615, 4.04774e+06), (440608, 4.04773e+06), (440603, 4.04773e+06), (440601, 4.04772e+06), (440601, 4.04772e+06), (440604, 4.04772e+06)))
Self intersecing polygon ignored: (((448423, 4.04808e+06), (448424, 4.04809e+06), (448446, 4.0481e+06), (448458, 4.04811e+06), (448479, 4.04812e+06), (448485, 4.04812e+06), (448504, 4.04814e+06), (448510, 4.04815e+06), (448525, 4.04817e+06), (448533, 4.04818e+06), (448546, 4.0482e+06), (448559, 4.04822e+06), (448572, 4.04824e+06), (448578, 4.04825e+06), (448582, 4.04822e+06), (448584, 4.04821e+06), (448595, 4.04819e+06), (448598, 4.04819e+06), (448613, 4.04817e+06), (448623, 4.04815e+06), (448643, 4.04814e+06), (448664, 4.04812e+06), (448671, 4.04812e+06), (448692, 4.0481e+06), (448712, 4.04809e+06), (448734, 4.04808e+06), (448756, 4.04807e+06), (448778, 4.04806e+06), (448800, 4.04804e+06), (448807, 4.04804e+06), (448798, 4.04804e+06), (448796, 4.04804e+06), (448774, 4.04805e+06), (448752, 4.04806e+06), (448730, 4.04807e+06), (448708, 4.04808e+06), (448687, 4.0481e+06), (448666, 4.04811e+06), (448658, 4.04812e+06), (448637, 4.04813e+06), (448617, 4.04815e+06), (448605, 4.04816e+06), (448591, 4.04818e+06), (448587, 4.04819e+06), (448576, 4.04821e+06), (448573, 4.04823e+06), (448568, 4.04825e+06), (448565, 4.04824e+06), (448557, 4.04822e+06), (448548, 4.04819e+06), (448540, 4.04817e+06), (448531, 4.04816e+06), (448516, 4.04814e+06), (448509, 4.04813e+06), (448490, 4.04812e+06), (448483, 4.04811e+06), (448462, 4.0481e+06), (448445, 4.04809e+06), (448423, 4.04808e+06)))
Self intersecing polygon ignored: (((448741, 4.04925e+06), (448751, 4.04925e+06), (448753, 4.04924e+06), (448755, 4.04923e+06), (448752, 4.04922e+06), (448747, 4.04922e+06), (448739, 4.04921e+06), (448729, 4.04921e+06), (448722, 4.04922e+06), (448715, 4.04922e+06), (448710, 4.04923e+06), (448708, 4.04924e+06), (448711, 4.04924e+06), (448716, 4.04925e+06), (448724, 4.04926e+06), (448733, 4.04926e+06), (448742, 4.04926e+06), (448750, 4.04925e+06), (448741, 4.04925e+06), (448738, 4.04925e+06), (448732, 4.04925e+06), (448727, 4.04925e+06), (448722, 4.04925e+06), (448718, 4.04924e+06), (448717, 4.04924e+06), (448718, 4.04923e+06), (448720, 4.04923e+06), (448726, 4.04923e+06), (448732, 4.04922e+06), (448736, 4.04922e+06), (448741, 4.04922e+06), (448745, 4.04923e+06), (448746, 4.04923e+06), (448745, 4.04924e+06), (448741, 4.04925e+06)))
Self intersecing polygon ignored: (((451354, 4.04907e+06), (451363, 4.04908e+06), (451384, 4.04907e+06), (451406, 4.04905e+06), (451427, 4.04904e+06), (451427, 4.04904e+06), (451432, 4.04902e+06), (451420, 4.04901e+06), (451403, 4.04903e+06), (451386, 4.04904e+06), (451385, 4.04905e+06), (451364, 4.04906e+06), (451362, 4.04906e+06), (451340, 4.04907e+06), (451325, 4.04909e+06), (451320, 4.0491e+06), (451305, 4.04912e+06), (451289, 4.04914e+06), (451288, 4.04914e+06), (451288, 4.04915e+06), (451287, 4.04916e+06), (451288, 4.04917e+06), (451296, 4.04917e+06), (451295, 4.04916e+06), (451296, 4.04914e+06), (451297, 4.04914e+06), (451311, 4.04912e+06), (451327, 4.0491e+06), (451330, 4.0491e+06), (451345, 4.04908e+06), (451366, 4.04907e+06), (451370, 4.04907e+06), (451390, 4.04905e+06), (451403, 4.04904e+06), (451420, 4.04902e+06), (451423, 4.04902e+06), (451420, 4.04903e+06), (451418, 4.04904e+06), (451397, 4.04905e+06), (451375, 4.04906e+06), (451354, 4.04907e+06)))
Self intersecing polygon ignored: (((455315, 4.04068e+06), (455309, 4.04068e+06), (455309, 4.04068e+06), (455284, 4.04068e+06), (455277, 4.04068e+06), (455252, 4.04068e+06), (455227, 4.04069e+06), (455203, 4.04069e+06), (455184, 4.04069e+06), (455160, 4.0407e+06), (455135, 4.0407e+06), (455111, 4.04071e+06), (455090, 4.04071e+06), (455065, 4.04072e+06), (455041, 4.04072e+06), (455026, 4.04073e+06), (455001, 4.04073e+06), (454976, 4.04073e+06), (454951, 4.04074e+06), (454929, 4.04074e+06), (454905, 4.04074e+06), (454880, 4.04075e+06), (454855, 4.04075e+06), (454830, 4.04075e+06), (454805, 4.04076e+06), (454791, 4.04076e+06), (454766, 4.04076e+06), (454758, 4.04076e+06), (454733, 4.04076e+06), (454717, 4.04076e+06), (454692, 4.04075e+06), (454667, 4.04075e+06), (454642, 4.04075e+06), (454618, 4.04075e+06), (454593, 4.04075e+06), (454568, 4.04074e+06), (454564, 4.04074e+06), (454539, 4.04074e+06), (454537, 4.04074e+06), (454512, 4.04074e+06), (454487, 4.04074e+06), (454462, 4.04074e+06), (454437, 4.04075e+06), (454412, 4.04075e+06), (454387, 4.04075e+06), (454362, 4.04075e+06), (454337, 4.04075e+06), (454313, 4.04075e+06), (454309, 4.04075e+06), (454285, 4.04075e+06), (454282, 4.04075e+06), (454258, 4.04076e+06), (454233, 4.04076e+06), (454208, 4.04076e+06), (454184, 4.04077e+06), (454176, 4.04077e+06), (454152, 4.04078e+06), (454131, 4.04078e+06), (454108, 4.04079e+06), (454084, 4.0408e+06), (454061, 4.04081e+06), (454050, 4.04081e+06), (454026, 4.04082e+06), (454003, 4.04083e+06), (453980, 4.04084e+06), (453956, 4.04085e+06), (453933, 4.04086e+06), (453910, 4.04087e+06), (453887, 4.04088e+06), (453863, 4.04089e+06), (453861, 4.04089e+06), (453838, 4.04089e+06), (453815, 4.0409e+06), (453791, 4.04091e+06), (453776, 4.04092e+06), (453784, 4.04092e+06), (453794, 4.04092e+06), (453818, 4.04091e+06), (453841, 4.0409e+06), (453864, 4.04089e+06), (453887, 4.04088e+06), (453911, 4.04088e+06), (453934, 4.04087e+06), (453957, 4.04086e+06), (453981, 4.04085e+06), (454004, 4.04084e+06), (454027, 4.04083e+06), (454051, 4.04082e+06), (454063, 4.04082e+06), (454087, 4.04081e+06), (454110, 4.0408e+06), (454133, 4.04079e+06), (454154, 4.04078e+06), (454178, 4.04078e+06), (454185, 4.04078e+06), (454210, 4.04077e+06), (454234, 4.04077e+06), (454259, 4.04076e+06), (454283, 4.04076e+06), (454285, 4.04076e+06), (454310, 4.04076e+06), (454313, 4.04076e+06), (454338, 4.04076e+06), (454363, 4.04076e+06), (454387, 4.04075e+06), (454412, 4.04075e+06), (454437, 4.04075e+06), (454462, 4.04075e+06), (454487, 4.04075e+06), (454512, 4.04075e+06), (454537, 4.04075e+06), (454538, 4.04075e+06), (454563, 4.04075e+06), (454567, 4.04075e+06), (454592, 4.04076e+06), (454617, 4.04076e+06), (454617, 4.04076e+06), (454642, 4.04076e+06), (454667, 4.04076e+06), (454692, 4.04076e+06), (454717, 4.04076e+06), (454733, 4.04077e+06), (454758, 4.04077e+06), (454767, 4.04077e+06), (454792, 4.04077e+06), (454806, 4.04076e+06), (454831, 4.04076e+06), (454856, 4.04076e+06), (454881, 4.04075e+06), (454906, 4.04075e+06), (454930, 4.04075e+06), (454953, 4.04074e+06), (454978, 4.04074e+06), (455002, 4.04074e+06), (455027, 4.04073e+06), (455042, 4.04073e+06), (455066, 4.04073e+06), (455091, 4.04072e+06), (455113, 4.04072e+06), (455137, 4.04071e+06), (455161, 4.04071e+06), (455186, 4.0407e+06), (455204, 4.0407e+06), (455228, 4.04069e+06), (455253, 4.04069e+06), (455278, 4.04069e+06), (455285, 4.04069e+06), (455310, 4.04068e+06), (455315, 4.04068e+06)))