fix memory datasource accumulate_extent

This commit is contained in:
Dane Springmeyer 2015-03-24 14:46:26 -07:00
parent 2c49c8b7fa
commit b87e09c147
2 changed files with 47 additions and 23 deletions

View file

@ -27,7 +27,7 @@
#include <mapnik/memory_datasource.hpp> #include <mapnik/memory_datasource.hpp>
#include <mapnik/memory_featureset.hpp> #include <mapnik/memory_featureset.hpp>
#include <mapnik/boolean.hpp> #include <mapnik/boolean.hpp>
// boost #include <mapnik/geometry_envelope.hpp>
// stl // stl
#include <algorithm> #include <algorithm>
@ -46,24 +46,17 @@ struct accumulate_extent
void operator() (feature_ptr const& feat) void operator() (feature_ptr const& feat)
{ {
// FIXME auto const& geom = feat->get_geometry();
/* auto bbox = geometry::envelope(geom);
auto size = feat->num_geometries(); if ( first_ )
for (std::size_t i = 0; i < size; ++i)
{ {
geometry_type const& geom = feat->get_geometry(i); first_ = false;
auto bbox = ::mapnik::envelope(geom); ext_ = bbox;
if ( first_ ) }
{ else
first_ = false; {
ext_ = bbox; ext_.expand_to_include(bbox);
}
else
{
ext_.expand_to_include(bbox);
}
} }
*/
} }
box2d<double> & ext_; box2d<double> & ext_;

View file

@ -9,23 +9,54 @@ import json
# geojson box of the world # 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 ] ] ] } } 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') expected_color = mapnik.Color('white')
projection = '+init=epsg:4326'
ds = mapnik.MemoryDatasource() ds = mapnik.MemoryDatasource()
context = mapnik.Context() 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() s = mapnik.Style()
r = mapnik.Rule() r = mapnik.Rule()
sym = mapnik.PolygonSymbolizer() sym = mapnik.PolygonSymbolizer()
sym.fill = expected_color sym.fill = expected_color
sym.clip = False
r.symbols.append(sym) r.symbols.append(sym)
s.rules.append(r) s.rules.append(r)
lyr = mapnik.Layer('Layer') lyr = mapnik.Layer('Layer',projection)
lyr.datasource = ds lyr.datasource = ds
lyr.styles.append('style') lyr.styles.append('style')
m = mapnik.Map(256,256) m = mapnik.Map(256,256,projection)
m.background_color = mapnik.Color('black') 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.append_style('style',s)
m.layers.append(lyr) m.layers.append(lyr)
# 17/20864/45265.png # 17/20864/45265.png