Merge branch '2.3.x' of github.com:mapnik/mapnik

Conflicts:
	deps/agg/build.py
	deps/clipper/build.py
	include/mapnik/feature_style_processor_impl.hpp
	plugins/input/csv/csv_datasource.cpp
This commit is contained in:
Dane Springmeyer 2013-11-03 23:10:21 -08:00
commit f998b2bda6
30 changed files with 333 additions and 90 deletions

View file

@ -14,6 +14,12 @@ Released ...
Summary: TODO
- Dropped support for Sun compiler
- Upgraded unifont to `unifont-6.3.20131020`
- CSV Plugin: added the ability to pass an `extent` in options
- Fixed crash when rendering to cairo context from python (#2031)
- Moved `label-position-tolerance` from unsigned type to double

View file

@ -36,6 +36,9 @@ except:
LIBDIR_SCHEMA_DEFAULT='lib'
severities = ['debug', 'warn', 'error', 'none']
ICU_INCLUDES_DEFAULT='/usr/include'
ICU_LIBS_DEFAULT='/usr/'
DEFAULT_CC = "gcc"
DEFAULT_CXX = "g++"
DEFAULT_CXX11_CXXFLAGS = " -std=c++11"
@ -43,6 +46,9 @@ DEFAULT_CXX11_LINKFLAGS = ""
if sys.platform == 'darwin':
DEFAULT_CC = "clang"
DEFAULT_CXX = "clang++"
# homebrew default
ICU_INCLUDES_DEFAULT='/usr/local/opt/icu4c/include/'
ICU_LIBS_DEFAULT='/usr/local/opt/icu4c/'
py3 = None
@ -323,8 +329,8 @@ opts.AddVariables(
# Variables for required dependencies
('FREETYPE_CONFIG', 'The path to the freetype-config executable.', 'freetype-config'),
('XML2_CONFIG', 'The path to the xml2-config executable.', 'xml2-config'),
PathVariable('ICU_INCLUDES', 'Search path for ICU include files', '/usr/include', PathVariable.PathAccept),
PathVariable('ICU_LIBS','Search path for ICU include files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
PathVariable('ICU_INCLUDES', 'Search path for ICU include files', ICU_INCLUDES_DEFAULT, PathVariable.PathAccept),
PathVariable('ICU_LIBS','Search path for ICU include files',ICU_LIBS_DEFAULT + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
('ICU_LIB_NAME', 'The library name for icu (such as icuuc, sicuuc, or icucore)', 'icuuc', PathVariable.PathAccept),
BoolVariable('PNG', 'Build Mapnik with PNG read and write support', 'True'),
@ -427,7 +433,6 @@ pickle_store = [# Scons internal variables
'BOOST_APPEND',
'LIBDIR_SCHEMA',
'REQUESTED_PLUGINS',
'SUNCC',
'PYTHON_VERSION',
'PYTHON_INCLUDES',
'PYTHON_INSTALL_LOCATION',
@ -1169,21 +1174,6 @@ if not preconfigured:
thread_suffix = ''
env.Append(LIBS = 'pthread')
# Solaris & Sun Studio settings (the `SUNCC` flag will only be
# set if the `CXX` option begins with `CC`)
SOLARIS = env['PLATFORM'] == 'SunOS'
env['SUNCC'] = SOLARIS and env['CXX'].startswith('CC')
# If the Sun Studio C++ compiler (`CC`) is used instead of gcc.
if env['SUNCC']:
env['CC'] = 'cc'
# To be compatible w/Boost everything needs to be compiled
# with the `-library=stlport4` flag (which needs to come
# before the `-o` flag).
env['CXX'] = 'CC -library=stlport4'
if env['THREADING'] == 'multi':
env.Append(CXXFLAGS = '-mt')
if env['SHAPE_MEMORY_MAPPED_FILE']:
env.Append(CPPDEFINES = '-DSHAPE_MEMORY_MAPPED_FILE')
@ -1764,22 +1754,22 @@ if not preconfigured:
else:
env.Append(CPPDEFINES = ndebug_defines)
if not env['SUNCC']:
# Common flags for CXX compiler.
common_cxx_flags = '-Wall %s %s -ftemplate-depth-300 ' % (env['WARNING_CXXFLAGS'], pthread)
# Common flags for g++/clang++ CXX compiler.
# TODO: clean up code more to make -Wsign-conversion -Wconversion viable
common_cxx_flags = '-Wall -Wsign-compare -Wshadow %s %s -ftemplate-depth-300 ' % (env['WARNING_CXXFLAGS'], pthread)
# https://github.com/mapnik/mapnik/issues/1835
if sys.platform == 'darwin' and env['CXX'] == 'g++':
common_cxx_flags += '-fpermissive '
# https://github.com/mapnik/mapnik/issues/1835
if sys.platform == 'darwin' and env['CXX'] == 'g++':
common_cxx_flags += '-fpermissive '
if env['DEBUG']:
env.Append(CXXFLAGS = common_cxx_flags + '-O0 -fno-inline')
else:
# TODO - add back -fvisibility-inlines-hidden
# https://github.com/mapnik/mapnik/issues/1863
env.Append(CXXFLAGS = common_cxx_flags + '-O%s -fno-strict-aliasing -finline-functions -Wno-inline -Wno-parentheses -Wno-char-subscripts' % (env['OPTIMIZATION']))
if env['DEBUG_UNDEFINED']:
env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
if env['DEBUG']:
env.Append(CXXFLAGS = common_cxx_flags + '-O0 -fno-inline')
else:
# TODO - add back -fvisibility-inlines-hidden
# https://github.com/mapnik/mapnik/issues/1863
env.Append(CXXFLAGS = common_cxx_flags + '-O%s -fno-strict-aliasing -finline-functions -Wno-inline -Wno-parentheses -Wno-char-subscripts' % (env['OPTIMIZATION']))
if env['DEBUG_UNDEFINED']:
env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
if 'python' in env['BINDINGS'] or 'python' in env['REQUESTED_PLUGINS']:
majver, minver = env['PYTHON_VERSION'].split('.')

View file

@ -28,9 +28,10 @@
using namespace boost::chrono;
using namespace mapnik;
static unsigned test_num = 1;
static bool dry_run = false;
static std::set<int> test_set;
typedef std::set<int> set_type;
static set_type test_set;
static set_type::key_type test_num = 1;
typedef process_cpu_clock clock_type;
typedef clock_type::duration dur;
@ -89,7 +90,7 @@ void benchmark(T & test_runner, std::string const& name)
{
std::clog << "test runner did not complete: " << ex.what() << "\n";
}
test_num++;
++test_num;
}
bool compare_images(std::string const& src_fn,std::string const& dest_fn)
@ -732,7 +733,7 @@ int main( int argc, char** argv)
} else if (opt[0] != '-') {
int arg;
if (mapnik::util::string2int(opt,arg)) {
test_set.insert(arg);
test_set.insert(static_cast<unsigned>(arg));
}
}
}
@ -888,7 +889,7 @@ int main( int argc, char** argv)
if (!success) {
std::clog << "warning, did not register any new fonts!\n";
}
unsigned face_count = mapnik::freetype_engine::face_names().size();
std::size_t face_count = mapnik::freetype_engine::face_names().size();
test13 runner(1000,10);
benchmark(runner, (boost::format("font_engine: created %ld faces in ") % (face_count * 1000 * 10)).str());
}

2
deps/agg/build.py vendored
View file

@ -24,4 +24,4 @@ Import('env')
lib_env = env.Clone()
if 'g++' in env['CXX']:
lib_env.Append(CXXFLAGS='-fPIC')
lib_env.StaticLibrary('agg', glob('./src/' + '*.cpp'), LIBS=[])
lib_env.StaticLibrary('agg', glob('./src/' + '*.cpp'), LIBS=[])

View file

@ -134,9 +134,9 @@ public:
inline unsigned rgba() const
{
#ifdef MAPNIK_BIG_ENDIAN
return (alpha_) | (blue_ << 8) | (green_ << 16) | (red_ << 24) ;
return static_cast<unsigned>((alpha_) | (blue_ << 8) | (green_ << 16) | (red_ << 24)) ;
#else
return (alpha_ << 24) | (blue_ << 16) | (green_ << 8) | (red_) ;
return static_cast<unsigned>((alpha_ << 24) | (blue_ << 16) | (green_ << 8) | (red_)) ;
#endif
}
};

View file

@ -112,7 +112,7 @@ public:
virtual datasource_t type() const = 0;
virtual processor_context_ptr get_context(feature_style_context_map&) const { return processor_context_ptr(); }
virtual featureset_ptr features_with_context(const query& q,processor_context_ptr ctx= processor_context_ptr()) const
virtual featureset_ptr features_with_context(query const& q,processor_context_ptr /*ctx*/) const
{
// default implementation without context use features method
return features(q);

View file

@ -100,7 +100,6 @@ private:
void prepare_layer(layer_rendering_material & mat,
feature_style_context_map & ctx_map,
Processor & p,
projection const& proj0,
double scale,
double scale_denom,
unsigned width,

View file

@ -190,7 +190,6 @@ void feature_style_processor<Processor>::apply(double scale_denom)
prepare_layer(*mat,
ctx_map,
p,
proj,
m_.scale(),
scale_denom,
m_.width(),
@ -267,7 +266,6 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay,
prepare_layer(mat,
ctx_map,
p,
proj0,
scale,
scale_denom,
width,
@ -286,7 +284,6 @@ template <typename Processor>
void feature_style_processor<Processor>::prepare_layer(layer_rendering_material & mat,
feature_style_context_map & ctx_map,
Processor & p,
projection const& proj0,
double scale,
double scale_denom,
unsigned width,
@ -510,7 +507,7 @@ void feature_style_processor<Processor>::prepare_layer(layer_rendering_material
}
else
{
for(size_t i = 0; i < active_styles.size(); ++i)
for(std::size_t i = 0; i < active_styles.size(); ++i)
{
featureset_ptr_list.push_back(ds->features_with_context(q,current_ctx));
}
@ -565,7 +562,7 @@ void feature_style_processor<Processor>::render_material(layer_rendering_materia
{
// We're at a value boundary, so render what we have
// up to this point.
int i = 0;
std::size_t i = 0;
for (feature_type_style const* style : active_styles)
{
@ -582,7 +579,7 @@ void feature_style_processor<Processor>::render_material(layer_rendering_materia
prev = feature;
}
int i = 0;
std::size_t i = 0;
for (feature_type_style const* style : active_styles)
{
cache->prepare();
@ -606,7 +603,7 @@ void feature_style_processor<Processor>::render_material(layer_rendering_materia
cache->push(feature);
}
}
int i = 0;
std::size_t i = 0;
for (feature_type_style const* style : active_styles)
{
cache->prepare();
@ -619,7 +616,7 @@ void feature_style_processor<Processor>::render_material(layer_rendering_materia
// We only have a single style and no grouping.
else
{
int i = 0;
std::size_t i = 0;
std::vector<featureset_ptr>::iterator featuresets = featureset_ptr_list.begin();
for (feature_type_style const* style : active_styles)
{

View file

@ -120,7 +120,7 @@ inline void read_double_ndr(const char* data, double & val)
inline void read_int16_xdr(const char* data, boost::int16_t & val)
{
#ifndef MAPNIK_BIG_ENDIAN
val = (data[3]&0xff) | ((data[2]&0xff)<<8);
val = static_cast<boost::int16_t>((data[3]&0xff) | ((data[2]&0xff)<<8));
#else
std::memcpy(&val,data,2);
#endif

View file

@ -91,9 +91,15 @@ public:
};
#ifdef __GNUC__
template <typename T,
template <typename U> class CreatePolicy=CreateStatic> class MAPNIK_DECL singleton
{
#else
template <typename T,
template <typename U> class CreatePolicy=CreateStatic> class singleton
{
#endif
friend class CreatePolicy<T>;
static T* pInstance_;
static bool destroyed_;

View file

@ -92,7 +92,7 @@ public:
void push_back (coord_type x,coord_type y,command_size command)
{
unsigned block = pos_ >> block_shift;
size_type block = pos_ >> block_shift;
if (block >= num_blocks_)
{
allocate_block(block);
@ -108,7 +108,7 @@ public:
unsigned get_vertex(unsigned pos,coord_type* x,coord_type* y) const
{
if (pos >= pos_) return SEG_END;
unsigned block = pos >> block_shift;
size_type block = pos >> block_shift;
const coord_type* vertex = vertices_[block] + (( pos & block_mask) << 1);
*x = (*vertex++);
*y = (*vertex);
@ -119,12 +119,12 @@ public:
{
if (pos < pos_)
{
unsigned block = pos >> block_shift;
size_type block = pos >> block_shift;
commands_[block] [pos & block_mask] = command;
}
}
private:
void allocate_block(unsigned block)
void allocate_block(size_type block)
{
if (block >= max_blocks_)
{

View file

@ -73,6 +73,7 @@ csv_datasource::csv_datasource(parameters const& params)
strict_(*params.get<mapnik::boolean>("strict", false)),
filesize_max_(*params.get<double>("filesize_max", 20.0)), // MB
ctx_(std::make_shared<mapnik::context_type>())
extent_initialized_(false)
{
/* TODO:
general:
@ -96,6 +97,12 @@ csv_datasource::csv_datasource(parameters const& params)
http://boost-spirit.com/home/articles/qi-example/tracking-the-input-position-while-parsing/
*/
boost::optional<std::string> ext = params.get<std::string>("extent");
if (ext && !ext->empty())
{
extent_initialized_ = extent_.from_string(*ext);
}
boost::optional<std::string> inline_string = params.get<std::string>("inline");
if (inline_string)
{
@ -406,7 +413,8 @@ void csv_datasource::parse_csv(T & stream,
}
mapnik::value_integer feature_count(0);
bool extent_initialized = false;
bool extent_started = false;
std::size_t num_headers = headers_.size();
for (std::size_t i = 0; i < headers_.size(); ++i)
@ -739,14 +747,17 @@ void csv_datasource::parse_csv(T & stream,
{
if (parsed_wkt || parsed_json)
{
if (!extent_initialized)
if (!extent_initialized_)
{
extent_initialized = true;
extent_ = feature->envelope();
}
else
{
extent_.expand_to_include(feature->envelope());
if (!extent_started)
{
extent_started = true;
extent_ = feature->envelope();
}
else
{
extent_.expand_to_include(feature->envelope());
}
}
features_.push_back(feature);
null_geom = false;
@ -777,14 +788,17 @@ void csv_datasource::parse_csv(T & stream,
feature->add_geometry(pt);
features_.push_back(feature);
null_geom = false;
if (!extent_initialized)
if (!extent_initialized_)
{
extent_initialized = true;
extent_ = feature->envelope();
}
else
{
extent_.expand_to_include(feature->envelope());
if (!extent_started)
{
extent_started = true;
extent_ = feature->envelope();
}
else
{
extent_.expand_to_include(feature->envelope());
}
}
}
else if (parsed_x || parsed_y)

View file

@ -76,6 +76,7 @@ private:
bool strict_;
double filesize_max_;
mapnik::context_ptr ctx_;
bool extent_initialized_;
};
#endif // MAPNIK_CSV_DATASOURCE_HPP

View file

@ -25,7 +25,7 @@
// stl
#include <string>
#include <vector>
#include <fstream>
#include <deque>
#include "geojson_featureset.hpp"

View file

@ -656,7 +656,7 @@ featureset_ptr postgis_datasource::features(query const& q) const
}
else
{
return features_with_context(q);
return features_with_context(q,processor_context_ptr());
}
}

View file

@ -68,7 +68,7 @@ public:
mapnik::datasource::datasource_t type() const;
static const char * name();
processor_context_ptr get_context(feature_style_context_map &) const;
featureset_ptr features_with_context(query const& q, processor_context_ptr ctx= processor_context_ptr()) const;
featureset_ptr features_with_context(query const& q, processor_context_ptr ctx) const;
featureset_ptr features(query const& q) const;
featureset_ptr features_at_point(coord2d const& pt, double tol = 0) const;
mapnik::box2d<double> envelope() const;

View file

@ -20,6 +20,7 @@
#
import os
import copy
Import ('plugin_base')
Import ('env')
@ -42,7 +43,7 @@ libraries.append(env['BOOST_PYTHON_LIB'])
libraries.append(env['ICU_LIB_NAME'])
python_cpppath = env['PYTHON_INCLUDES']
allcpp_paths = env['CPPPATH']
allcpp_paths = copy.copy(env['CPPPATH'])
allcpp_paths.extend(python_cpppath)
# NOTE: explicit linking to libpython is uneeded on most linux version if the
# python plugin is used by a app in python using mapnik's python bindings

View file

@ -36,12 +36,12 @@
#ifdef SHAPE_MEMORY_MAPPED_FILE
#include <boost/interprocess/mapped_region.hpp>
#include <mapnik/mapped_memory_cache.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
#endif
#include <mapnik/noncopyable.hpp>
// boost
#include <boost/cstdint.hpp>
#include <boost/interprocess/streams/bufferstream.hpp>
using mapnik::box2d;
using mapnik::read_int32_ndr;
@ -134,14 +134,12 @@ struct shape_record
}
};
using namespace boost::interprocess;
class shape_file : mapnik::noncopyable
{
public:
#ifdef SHAPE_MEMORY_MAPPED_FILE
typedef ibufferstream file_source_type;
typedef boost::interprocess::ibufferstream file_source_type;
typedef shape_record<MappedRecordTag> record_type;
mapnik::mapped_region_ptr mapped_region_;
#else

View file

@ -221,7 +221,7 @@ void cairo_context::set_line_width(double width)
check_object_status_and_throw_exception(*this);
}
void cairo_context::set_dash(dash_array const &dashes, double scale_factor)
void cairo_context::set_dash(dash_array const& dashes, double scale_factor)
{
std::valarray<double> d(dashes.size() * 2);
dash_array::const_iterator itr = dashes.begin();
@ -234,7 +234,7 @@ void cairo_context::set_dash(dash_array const &dashes, double scale_factor)
d[index++] = itr->second * scale_factor;
}
cairo_set_dash(cairo_.get() , &d[0], d.size(), 0/*offset*/);
cairo_set_dash(cairo_.get() , &d[0], static_cast<int>(d.size()), 0/*offset*/);
check_object_status_and_throw_exception(*this);
}

View file

@ -479,10 +479,10 @@ void Map::fixAspectRatio()
current_extent_.width(current_extent_.height() * ratio1);
break;
case ADJUST_CANVAS_HEIGHT:
height_ = int (width_ / ratio2 + 0.5);
height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
break;
case ADJUST_CANVAS_WIDTH:
width_ = int (height_ * ratio2 + 0.5);
width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
break;
case GROW_BBOX:
if (ratio2 > ratio1)
@ -498,15 +498,15 @@ void Map::fixAspectRatio()
break;
case GROW_CANVAS:
if (ratio2 > ratio1)
width_ = static_cast<int>(height_ * ratio2 + 0.5);
width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
else
height_ = int (width_ / ratio2 + 0.5);
height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
break;
case SHRINK_CANVAS:
if (ratio2 > ratio1)
height_ = int (width_ / ratio2 + 0.5);
height_ = static_cast<unsigned>(std::floor(static_cast<double>(width_) / ratio2 + 0.5));
else
width_ = static_cast<int>(height_ * ratio2 + 0.5);
width_ = static_cast<unsigned>(std::floor(static_cast<double>(height_) * ratio2 + 0.5));
break;
default:
if (ratio2 > ratio1)
@ -536,7 +536,7 @@ void Map::pan(int x,int y)
{
int dx = x - int(0.5 * width_);
int dy = int(0.5 * height_) - y;
double s = width_/current_extent_.width();
double s = static_cast<double>(width_)/current_extent_.width();
double minx = current_extent_.minx() + dx/s;
double maxx = current_extent_.maxx() + dx/s;
double miny = current_extent_.miny() + dy/s;
@ -553,7 +553,7 @@ void Map::pan_and_zoom(int x,int y,double factor)
double Map::scale() const
{
if (width_>0)
return current_extent_.width()/width_;
return current_extent_.width()/static_cast<double>(width_);
return current_extent_.width();
}
@ -605,7 +605,7 @@ featureset_ptr Map::query_point(unsigned index, double x, double y) const
<< "' into layer srs for tolerance calculation";
throw std::runtime_error(s.str());
}
double tol = (map_ex.maxx() - map_ex.minx()) / width_ * 3;
double tol = (map_ex.maxx() - map_ex.minx()) / static_cast<double>(width_) * 3;
featureset_ptr fs = ds->features_at_point(mapnik::coord2d(x,y), tol);
MAPNIK_LOG_DEBUG(map) << "map: Query at point tol=" << tol << "(" << x << "," << y << ")";
if (fs)

View file

@ -2,6 +2,7 @@
// mapnik
#include <mapnik/geometry.hpp>
#include <mapnik/util/conversions.hpp>
#include <mapnik/util/trim.hpp>
// boost
#include <boost/detail/lightweight_test.hpp>
@ -112,7 +113,7 @@ int main(int argc, char** argv)
parse_geom(geom,parts[1]);
//std::clog << dump_path(geom) << "\n";
// third part is expected, clipped geometry
BOOST_TEST_EQ(clip_line(bbox,geom),parts[2]);
BOOST_TEST_EQ(clip_line(bbox,geom),mapnik::util::trim_copy(parts[2]));
}
stream.close();
}

View file

@ -570,6 +570,17 @@ if 'csv' in mapnik.DatasourceCache.plugin_names():
eq_(desc['geometry_type'],mapnik.DataGeometryType.Point)
eq_(len(ds.all_features()),8)
def test_manually_supplied_extent(**kwargs):
csv_string = '''
wkt,Name
'''
ds = mapnik.Datasource(**{"type":"csv","extent":"-180,-90,180,90","inline":csv_string})
b = ds.envelope()
eq_(b.minx,-180)
eq_(b.miny,-90)
eq_(b.maxx,180)
eq_(b.maxy,90)
if __name__ == "__main__":
setup()
[eval(run)(visual=True) for run in dir() if 'test_' in run]

View file

@ -0,0 +1,137 @@
{
"keys": [
"",
"61"
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!! !!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 595 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 596 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 632 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 636 B

View file

@ -0,0 +1,80 @@
<Map srs="+init=epsg:3857" maximum-extent="-20037508.34,-20037508.34,20037508.34,20037508.34">
<Style name="polygon" filter-mode="first" >
<Rule>
<LineSymbolizer stroke-width="50" stroke-opacity="0.01" />
</Rule>
</Style>
<Layer name="polygon" srs="+init=epsg:3857">
<StyleName>polygon</StyleName>
<Datasource>
<Parameter name="type">csv</Parameter>
<Parameter name="extent"><![CDATA[-20037508.3,-20037508.3,20037508.3,20037508.3]]></Parameter>
<Parameter name="inline">
wkt
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))"
"POLYGON((-14452779.6317309 -7962451.4552494,-14452779.6317309 12037548.5447506,5547220.36826906 12037548.5447506,5547220.36826906 -7962451.4552494,-14452779.6317309 -7962451.4552494))
</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -213,6 +213,7 @@ files = {
'colorize-alpha3':{'sizes':[(512,512)]},
'image-filters-galore':{'sizes':[(512,512)]},
'image-filters-multi-blur':{'sizes':[(512,512)]},
'line-opacity-multi-render':{'sizes':[(512,512)]}
}
class Reporting: