[mapnik-vector-tile] 01/06: Imported Upstream version 0.11.0+dfsg

Sebastiaan Couwenberg sebastic at moszumanska.debian.org
Sat Oct 3 10:01:08 UTC 2015


This is an automated email from the git hooks/post-receive script.

sebastic pushed a commit to branch master
in repository mapnik-vector-tile.

commit d7f8a01a45a5f3f21ff19565cc137dd5b983b974
Author: Bas Couwenberg <sebastic at xs4all.nl>
Date:   Sat Oct 3 10:55:24 2015 +0200

    Imported Upstream version 0.11.0+dfsg
---
 CHANGELOG.md                  |  5 ++++
 Makefile                      |  4 ++--
 package.json                  |  2 +-
 src/vector_tile_processor.hpp |  2 ++
 src/vector_tile_processor.ipp | 31 ++++++++++++++++++------
 test/clipper_test.cpp         | 55 +++++++++++++++++++++++++++++++++++++++++++
 test/raster_tile.cpp          |  4 ++--
 test/vector_tile_pbf.cpp      |  2 +-
 8 files changed, 92 insertions(+), 13 deletions(-)

diff --git a/CHANGELOG.md b/CHANGELOG.md
index aaadafc..0b41e51 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,5 +1,10 @@
 # Changelog
 
+## 0.11.0
+
+ - Changed processor so that it now can optionally turn on and off strict enforcing of simple geometries from the clipper
+ - Updated angus clipper library used in Makefile to 6.4.0 (https://github.com/mapnik/clipper/tree/r496-mapnik)
+
 ## 0.10.0
 
  - Changed the way painted is determined. Painted could not be marked as true but a vector tile would still be empty.
diff --git a/Makefile b/Makefile
index 27454c1..1e05b3d 100755
--- a/Makefile
+++ b/Makefile
@@ -1,7 +1,7 @@
 MAPNIK_PLUGINDIR := $(shell mapnik-config --input-plugins)
 BUILDTYPE ?= Release
 
-CLIPPER_REVISION=e0973e0802
+CLIPPER_REVISION=b848b91877b6f0121356aaf813e8b9a45f929daa
 PROTOZERO_REVISION=v1.0.0
 GYP_REVISION=3464008
 
@@ -14,7 +14,7 @@ all: libvtile
 	git clone https://github.com/mapbox/protozero.git ./deps/protozero && cd ./deps/protozero && git checkout $(PROTOZERO_REVISION)
 
 ./deps/clipper:
-	git clone https://github.com/mapnik/clipper.git -b r493-mapnik ./deps/clipper && cd ./deps/clipper && git checkout $(CLIPPER_REVISION) && ./cpp/fix_members.sh
+	git clone https://github.com/mapnik/clipper.git -b r496-mapnik ./deps/clipper && cd ./deps/clipper && git checkout $(CLIPPER_REVISION) && ./cpp/fix_members.sh
 
 build/Makefile: ./deps/gyp ./deps/clipper ./deps/protozero gyp/build.gyp test/*cpp
 	deps/gyp/gyp gyp/build.gyp --depth=. -DMAPNIK_PLUGINDIR=\"$(MAPNIK_PLUGINDIR)\" -Goutput_dir=. --generator-output=./build -f make
diff --git a/package.json b/package.json
index 132131c..59b972c 100644
--- a/package.json
+++ b/package.json
@@ -1,6 +1,6 @@
 {
     "name": "mapnik-vector-tile",
-    "version": "0.10.0",
+    "version": "0.11.0",
     "description": "Mapnik vector tile API",
     "main": "./package.json",
     "repository"   :  {
diff --git a/src/vector_tile_processor.hpp b/src/vector_tile_processor.hpp
index 89cf4ce..70fe9e0 100644
--- a/src/vector_tile_processor.hpp
+++ b/src/vector_tile_processor.hpp
@@ -37,6 +37,7 @@ private:
     double scale_factor_;
     mapnik::view_transform t_;
     double area_threshold_;
+    bool strictly_simple_;
     std::string image_format_;
     scaling_method_e scaling_method_;
     bool painted_;
@@ -49,6 +50,7 @@ public:
               unsigned offset_x=0,
               unsigned offset_y=0,
               double area_threshold=0.1,
+              bool strictly_simple=false,
               std::string const& image_format="jpeg",
               scaling_method_e scaling_method=SCALING_NEAR
         );
diff --git a/src/vector_tile_processor.ipp b/src/vector_tile_processor.ipp
index 220cfeb..e642e21 100644
--- a/src/vector_tile_processor.ipp
+++ b/src/vector_tile_processor.ipp
@@ -592,6 +592,7 @@ processor<T>::processor(T & backend,
               unsigned offset_x,
               unsigned offset_y,
               double area_threshold,
+              bool strictly_simple,
               std::string const& image_format,
               scaling_method_e scaling_method)
     : backend_(backend),
@@ -600,6 +601,7 @@ processor<T>::processor(T & backend,
       scale_factor_(scale_factor),
       t_(m_req.width(),m_req.height(),m_req.extent(),offset_x,offset_y),
       area_threshold_(area_threshold),
+      strictly_simple_(strictly_simple),
       image_format_(image_format),
       scaling_method_(scaling_method),
       painted_(false),
@@ -890,11 +892,13 @@ struct encoder_visitor {
     encoder_visitor(backend_type & backend,
                     mapnik::feature_impl const& feature,
                     mapnik::box2d<int> const& tile_clipping_extent,
-                    double area_threshold) :
+                    double area_threshold,
+                    bool strictly_simple) :
       backend_(backend),
       feature_(feature),
       tile_clipping_extent_(tile_clipping_extent),
-      area_threshold_(area_threshold) {}
+      area_threshold_(area_threshold),
+      strictly_simple_(strictly_simple) {}
 
     bool operator() (mapnik::geometry::geometry_empty const&)
     {
@@ -1041,7 +1045,10 @@ struct encoder_visitor {
             std::reverse(geom.exterior_ring.begin(), geom.exterior_ring.end());
         }
         ClipperLib::Clipper poly_clipper;
-        //poly_clipper.StrictlySimple(true);
+        /*if (strictly_simple_) 
+        {
+            poly_clipper.StrictlySimple(true);
+        }*/
         if (!poly_clipper.AddPath(geom.exterior_ring, ClipperLib::ptSubject, true))
         {
             return painted;
@@ -1080,7 +1087,10 @@ struct encoder_visitor {
         }
         
         ClipperLib::PolyTree polygons;
-        //clipper.StrictlySimple(true);
+        if (strictly_simple_)
+        {
+            clipper.StrictlySimple(true);
+        }
         clipper.Execute(ClipperLib::ctUnion, polygons); //, ClipperLib::pftNonZero);
         clipper.Clear();
         
@@ -1142,7 +1152,10 @@ struct encoder_visitor {
                 std::reverse(poly.exterior_ring.begin(), poly.exterior_ring.end());
             }
             ClipperLib::Clipper poly_clipper;
-            //poly_clipper.StrictlySimple(true);
+            /*if (strictly_simple_)
+            {
+                poly_clipper.StrictlySimple(true);
+            }*/
             if (!poly_clipper.AddPath(poly.exterior_ring, ClipperLib::ptSubject, true))
             {
                 continue;
@@ -1180,7 +1193,10 @@ struct encoder_visitor {
         }
         
         ClipperLib::PolyTree polygons;
-        //clipper.StrictlySimple(true);
+        if (strictly_simple_) 
+        {
+            clipper.StrictlySimple(true);
+        }
         clipper.Execute(ClipperLib::ctUnion, polygons); //, ClipperLib::pftNonZero);
         clipper.Clear();
         
@@ -1211,6 +1227,7 @@ struct encoder_visitor {
     mapnik::feature_impl const& feature_;
     mapnik::box2d<int> const& tile_clipping_extent_;
     double area_threshold_;
+    bool strictly_simple_;
 };
 
 template <typename T>
@@ -1295,7 +1312,7 @@ bool processor<T>::handle_geometry(T2 const& vs,
     using vector_tile_strategy_type = T2;
     mapnik::vector_tile_impl::transform_visitor<vector_tile_strategy_type> skipping_transformer(vs, target_clipping_extent);
     mapnik::geometry::geometry<std::int64_t> new_geom = mapnik::util::apply_visitor(skipping_transformer,geom);
-    encoder_visitor<T> encoder(backend_, feature, tile_clipping_extent, area_threshold_);
+    encoder_visitor<T> encoder(backend_, feature, tile_clipping_extent, area_threshold_, strictly_simple_);
     if (simplify_distance_ > 0)
     {
         simplify_visitor<T> simplifier(simplify_distance_,encoder);
diff --git a/test/clipper_test.cpp b/test/clipper_test.cpp
index 5224a98..4eb1c25 100644
--- a/test/clipper_test.cpp
+++ b/test/clipper_test.cpp
@@ -189,3 +189,58 @@ TEST_CASE( "clipper AddPath 2", "should throw on out of range coords" ) {
     }        
 }
 
+TEST_CASE( "clipper polytree error" ) {
+
+    // http://sourceforge.net/p/polyclipping/bugs/132/
+    ClipperLib::Clipper clipper;
+    ClipperLib::Paths polygons;
+    ClipperLib::Path shape1;
+    ClipperLib::Path shape2;
+    ClipperLib::Path shape3;
+    ClipperLib::Path shape4;
+    // shape 1
+    shape1.emplace_back(280000, 240000),
+    shape1.emplace_back(180000, 240000),
+    shape1.emplace_back(180000, 200000),
+    shape1.emplace_back(240000, 200000),
+    shape1.emplace_back(240000, 90000),
+    shape1.emplace_back(180000, 90000),
+    shape1.emplace_back(180000, 50000),
+    shape1.emplace_back(280000, 50000),
+    // shape 2
+    shape2.emplace_back(230000, 120000),
+    shape2.emplace_back(230000, 160000),
+    shape2.emplace_back(180000, 160000),
+    shape2.emplace_back(180000, 120000),
+    // shape 3
+    shape3.emplace_back(180000, 50000),
+    shape3.emplace_back(180000, 90000),
+    shape3.emplace_back(100000, 90001), // Problematic point
+    //shape3.emplace_back(100000, 90000), // This point is okay
+    shape3.emplace_back(100000, 200000),
+    shape3.emplace_back(180000, 200000),
+    shape3.emplace_back(180000, 240000),
+    shape3.emplace_back(60000, 240000),
+    shape3.emplace_back(60000, 50000),
+    // shape 4
+    shape4.emplace_back(180000, 120000),
+    shape4.emplace_back(180000, 160000),
+    shape4.emplace_back(120000, 160000),
+    shape4.emplace_back(120000, 120000),
+    polygons.emplace_back(shape1);
+    polygons.emplace_back(shape2);
+    polygons.emplace_back(shape3);
+    polygons.emplace_back(shape4);
+
+    clipper.AddPaths(polygons, ClipperLib::ptSubject, true);
+    ClipperLib::PolyTree solution;
+    clipper.Execute(ClipperLib::ctUnion, solution, ClipperLib::pftNonZero, ClipperLib::pftNonZero);
+
+    // Check that the polytree is correct
+    REQUIRE(solution.Childs.size() == 1);
+    REQUIRE(solution.Childs[0]->Childs.size() == 1);
+    REQUIRE(solution.Childs[0]->Childs[0]->Childs.size() == 1);
+    REQUIRE(solution.Childs[0]->Childs[0]->Childs[0]->Childs.size() == 0);
+
+}
+
diff --git a/test/raster_tile.cpp b/test/raster_tile.cpp
index 05be15d..6039873 100644
--- a/test/raster_tile.cpp
+++ b/test/raster_tile.cpp
@@ -48,7 +48,7 @@ TEST_CASE( "raster tile output 1", "should create raster tile with one raster la
     map.add_layer(lyr);
     mapnik::request m_req(tile_size,tile_size,bbox);
     m_req.set_buffer_size(map.buffer_size());
-    renderer_type ren(backend,map,m_req,1.0,0,0,1,"jpeg",mapnik::SCALING_BILINEAR);
+    renderer_type ren(backend,map,m_req,1.0,0,0,1,false,"jpeg",mapnik::SCALING_BILINEAR);
     ren.apply();
     std::string key("");
     CHECK(false == mapnik::vector_tile_impl::is_solid_extent(tile,key));
@@ -167,7 +167,7 @@ TEST_CASE( "raster tile output 2", "should be able to overzoom raster" ) {
         map.add_layer(lyr);
         mapnik::request m_req(256,256,bbox);
         m_req.set_buffer_size(map.buffer_size());
-        renderer_type ren(backend,map,m_req,1.0,0,0,1,"jpeg",mapnik::SCALING_BILINEAR);
+        renderer_type ren(backend,map,m_req,1.0,0,0,1,false,"jpeg",mapnik::SCALING_BILINEAR);
         ren.apply();
     }
     // Done creating test data, now test created tile
diff --git a/test/vector_tile_pbf.cpp b/test/vector_tile_pbf.cpp
index a45c500..f1ec69f 100644
--- a/test/vector_tile_pbf.cpp
+++ b/test/vector_tile_pbf.cpp
@@ -476,7 +476,7 @@ TEST_CASE( "pbf raster tile output", "should be able to overzoom raster" ) {
         map.add_layer(lyr);
         mapnik::request m_req(256,256,bbox);
         m_req.set_buffer_size(map.buffer_size());
-        renderer_type ren(backend,map,m_req,1.0,0,0,1,"jpeg",mapnik::SCALING_BILINEAR);
+        renderer_type ren(backend,map,m_req,1.0,0,0,1,false,"jpeg",mapnik::SCALING_BILINEAR);
         ren.apply();
     }
     // Done creating test data, now test created tile

-- 
Alioth's /usr/local/bin/git-commit-notice on /srv/git.debian.org/git/pkg-grass/mapnik-vector-tile.git



More information about the Pkg-grass-devel mailing list