diff --git a/src/memory_datasource.cpp b/src/memory_datasource.cpp index ba733bb06..eb107d394 100644 --- a/src/memory_datasource.cpp +++ b/src/memory_datasource.cpp @@ -27,7 +27,7 @@ #include #include #include -// boost +#include // stl #include @@ -46,24 +46,17 @@ struct accumulate_extent void operator() (feature_ptr const& feat) { - // FIXME - /* - auto size = feat->num_geometries(); - for (std::size_t i = 0; i < size; ++i) + auto const& geom = feat->get_geometry(); + auto bbox = geometry::envelope(geom); + if ( first_ ) { - geometry_type const& geom = feat->get_geometry(i); - auto bbox = ::mapnik::envelope(geom); - if ( first_ ) - { - first_ = false; - ext_ = bbox; - } - else - { - ext_.expand_to_include(bbox); - } + first_ = false; + ext_ = bbox; + } + else + { + ext_.expand_to_include(bbox); } - */ } box2d & ext_; diff --git a/tests/python_tests/agg_rasterizer_integer_overflow_test.py b/tests/python_tests/agg_rasterizer_integer_overflow_test.py index 3635e1424..bfd8128d9 100644 --- a/tests/python_tests/agg_rasterizer_integer_overflow_test.py +++ b/tests/python_tests/agg_rasterizer_integer_overflow_test.py @@ -9,23 +9,54 @@ import json # geojson box of the world geojson = { "type": "Feature", "properties": { }, "geometry": { "type": "Polygon", "coordinates": [ [ [ -17963313.143242701888084, -6300857.11560364998877 ], [ -17963313.143242701888084, 13071343.332991421222687 ], [ 7396658.353099936619401, 13071343.332991421222687 ], [ 7396658.353099936619401, -6300857.11560364998877 ], [ -17963313.143242701888084, -6300857.11560364998877 ] ] ] } } -def test_that_coordinates_do_not_overflow_and_polygon_is_rendered(): +def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_memory(): expected_color = mapnik.Color('white') + projection = '+init=epsg:4326' ds = mapnik.MemoryDatasource() context = mapnik.Context() - ds.add_feature(mapnik.Feature.from_geojson(json.dumps(geojson),context)) + feat = mapnik.Feature.from_geojson(json.dumps(geojson),context) + ds.add_feature(feat) s = mapnik.Style() r = mapnik.Rule() sym = mapnik.PolygonSymbolizer() sym.fill = expected_color - sym.clip = False r.symbols.append(sym) s.rules.append(r) - lyr = mapnik.Layer('Layer') + lyr = mapnik.Layer('Layer',projection) lyr.datasource = ds lyr.styles.append('style') - m = mapnik.Map(256,256) - m.background_color = mapnik.Color('black') + m = mapnik.Map(256,256,projection) + m.background_color = mapnik.Color('green') + m.append_style('style',s) + m.layers.append(lyr) + # 17/20864/45265.png + m.zoom_to_box(mapnik.Box2d(-13658379.710221574,6197514.253362091,-13657768.213995293,6198125.749588372)) + # works 15/5216/11316.png + #m.zoom_to_box(mapnik.Box2d(-13658379.710221574,6195679.764683247,-13655933.72531645,6198125.749588372)) + im = mapnik.Image(256,256) + mapnik.render(m,im) + eq_(im.get_pixel(128,128),expected_color.packed()) + +def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_csv(): + expected_color = mapnik.Color('white') + projection = '+init=epsg:4326' + ds = mapnik.MemoryDatasource() + context = mapnik.Context() + feat = mapnik.Feature.from_geojson(json.dumps(geojson),context) + ds.add_feature(feat) + geojson_string = "geojson\n'%s'" % json.dumps(geojson['geometry']) + ds = mapnik.Datasource(**{'type':'csv','inline':geojson_string}) + s = mapnik.Style() + r = mapnik.Rule() + sym = mapnik.PolygonSymbolizer() + sym.fill = expected_color + r.symbols.append(sym) + s.rules.append(r) + lyr = mapnik.Layer('Layer',projection) + lyr.datasource = ds + lyr.styles.append('style') + m = mapnik.Map(256,256,projection) + m.background_color = mapnik.Color('green') m.append_style('style',s) m.layers.append(lyr) # 17/20864/45265.png