fix memory datasource accumulate_extent
This commit is contained in:
parent
2c49c8b7fa
commit
b87e09c147
2 changed files with 47 additions and 23 deletions
|
@ -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_;
|
||||||
|
|
|
@ -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
|
||||||
|
|
Loading…
Reference in a new issue