Merge branch 'master' into skia-renderer
Conflicts: src/build.py
|
@ -5,7 +5,7 @@ compiler: clang
|
|||
before_install:
|
||||
- echo 'yes' | sudo add-apt-repository ppa:mapnik/boost
|
||||
- sudo apt-get update -qq
|
||||
- sudo apt-get install -qq libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-system-dev libboost-thread-dev python-nose libicu-dev libpng-dev libjpeg-dev libtiff-dev libz-dev libfreetype6-dev libxml2-dev libproj-dev
|
||||
- sudo apt-get install -qq libboost-dev libboost-filesystem-dev libboost-program-options-dev libboost-python-dev libboost-regex-dev libboost-system-dev libboost-thread-dev python-nose libicu-dev libpng-dev libjpeg-dev libtiff-dev libwebp-dev libz-dev libfreetype6-dev libxml2-dev libproj-dev
|
||||
|
||||
script:
|
||||
- ./configure DEMO=False BINDINGS='python' CPP_TESTS=False CAIRO=False INPUT_PLUGINS='' OPTIMIZATION=1 FAST=True && JOBS=2 make
|
||||
|
|
37
SConstruct
|
@ -336,8 +336,6 @@ opts.AddVariables(
|
|||
|
||||
# Variables affecting rendering back-ends
|
||||
|
||||
BoolVariable('RENDERING_STATS', 'Output rendering statistics during style processing', 'False'),
|
||||
|
||||
BoolVariable('SVG_RENDERER', 'build support for native svg renderer', 'False'),
|
||||
BoolVariable('CPP_TESTS', 'Compile the C++ tests', 'True'),
|
||||
BoolVariable('BENCHMARK', 'Compile the C++ benchmark scripts', 'False'),
|
||||
|
@ -1190,14 +1188,15 @@ if not preconfigured:
|
|||
else:
|
||||
env['MISSING_DEPS'].append('libxml2')
|
||||
|
||||
LIBSHEADERS = [
|
||||
REQUIRED_LIBSHEADERS = [
|
||||
['z', 'zlib.h', True,'C'],
|
||||
[env['ICU_LIB_NAME'],'unicode/unistr.h',True,'C++'],
|
||||
]
|
||||
|
||||
OPTIONAL_LIBSHEADERS = []
|
||||
|
||||
if env['JPEG']:
|
||||
env.Append(CPPDEFINES = '-DHAVE_JPEG')
|
||||
LIBSHEADERS.append(['jpeg', ['stdio.h', 'jpeglib.h'], False,'C'])
|
||||
OPTIONAL_LIBSHEADERS.append(['jpeg', ['stdio.h', 'jpeglib.h'], False,'C','-DHAVE_JPEG'])
|
||||
inc_path = env['%s_INCLUDES' % 'JPEG']
|
||||
lib_path = env['%s_LIBS' % 'JPEG']
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
|
||||
|
@ -1206,8 +1205,7 @@ if not preconfigured:
|
|||
env['SKIPPED_DEPS'].extend(['jpeg'])
|
||||
|
||||
if env['PROJ']:
|
||||
env.Append(CPPDEFINES = '-DMAPNIK_USE_PROJ4')
|
||||
LIBSHEADERS.append(['proj', 'proj_api.h', False,'C'])
|
||||
OPTIONAL_LIBSHEADERS.append(['proj', 'proj_api.h', False,'C','-DMAPNIK_USE_PROJ4'])
|
||||
inc_path = env['%s_INCLUDES' % 'PROJ']
|
||||
lib_path = env['%s_LIBS' % 'PROJ']
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
|
||||
|
@ -1216,8 +1214,7 @@ if not preconfigured:
|
|||
env['SKIPPED_DEPS'].extend(['proj'])
|
||||
|
||||
if env['PNG']:
|
||||
env.Append(CPPDEFINES = '-DHAVE_PNG')
|
||||
LIBSHEADERS.append(['png', 'png.h', False,'C'])
|
||||
OPTIONAL_LIBSHEADERS.append(['png', 'png.h', False,'C','-DHAVE_PNG'])
|
||||
inc_path = env['%s_INCLUDES' % 'PNG']
|
||||
lib_path = env['%s_LIBS' % 'PNG']
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
|
||||
|
@ -1226,8 +1223,7 @@ if not preconfigured:
|
|||
env['SKIPPED_DEPS'].extend(['png'])
|
||||
|
||||
if env['WEBP']:
|
||||
env.Append(CPPDEFINES = '-DHAVE_WEBP')
|
||||
LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C'])
|
||||
OPTIONAL_LIBSHEADERS.append(['webp', 'webp/decode.h', False,'C','-DHAVE_WEBP'])
|
||||
inc_path = env['%s_INCLUDES' % 'WEBP']
|
||||
lib_path = env['%s_LIBS' % 'WEBP']
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
|
||||
|
@ -1236,8 +1232,7 @@ if not preconfigured:
|
|||
env['SKIPPED_DEPS'].extend(['webp'])
|
||||
|
||||
if env['TIFF']:
|
||||
env.Append(CPPDEFINES = '-DHAVE_TIFF')
|
||||
LIBSHEADERS.append(['tiff', 'tiff.h', False,'C'])
|
||||
OPTIONAL_LIBSHEADERS.append(['tiff', 'tiff.h', False,'C','-DHAVE_TIFF'])
|
||||
inc_path = env['%s_INCLUDES' % 'TIFF']
|
||||
lib_path = env['%s_LIBS' % 'TIFF']
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(inc_path))
|
||||
|
@ -1250,7 +1245,7 @@ if not preconfigured:
|
|||
conf.prioritize_paths(silent=True)
|
||||
|
||||
if not env['HOST']:
|
||||
for libname, headers, required, lang in LIBSHEADERS:
|
||||
for libname, headers, required, lang in REQUIRED_LIBSHEADERS:
|
||||
if not conf.CheckLibWithHeader(libname, headers, lang):
|
||||
if required:
|
||||
color_print(1, 'Could not find required header or shared library for %s' % libname)
|
||||
|
@ -1338,6 +1333,20 @@ if not preconfigured:
|
|||
else:
|
||||
env['SKIPPED_DEPS'].append('boost_regex_icu')
|
||||
|
||||
if not env['HOST']:
|
||||
for libname, headers, required, lang, define in OPTIONAL_LIBSHEADERS:
|
||||
if not conf.CheckLibWithHeader(libname, headers, lang):
|
||||
if required:
|
||||
color_print(1, 'Could not find required header or shared library for %s' % libname)
|
||||
env['MISSING_DEPS'].append(libname)
|
||||
else:
|
||||
color_print(4, 'Could not find optional header or shared library for %s' % libname)
|
||||
env['SKIPPED_DEPS'].append(libname)
|
||||
else:
|
||||
env.Append(CPPDEFINES = define)
|
||||
else:
|
||||
env.Append(CPPDEFINES = define)
|
||||
|
||||
env['REQUESTED_PLUGINS'] = [ driver.strip() for driver in Split(env['INPUT_PLUGINS'])]
|
||||
|
||||
SQLITE_HAS_RTREE = None
|
||||
|
|
|
@ -107,8 +107,11 @@ private:
|
|||
|
||||
struct symbolizer_attributes : public boost::static_visitor<>
|
||||
{
|
||||
symbolizer_attributes(std::set<std::string>& names)
|
||||
: names_(names), f_attr(names) {}
|
||||
symbolizer_attributes(std::set<std::string>& names,
|
||||
double & filter_factor)
|
||||
: names_(names),
|
||||
filter_factor_(filter_factor),
|
||||
f_attr(names) {}
|
||||
|
||||
template <typename T>
|
||||
void operator () (T const&) const {}
|
||||
|
@ -217,10 +220,15 @@ struct symbolizer_attributes : public boost::static_visitor<>
|
|||
}
|
||||
collect_transform(sym.get_transform());
|
||||
}
|
||||
// TODO - support remaining syms
|
||||
|
||||
void operator () (raster_symbolizer const& sym)
|
||||
{
|
||||
filter_factor_ = sym.calculate_filter_factor();
|
||||
}
|
||||
|
||||
private:
|
||||
std::set<std::string>& names_;
|
||||
double & filter_factor_;
|
||||
expression_attributes<std::set<std::string> > f_attr;
|
||||
void collect_transform(transform_list_ptr const& trans_expr)
|
||||
{
|
||||
|
@ -236,18 +244,20 @@ class attribute_collector : public mapnik::noncopyable
|
|||
{
|
||||
private:
|
||||
std::set<std::string>& names_;
|
||||
double filter_factor_;
|
||||
expression_attributes<std::set<std::string> > f_attr;
|
||||
public:
|
||||
|
||||
attribute_collector(std::set<std::string>& names)
|
||||
: names_(names), f_attr(names) {}
|
||||
|
||||
: names_(names),
|
||||
filter_factor_(1.0),
|
||||
f_attr(names) {}
|
||||
template <typename RuleType>
|
||||
void operator() (RuleType const& r)
|
||||
{
|
||||
typename RuleType::symbolizers const& symbols = r.get_symbolizers();
|
||||
typename RuleType::symbolizers::const_iterator symIter=symbols.begin();
|
||||
symbolizer_attributes s_attr(names_);
|
||||
symbolizer_attributes s_attr(names_,filter_factor_);
|
||||
while (symIter != symbols.end())
|
||||
{
|
||||
boost::apply_visitor(s_attr,*symIter++);
|
||||
|
@ -256,22 +266,11 @@ public:
|
|||
expression_ptr const& expr = r.get_filter();
|
||||
boost::apply_visitor(f_attr,*expr);
|
||||
}
|
||||
};
|
||||
|
||||
struct directive_collector : public boost::static_visitor<>
|
||||
{
|
||||
directive_collector(double & filter_factor)
|
||||
: filter_factor_(filter_factor) {}
|
||||
|
||||
template <typename T>
|
||||
void operator () (T const&) const {}
|
||||
|
||||
void operator () (raster_symbolizer const& sym)
|
||||
double get_filter_factor() const
|
||||
{
|
||||
filter_factor_ = sym.calculate_filter_factor();
|
||||
return filter_factor_;
|
||||
}
|
||||
private:
|
||||
double & filter_factor_;
|
||||
};
|
||||
|
||||
} // namespace mapnik
|
||||
|
|
|
@ -85,11 +85,9 @@ private:
|
|||
/*!
|
||||
* \brief renders a featureset with the given styles.
|
||||
*/
|
||||
void render_style(layer const& lay,
|
||||
Processor & p,
|
||||
void render_style(Processor & p,
|
||||
feature_type_style const* style,
|
||||
rule_cache const& rules,
|
||||
std::string const& style_name,
|
||||
featureset_ptr features,
|
||||
proj_transform const& prj_trans);
|
||||
|
||||
|
|
|
@ -45,6 +45,7 @@
|
|||
#include <mapnik/scale_denominator.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/proj_transform.hpp>
|
||||
#include <mapnik/util/featureset_buffer.hpp>
|
||||
|
||||
// boost
|
||||
#include <boost/variant/apply_visitor.hpp>
|
||||
|
@ -56,12 +57,6 @@
|
|||
#include <vector>
|
||||
#include <stdexcept>
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
#include <mapnik/timer.hpp>
|
||||
#include <iomanip>
|
||||
#include <sstream>
|
||||
#endif
|
||||
|
||||
namespace mapnik
|
||||
{
|
||||
|
||||
|
@ -152,11 +147,6 @@ feature_style_processor<Processor>::feature_style_processor(Map const& m, double
|
|||
template <typename Processor>
|
||||
void feature_style_processor<Processor>::apply(double scale_denom)
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
std::clog << "\n//-- starting rendering timer...\n";
|
||||
mapnik::progress_timer t(std::clog, "total map rendering");
|
||||
#endif
|
||||
|
||||
Processor & p = static_cast<Processor&>(*this);
|
||||
p.start_map_processing(m_);
|
||||
|
||||
|
@ -186,11 +176,6 @@ void feature_style_processor<Processor>::apply(double scale_denom)
|
|||
|
||||
p.end_map_processing(m_);
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
t.stop();
|
||||
std::clog << "//-- rendering timer stopped...\n\n";
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
template <typename Processor>
|
||||
|
@ -250,23 +235,9 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
return;
|
||||
}
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
progress_timer layer_timer(std::clog, "rendering total for layer: '" + lay.name() + "'");
|
||||
#endif
|
||||
|
||||
projection proj1(lay.srs(),true);
|
||||
proj_transform prj_trans(proj0,proj1);
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
if (! prj_trans.equal())
|
||||
{
|
||||
std::clog << "notice: reprojecting layer: '" << lay.name() << "' from/to:\n\t'"
|
||||
<< lay.srs() << "'\n\t'"
|
||||
<< m_.srs() << "'\n";
|
||||
}
|
||||
#endif
|
||||
|
||||
|
||||
box2d<double> query_ext = extent; // unbuffered
|
||||
box2d<double> buffered_query_ext(query_ext); // buffered
|
||||
|
||||
|
@ -285,7 +256,8 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
|
||||
// clip buffered extent by maximum extent, if supplied
|
||||
boost::optional<box2d<double> > const& maximum_extent = m_.maximum_extent();
|
||||
if (maximum_extent) {
|
||||
if (maximum_extent)
|
||||
{
|
||||
buffered_query_ext.clip(*maximum_extent);
|
||||
}
|
||||
|
||||
|
@ -344,9 +316,6 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(RENDERING_STATS)
|
||||
layer_timer.discard();
|
||||
#endif
|
||||
return;
|
||||
}
|
||||
|
||||
|
@ -384,8 +353,6 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
query q(layer_ext,res,scale_denom,extent);
|
||||
std::vector<feature_type_style const*> active_styles;
|
||||
attribute_collector collector(names);
|
||||
double filt_factor = 1.0;
|
||||
directive_collector d_collector(filt_factor);
|
||||
boost::ptr_vector<rule_cache> rule_caches;
|
||||
|
||||
// iterate through all named styles collecting active styles and attribute names
|
||||
|
@ -410,12 +377,8 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
{
|
||||
rc->add_rule(r);
|
||||
active_rules = true;
|
||||
if (ds->type() == datasource::Vector)
|
||||
{
|
||||
collector(r);
|
||||
}
|
||||
// TODO - in the future rasters should be able to be filtered.
|
||||
}
|
||||
}
|
||||
if (active_rules)
|
||||
{
|
||||
|
@ -442,46 +405,25 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
q.add_property_name(name);
|
||||
}
|
||||
}
|
||||
|
||||
// Update filter_factor for all enabled raster layers.
|
||||
BOOST_FOREACH (feature_type_style const* style, active_styles)
|
||||
{
|
||||
BOOST_FOREACH(rule const& r, style->get_rules())
|
||||
{
|
||||
if (r.active(scale_denom) &&
|
||||
ds->type() == datasource::Raster &&
|
||||
ds->params().get<double>("filter_factor",0.0) == 0.0)
|
||||
{
|
||||
BOOST_FOREACH (rule::symbolizers::value_type sym, r.get_symbolizers())
|
||||
{
|
||||
// if multiple raster symbolizers, last will be respected
|
||||
// should we warn or throw?
|
||||
boost::apply_visitor(d_collector,sym);
|
||||
}
|
||||
q.set_filter_factor(filt_factor);
|
||||
}
|
||||
}
|
||||
}
|
||||
q.set_filter_factor(collector.get_filter_factor());
|
||||
|
||||
// Also query the group by attribute
|
||||
std::string group_by = lay.group_by();
|
||||
if (group_by != "")
|
||||
std::string const& group_by = lay.group_by();
|
||||
if (!group_by.empty())
|
||||
{
|
||||
q.add_property_name(group_by);
|
||||
}
|
||||
|
||||
bool cache_features = lay.cache_features() && active_styles.size() > 1;
|
||||
|
||||
// Render incrementally when the column that we group by
|
||||
// changes value.
|
||||
if (group_by != "")
|
||||
// Render incrementally when the column that we group by changes value.
|
||||
if (!group_by.empty())
|
||||
{
|
||||
featureset_ptr features = ds->features(q);
|
||||
if (features) {
|
||||
// Cache all features into the memory_datasource before rendering.
|
||||
memory_datasource cache(ds->type(),false);
|
||||
if (features)
|
||||
{
|
||||
boost::shared_ptr<featureset_buffer> cache = boost::make_shared<featureset_buffer>();
|
||||
feature_ptr feature, prev;
|
||||
|
||||
while ((feature = features->next()))
|
||||
{
|
||||
if (prev && prev->get(group_by) != feature->get(group_by))
|
||||
|
@ -491,44 +433,46 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
int i = 0;
|
||||
BOOST_FOREACH (feature_type_style const* style, active_styles)
|
||||
{
|
||||
render_style(lay, p, style, rule_caches[i], style_names[i],
|
||||
cache.features(q), prj_trans);
|
||||
cache->prepare();
|
||||
render_style(p, style, rule_caches[i], cache, prj_trans);
|
||||
i++;
|
||||
}
|
||||
cache.clear();
|
||||
cache->clear();
|
||||
}
|
||||
cache.push(feature);
|
||||
cache->push(feature);
|
||||
prev = feature;
|
||||
}
|
||||
|
||||
int i = 0;
|
||||
BOOST_FOREACH (feature_type_style const* style, active_styles)
|
||||
{
|
||||
render_style(lay, p, style, rule_caches[i], style_names[i],
|
||||
cache.features(q), prj_trans);
|
||||
cache->prepare();
|
||||
render_style(p, style, rule_caches[i], cache, prj_trans);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
else if (cache_features)
|
||||
{
|
||||
memory_datasource cache(ds->type(),false);
|
||||
featureset_ptr features = ds->features(q);
|
||||
if (features) {
|
||||
boost::shared_ptr<featureset_buffer> cache = boost::make_shared<featureset_buffer>();
|
||||
if (features)
|
||||
{
|
||||
// Cache all features into the memory_datasource before rendering.
|
||||
feature_ptr feature;
|
||||
while ((feature = features->next()))
|
||||
{
|
||||
cache.push(feature);
|
||||
cache->push(feature);
|
||||
}
|
||||
}
|
||||
int i = 0;
|
||||
BOOST_FOREACH (feature_type_style const* style, active_styles)
|
||||
{
|
||||
render_style(lay, p, style, rule_caches[i], style_names[i],
|
||||
cache.features(q), prj_trans);
|
||||
cache->prepare();
|
||||
render_style(p, style, rule_caches[i], cache, prj_trans);
|
||||
i++;
|
||||
}
|
||||
cache->clear();
|
||||
}
|
||||
// We only have a single style and no grouping.
|
||||
else
|
||||
|
@ -536,28 +480,20 @@ void feature_style_processor<Processor>::apply_to_layer(layer const& lay, Proces
|
|||
int i = 0;
|
||||
BOOST_FOREACH (feature_type_style const* style, active_styles)
|
||||
{
|
||||
render_style(lay, p, style, rule_caches[i], style_names[i],
|
||||
ds->features(q), prj_trans);
|
||||
render_style(p, style, rule_caches[i], ds->features(q), prj_trans);
|
||||
i++;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
layer_timer.stop();
|
||||
#endif
|
||||
|
||||
p.end_layer_processing(lay);
|
||||
}
|
||||
|
||||
|
||||
template <typename Processor>
|
||||
void feature_style_processor<Processor>::render_style(
|
||||
layer const& lay,
|
||||
Processor & p,
|
||||
feature_type_style const* style,
|
||||
rule_cache const& rc,
|
||||
std::string const& style_name,
|
||||
featureset_ptr features,
|
||||
proj_transform const& prj_trans)
|
||||
{
|
||||
|
@ -567,49 +503,24 @@ void feature_style_processor<Processor>::render_style(
|
|||
p.end_style_processing(*style);
|
||||
return;
|
||||
}
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
std::ostringstream s1;
|
||||
s1 << "rendering style for layer: '" << lay.name()
|
||||
<< "' and style '" << style_name << "'";
|
||||
mapnik::progress_timer style_timer(std::clog, s1.str());
|
||||
|
||||
int feature_processed_count = 0;
|
||||
int feature_count = 0;
|
||||
#endif
|
||||
|
||||
feature_ptr feature;
|
||||
bool was_painted = false;
|
||||
while ((feature = features->next()))
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
feature_count++;
|
||||
bool feat_processed = false;
|
||||
#endif
|
||||
|
||||
bool do_else = true;
|
||||
bool do_also = false;
|
||||
|
||||
BOOST_FOREACH(rule const* r, rc.get_if_rules() )
|
||||
{
|
||||
expression_ptr const& expr=r->get_filter();
|
||||
value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(*feature),*expr);
|
||||
if (result.to_bool())
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
feat_processed = true;
|
||||
#endif
|
||||
|
||||
p.painted(true);
|
||||
|
||||
was_painted = true;
|
||||
do_else=false;
|
||||
do_also=true;
|
||||
rule::symbolizers const& symbols = r->get_symbolizers();
|
||||
|
||||
// if the underlying renderer is not able to process the complete set of symbolizers,
|
||||
// process one by one.
|
||||
if(!p.process(symbols,*feature,prj_trans))
|
||||
{
|
||||
|
||||
BOOST_FOREACH (symbolizer const& sym, symbols)
|
||||
{
|
||||
boost::apply_visitor(symbol_dispatch(p,*feature,prj_trans),sym);
|
||||
|
@ -627,15 +538,8 @@ void feature_style_processor<Processor>::render_style(
|
|||
{
|
||||
BOOST_FOREACH( rule const* r, rc.get_else_rules() )
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
feat_processed = true;
|
||||
#endif
|
||||
|
||||
p.painted(true);
|
||||
|
||||
was_painted = true;
|
||||
rule::symbolizers const& symbols = r->get_symbolizers();
|
||||
// if the underlying renderer is not able to process the complete set of symbolizers,
|
||||
// process one by one.
|
||||
if(!p.process(symbols,*feature,prj_trans))
|
||||
{
|
||||
BOOST_FOREACH (symbolizer const& sym, symbols)
|
||||
|
@ -649,15 +553,8 @@ void feature_style_processor<Processor>::render_style(
|
|||
{
|
||||
BOOST_FOREACH( rule const* r, rc.get_also_rules() )
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
feat_processed = true;
|
||||
#endif
|
||||
|
||||
p.painted(true);
|
||||
|
||||
was_painted = true;
|
||||
rule::symbolizers const& symbols = r->get_symbolizers();
|
||||
// if the underlying renderer is not able to process the complete set of symbolizers,
|
||||
// process one by one.
|
||||
if(!p.process(symbols,*feature,prj_trans))
|
||||
{
|
||||
BOOST_FOREACH (symbolizer const& sym, symbols)
|
||||
|
@ -667,32 +564,8 @@ void feature_style_processor<Processor>::render_style(
|
|||
}
|
||||
}
|
||||
}
|
||||
#if defined(RENDERING_STATS)
|
||||
if (feat_processed)
|
||||
feature_processed_count++;
|
||||
#endif
|
||||
}
|
||||
|
||||
#if defined(RENDERING_STATS)
|
||||
style_timer.stop();
|
||||
|
||||
// done with style
|
||||
std::ostringstream s;
|
||||
if (feature_count > 0)
|
||||
{
|
||||
double perc_processed = ((double)feature_processed_count/(double)feature_count)*100.0;
|
||||
|
||||
s << "percent rendered: " << perc_processed << "% - " << feature_processed_count
|
||||
<< " rendered for " << feature_count << " queried for ";
|
||||
s << std::setw(15 - (int)s.tellp()) << " layer '" << lay.name() << "' and style '" << style_name << "'\n";
|
||||
}
|
||||
else
|
||||
{
|
||||
s << "" << std::setw(15) << "- no features returned from query for layer '" << lay.name() << "' and style '" << style_name << "'\n";
|
||||
}
|
||||
std::clog << s.str();
|
||||
style_timer.discard();
|
||||
#endif
|
||||
p.painted(was_painted);
|
||||
p.end_style_processing(*style);
|
||||
}
|
||||
|
||||
|
|
|
@ -167,7 +167,7 @@ public:
|
|||
/*!
|
||||
* @param column Set the field rendering of this layer is grouped by.
|
||||
*/
|
||||
void set_group_by(std::string column);
|
||||
void set_group_by(std::string const& column);
|
||||
|
||||
/*!
|
||||
* @return The field rendering of this layer is grouped by.
|
||||
|
|
77
include/mapnik/util/featureset_buffer.hpp
Normal file
|
@ -0,0 +1,77 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2013 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
* License as published by the Free Software Foundation; either
|
||||
* version 2.1 of the License, or (at your option) any later version.
|
||||
*
|
||||
* This library is distributed in the hope that it will be useful,
|
||||
* but WITHOUT ANY WARRANTY; without even the implied warranty of
|
||||
* MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the GNU
|
||||
* Lesser General Public License for more details.
|
||||
*
|
||||
* You should have received a copy of the GNU Lesser General Public
|
||||
* License along with this library; if not, write to the Free Software
|
||||
* Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#ifndef MAPNIK_FEATURESET_BUFFER_HPP
|
||||
#define MAPNIK_FEATURESET_BUFFER_HPP
|
||||
|
||||
// mapnik
|
||||
#include <mapnik/datasource.hpp>
|
||||
|
||||
#include <vector>
|
||||
|
||||
namespace mapnik {
|
||||
|
||||
class featureset_buffer : public Featureset
|
||||
{
|
||||
public:
|
||||
featureset_buffer()
|
||||
: features_(),
|
||||
pos_(),
|
||||
end_()
|
||||
{}
|
||||
|
||||
virtual ~featureset_buffer() {}
|
||||
|
||||
feature_ptr next()
|
||||
{
|
||||
if (pos_ != end_)
|
||||
{
|
||||
return *pos_++;
|
||||
}
|
||||
return feature_ptr();
|
||||
}
|
||||
|
||||
void push(feature_ptr const& feature)
|
||||
{
|
||||
features_.push_back(feature);
|
||||
}
|
||||
|
||||
void prepare()
|
||||
{
|
||||
pos_ = features_.begin();
|
||||
end_ = features_.end();
|
||||
}
|
||||
|
||||
void clear()
|
||||
{
|
||||
features_.clear();
|
||||
}
|
||||
|
||||
private:
|
||||
std::vector<feature_ptr> features_;
|
||||
std::vector<feature_ptr>::iterator pos_;
|
||||
std::vector<feature_ptr>::iterator end_;
|
||||
};
|
||||
|
||||
}
|
||||
|
||||
#endif // MAPNIK_FEATURESET_BUFFER_HPP
|
|
@ -77,7 +77,6 @@ inline GDALDataset* gdal_datasource::open_dataset() const
|
|||
gdal_datasource::gdal_datasource(parameters const& params)
|
||||
: datasource(params),
|
||||
desc_(*params.get<std::string>("type"), "utf-8"),
|
||||
filter_factor_(*params.get<double>("filter_factor", 0.0)),
|
||||
nodata_value_(params.get<double>("nodata"))
|
||||
{
|
||||
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource: Initializing...";
|
||||
|
@ -228,7 +227,6 @@ featureset_ptr gdal_datasource::features(query const& q) const
|
|||
nbands_,
|
||||
dx_,
|
||||
dy_,
|
||||
filter_factor_,
|
||||
nodata_value_));
|
||||
}
|
||||
|
||||
|
@ -250,6 +248,5 @@ featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol)
|
|||
nbands_,
|
||||
dx_,
|
||||
dy_,
|
||||
filter_factor_,
|
||||
nodata_value_));
|
||||
}
|
||||
|
|
|
@ -66,7 +66,6 @@ private:
|
|||
double dy_;
|
||||
int nbands_;
|
||||
bool shared_dataset_;
|
||||
double filter_factor_;
|
||||
boost::optional<double> nodata_value_;
|
||||
};
|
||||
|
||||
|
|
|
@ -61,7 +61,6 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
|
|||
int nbands,
|
||||
double dx,
|
||||
double dy,
|
||||
double filter_factor,
|
||||
boost::optional<double> const& nodata)
|
||||
: dataset_(dataset),
|
||||
ctx_(boost::make_shared<mapnik::context_type>()),
|
||||
|
@ -73,7 +72,6 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
|
|||
dx_(dx),
|
||||
dy_(dy),
|
||||
nbands_(nbands),
|
||||
filter_factor_(filter_factor),
|
||||
nodata_value_(nodata),
|
||||
first_(true)
|
||||
{
|
||||
|
@ -203,21 +201,9 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
|
|||
int im_width = int(width_res * intersect.width() + 0.5);
|
||||
int im_height = int(height_res * intersect.height() + 0.5);
|
||||
|
||||
// if layer-level filter_factor is set, apply it
|
||||
if (filter_factor_)
|
||||
{
|
||||
im_width = int(im_width * filter_factor_ + 0.5);
|
||||
im_height = int(im_height * filter_factor_ + 0.5);
|
||||
|
||||
MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Applying layer filter_factor=" << filter_factor_;
|
||||
}
|
||||
// otherwise respect symbolizer level factor applied to query, default of 1.0
|
||||
else
|
||||
{
|
||||
double sym_downsample_factor = q.get_filter_factor();
|
||||
im_width = int(im_width * sym_downsample_factor + 0.5);
|
||||
im_height = int(im_height * sym_downsample_factor + 0.5);
|
||||
}
|
||||
|
||||
// case where we need to avoid upsampling so that the
|
||||
// image can be later scaled within raster_symbolizer
|
||||
|
|
|
@ -49,7 +49,6 @@ public:
|
|||
int nbands,
|
||||
double dx,
|
||||
double dy,
|
||||
double filter_factor,
|
||||
boost::optional<double> const& nodata);
|
||||
virtual ~gdal_featureset();
|
||||
mapnik::feature_ptr next();
|
||||
|
@ -72,7 +71,6 @@ private:
|
|||
double dx_;
|
||||
double dy_;
|
||||
int nbands_;
|
||||
double filter_factor_;
|
||||
boost::optional<double> nodata_value_;
|
||||
bool first_;
|
||||
};
|
||||
|
|
53
src/build.py
|
@ -59,20 +59,26 @@ system = 'boost_system%s' % env['BOOST_APPEND']
|
|||
# clear out and re-set libs for this env
|
||||
lib_env['LIBS'] = ['freetype',env['ICU_LIB_NAME'],filesystem,system,regex]
|
||||
|
||||
if env['PROJ']:
|
||||
if '-DMAPNIK_USE_PROJ4' in env['CPPDEFINES']:
|
||||
lib_env['LIBS'].append('proj')
|
||||
|
||||
if env['PNG']:
|
||||
enabled_imaging_libraries = []
|
||||
|
||||
if '-DHAVE_PNG' in env['CPPDEFINES']:
|
||||
lib_env['LIBS'].append('png')
|
||||
enabled_imaging_libraries.append('png_reader.cpp')
|
||||
|
||||
if env['TIFF']:
|
||||
if '-DHAVE_TIFF' in env['CPPDEFINES']:
|
||||
lib_env['LIBS'].append('tiff')
|
||||
enabled_imaging_libraries.append('tiff_reader.cpp')
|
||||
|
||||
if env['WEBP']:
|
||||
if '-DHAVE_WEBP' in env['CPPDEFINES']:
|
||||
lib_env['LIBS'].append('webp')
|
||||
enabled_imaging_libraries.append('webp_reader.cpp')
|
||||
|
||||
if env['JPEG']:
|
||||
if '-DHAVE_JPEG' in env['CPPDEFINES']:
|
||||
lib_env['LIBS'].append('jpeg')
|
||||
enabled_imaging_libraries.append('jpeg_reader.cpp')
|
||||
|
||||
if len(env['EXTRA_FREETYPE_LIBS']):
|
||||
lib_env['LIBS'].extend(copy(env['EXTRA_FREETYPE_LIBS']))
|
||||
|
@ -139,6 +145,7 @@ source = Split(
|
|||
transform_expression_grammar.cpp
|
||||
transform_expression.cpp
|
||||
feature_kv_iterator.cpp
|
||||
feature_style_processor.cpp
|
||||
feature_type_style.cpp
|
||||
font_engine_freetype.cpp
|
||||
font_set.cpp
|
||||
|
@ -265,29 +272,9 @@ if env['HAS_SKIA']:
|
|||
source.insert(0,'skia/skia_typeface_cache.cpp')
|
||||
source.insert(0,'skia/skia_font_manager.cpp')
|
||||
|
||||
if env['JPEG']:
|
||||
source += Split(
|
||||
"""
|
||||
jpeg_reader.cpp
|
||||
""")
|
||||
|
||||
if env['TIFF']:
|
||||
source += Split(
|
||||
"""
|
||||
tiff_reader.cpp
|
||||
""")
|
||||
|
||||
if env['PNG']:
|
||||
source += Split(
|
||||
"""
|
||||
png_reader.cpp
|
||||
""")
|
||||
|
||||
if env['WEBP']:
|
||||
source += Split(
|
||||
"""
|
||||
webp_reader.cpp
|
||||
""")
|
||||
for cpp in enabled_imaging_libraries:
|
||||
source.append(cpp)
|
||||
|
||||
# agg backend
|
||||
source += Split(
|
||||
|
@ -393,18 +380,6 @@ else:
|
|||
"""
|
||||
)
|
||||
|
||||
processor_cpp = 'feature_style_processor.cpp'
|
||||
|
||||
if env['RENDERING_STATS']:
|
||||
env3 = lib_env.Clone()
|
||||
env3.Append(CPPDEFINES='-DRENDERING_STATS')
|
||||
if env['LINKING'] == 'static':
|
||||
source.insert(0,env3.StaticObject(processor_cpp))
|
||||
else:
|
||||
source.insert(0,env3.SharedObject(processor_cpp))
|
||||
else:
|
||||
source.insert(0,processor_cpp);
|
||||
|
||||
# clone the env one more time to isolate mapnik_lib_link_flag
|
||||
lib_env_final = lib_env.Clone()
|
||||
|
||||
|
|
|
@ -236,7 +236,7 @@ bool layer::cache_features() const
|
|||
return cache_features_;
|
||||
}
|
||||
|
||||
void layer::set_group_by(std::string column)
|
||||
void layer::set_group_by(std::string const& column)
|
||||
{
|
||||
group_by_ = column;
|
||||
}
|
||||
|
|
|
@ -0,0 +1,108 @@
|
|||
{
|
||||
"keys": [
|
||||
""
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
|
@ -0,0 +1,190 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"71",
|
||||
"24",
|
||||
"245",
|
||||
"207",
|
||||
"238",
|
||||
"82",
|
||||
"132",
|
||||
"205",
|
||||
"51",
|
||||
"65",
|
||||
"231",
|
||||
"186",
|
||||
"165",
|
||||
"114",
|
||||
"2",
|
||||
"120",
|
||||
"235",
|
||||
"116",
|
||||
"13",
|
||||
"113",
|
||||
"41",
|
||||
"234",
|
||||
"34",
|
||||
"78",
|
||||
"48",
|
||||
"15",
|
||||
"90",
|
||||
"173",
|
||||
"215",
|
||||
"1",
|
||||
"75",
|
||||
"224",
|
||||
"181",
|
||||
"79",
|
||||
"42",
|
||||
"158",
|
||||
"208",
|
||||
"38",
|
||||
"127",
|
||||
"70",
|
||||
"167",
|
||||
"212",
|
||||
"76",
|
||||
"39",
|
||||
"164",
|
||||
"183",
|
||||
"87",
|
||||
"69",
|
||||
"104",
|
||||
"77",
|
||||
"157",
|
||||
"59",
|
||||
"21",
|
||||
"49"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" !!!!! ",
|
||||
" !!!!!!!!!! ",
|
||||
" !!!!! !!!!!! ! ",
|
||||
" ### #### !!!!!!!!!!!!!! ",
|
||||
" ### ######### ! !!!!!!!!!!!!!!! ",
|
||||
" ############ !!!! !!!!!!!!!!!!! ",
|
||||
" ############## ! !!!!!!!!!!!!!!!!!! ",
|
||||
" ## ############### !! !! !!!!!!!!!!!!!!!!! ",
|
||||
" # ################# !!! ! !! !!!!!!!!!!! ",
|
||||
" ################### !!!!!!!!!!! !!!!!!!!! !!! !! ! ",
|
||||
" ################## !!!!!!!!!!!!!!!!!!!!!!!!! !!! !!! ",
|
||||
" ################# # !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! ",
|
||||
" ## ################# !!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!! ",
|
||||
" ## ######## ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### ####### ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" #### ## ######### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ###### ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ##### ## ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" # ################## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ###### ### ##### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ## ########### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ## ##### ####### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### #### # ###### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ## ###### ############# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" #### ## ############# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ",
|
||||
" # # ## ####### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ## # ## # ##### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ## ## # # ## ## #### ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### # # ####### !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" #### # ### ######## !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### # # # ### ############# !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### #### ## # ### ## # !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" # ### ### #### ## ### !!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ######## ##### ######### !!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ######## # ## ## ######### !!!!!!!!!!!!!!!!!!!!!!!!!!! ! ",
|
||||
" ### # ######## !!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ### !!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ###### # ##### !!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ###### ### ### #### ### #### !!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ####### ### ####### ## ###### !!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ######## # #### ######## ###### ## !!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" ############ ## #### # ### ####### !!!!!!!!!!!!!!!!!!!!!! ! ",
|
||||
" #### ####### ## ### ############ !!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" $ ### ########## # ## ############## ! !!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" %%% ########## ## ############# !!!!!!!!!!!!!!!!!!!!!! & ",
|
||||
" %%%%%%% # # ####### ### ############### !!!!!!!!!!!!!!!!!!!! !! ",
|
||||
" %%%%%%%%%%%% % # # # ############ ### ###### ######## !!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%## ###### ## ########## ###### ## ########## !!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%%### ############# ##### ### ### ### ### # ###### !!!!!!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%%%###################### ### # #### #### # ##### !!!!!!!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%%%################### # ### ############ ######### !!!!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%###################################### #### ## ###### !!!!!!!!!!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%########################################### ######### !!!!!!!!!!!!!! ",
|
||||
" % %%%%%%%%%%%%%%%########################################## ######### !!!!!!!!!!!!!! ' ",
|
||||
" %%%%%%%%%%%%%%%%%%%####################################### # ##### ## !!!!!!!!!! ! '' '''' ",
|
||||
" %%%%%%%%%%%%%%%%%%###################################### ## ######## ## !!!!!!!!! ''''''' ",
|
||||
" $ %%%%%%%%%%%%%%%%%%###################################### ### ######### !!!!!!!!! '''''' ",
|
||||
" %%%%%%%%%%%%%%###################################### #### ####### !!!!!!!!! ''''' ",
|
||||
" %% %%%%%%%%%%%%%%%#################################### # # # ###### !!!!!!!! '' ",
|
||||
" %%%%%%%%%%%%%%%%%################################### # ### # !!!!!!! ",
|
||||
" %%%%%%%%%%%%%%%%%%################################### # # #### ## !!!!! ( ",
|
||||
" %%%%%%%%%%%%%%%%%%################################## ##### !!!!! ( ",
|
||||
" %%%%%%%%%%%%%%%%%################################# ####### !!!! ",
|
||||
" %%%%%%%%%%%%%%% %%%%%############################### ###### # !! )",
|
||||
" %%%%%% %% %%%%############################ ###### # ",
|
||||
" % %%%% %%%############################# ######## ### ) ",
|
||||
" %%%% %%%############################# ########### ))) ",
|
||||
" % % %% %%############################## ########### ))) ",
|
||||
" %%% % %%%############################### ## ########### )))) ",
|
||||
" %% %%%################################ ############# ))) ",
|
||||
" %% % %%################################## ############### *) )))",
|
||||
" % #################################### ################ *** ))",
|
||||
" % # ##################################################### *** )))",
|
||||
" % % ################################## ################# *** )))",
|
||||
" % ################################## ################# * )))",
|
||||
" ################################################# ## )))",
|
||||
" ########################################### ## ### +",
|
||||
" ##%%%%%%%%%%%%%%%%%%%%%##################### #### + +",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%################ ##### +++",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%###########%## # , # +",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%#########%%###### +",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%#####%%%%%% ## +",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%####%%%%%% # # +",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%##%%%%%% ------",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ------",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% .-----",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% .-----",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% .-----",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% .-----",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - ",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ///0",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%%%%% ////0",
|
||||
" %%%%%%%%%%%%%%%%%%%%%%%%%%% //////",
|
||||
" 111%%%%%%%%%%%%%%%%%%%%%%% /////00",
|
||||
" 1 11111%%%%%%%%%%%%%%%%%% ////000",
|
||||
" 11111111%1%%%%% %% %% //00000",
|
||||
" 11 11111111%%% %% ---///000000",
|
||||
" 11 11111111% %% 222300000",
|
||||
" 11111111111 % 2233333000",
|
||||
" 1 1111111 4 22233335500",
|
||||
" 1 111111 666 22233335550",
|
||||
" % 1111111 666666 7 222333335555",
|
||||
" 1111111 111 6666 33333335555",
|
||||
" % 1 111111 111 8 9::: 33333335555",
|
||||
" 111111111; < : = > ? 33333335555",
|
||||
" 111111@; A BB333333555",
|
||||
" 1@@CCCC D BBBB35555555",
|
||||
" @CCEE BBBB555555FF",
|
||||
" EEEE GH I BBJB55555FFF",
|
||||
" EE GGKKK K LLLL55FFFF",
|
||||
" MMN GGK KKKKKKK OOLPPPPFQ",
|
||||
" NN NNGGGKKKKKKKKK OORPPPPPQ",
|
||||
" GGGGKKKKKKKKKS RRRPPPQQ",
|
||||
" GGGGGGGKKKKKSSSTTU RRPPPPQ",
|
||||
" GGGGGGGKKKKVVSTTTUU ",
|
||||
" GGGGGGGGKKKVVVSSTTUV ",
|
||||
" WGGGGGGVGKKVVVSVVVVVV "
|
||||
]
|
||||
}
|
|
@ -0,0 +1,152 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"49",
|
||||
"161",
|
||||
"38",
|
||||
"21",
|
||||
"95",
|
||||
"64",
|
||||
"17",
|
||||
"218",
|
||||
"196",
|
||||
"61",
|
||||
"33",
|
||||
"160",
|
||||
"8",
|
||||
"209",
|
||||
"62",
|
||||
"243"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ! !!!#$$$$%%%%%%%%%%%%%%% ",
|
||||
" !!!##$$$%%%%%%%%%%%%%%%%%% ",
|
||||
" !!######%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" & #########%%%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" & ######%%%%%%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" #####%%%%%%%%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" ####%%%%%%%%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" & ' #####%%%%%%%%%%%%%%%%%%%%%%%%% ",
|
||||
" & ######(((%%%%%%%%%%%%%%%%%%%% ",
|
||||
" ######(((%%%%%%%%%%%%%%%%%% ",
|
||||
" ) ######(((((%%%%%%%%%%%%%%%% ",
|
||||
" * ####((((((%%%%%%%%%%%%%%%% ",
|
||||
"+ ###((((((((%%%%%%%%%%%%%% ",
|
||||
" #((((((((%%%%%%%%%%%%% ",
|
||||
" * ,,((((---%%%%%%%%%%%%% ",
|
||||
" ,,((((---%%%%%%%%%%%%% ",
|
||||
" ,,((((-----%%%%%%%%%% ",
|
||||
" ,,,...-----%%%%%%%% ",
|
||||
" ,,......----%%%%% ",
|
||||
" ,,.......---%%%% ",
|
||||
" , ,,.......--.%%%% ",
|
||||
" ,.........%%%%%% ",
|
||||
" ,,.........%%%%% ",
|
||||
" ,,........//%%%% ",
|
||||
" ,,........///%% ",
|
||||
" ,,........///% ",
|
||||
" ,,......../// ",
|
||||
" ,.......... ",
|
||||
" ,,.......... ",
|
||||
" ,,.......... ",
|
||||
" ,,........ ",
|
||||
" ,....... ",
|
||||
" ,....... ",
|
||||
" ,..... ",
|
||||
" ,,...... ",
|
||||
" ,,..... ",
|
||||
" ,,,.... ",
|
||||
" ,,,.. ",
|
||||
" ,,..... ",
|
||||
" ,,..... ",
|
||||
" ,,,.... ",
|
||||
" ,.... ",
|
||||
" ,,.. ",
|
||||
" ,,... 00 ",
|
||||
" ,,,, ",
|
||||
" ,,,,, ",
|
||||
" ,,,. 1 ",
|
||||
" ,,,. ",
|
||||
" , ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
|
@ -0,0 +1,248 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"245",
|
||||
"238",
|
||||
"154",
|
||||
"60",
|
||||
"189",
|
||||
"142",
|
||||
"53",
|
||||
"101",
|
||||
"45",
|
||||
"103",
|
||||
"102",
|
||||
"72",
|
||||
"163",
|
||||
"98",
|
||||
"205",
|
||||
"153",
|
||||
"30",
|
||||
"207",
|
||||
"206",
|
||||
"110",
|
||||
"65",
|
||||
"129",
|
||||
"58",
|
||||
"136",
|
||||
"105",
|
||||
"191",
|
||||
"57",
|
||||
"81",
|
||||
"171",
|
||||
"86",
|
||||
"170",
|
||||
"182",
|
||||
"80",
|
||||
"236",
|
||||
"16",
|
||||
"210",
|
||||
"89",
|
||||
"140",
|
||||
"22",
|
||||
"68",
|
||||
"186",
|
||||
"4",
|
||||
"112",
|
||||
"200",
|
||||
"202",
|
||||
"93",
|
||||
"94",
|
||||
"74",
|
||||
"5",
|
||||
"3",
|
||||
"84",
|
||||
"194",
|
||||
"96",
|
||||
"31",
|
||||
"2",
|
||||
"199",
|
||||
"190",
|
||||
"88",
|
||||
"162",
|
||||
"44",
|
||||
"83",
|
||||
"107",
|
||||
"100",
|
||||
"139",
|
||||
"91",
|
||||
"175",
|
||||
"50",
|
||||
"97",
|
||||
"155",
|
||||
"32",
|
||||
"18",
|
||||
"168",
|
||||
"226",
|
||||
"118",
|
||||
"14",
|
||||
"244",
|
||||
"126",
|
||||
"214",
|
||||
"113",
|
||||
"36",
|
||||
"188",
|
||||
"193",
|
||||
"99",
|
||||
"131",
|
||||
"172",
|
||||
"220",
|
||||
"54",
|
||||
"208",
|
||||
"152",
|
||||
"56",
|
||||
"25",
|
||||
"73",
|
||||
"19",
|
||||
"35",
|
||||
"185",
|
||||
"197",
|
||||
"40",
|
||||
"26",
|
||||
"63",
|
||||
"230",
|
||||
"69",
|
||||
"119",
|
||||
"121",
|
||||
"223",
|
||||
"229",
|
||||
"28",
|
||||
"204",
|
||||
"92",
|
||||
"27",
|
||||
"52",
|
||||
"67",
|
||||
"95"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ! !! ",
|
||||
" ! ",
|
||||
" !!!! ",
|
||||
" ! !!! ! ! !! ",
|
||||
" !!! !! ! !!!! ",
|
||||
" !! !! !!! !!!! ",
|
||||
" # ## ! !!!! !!!! ",
|
||||
" ##### # # !! !! !!!! ",
|
||||
" # ####### ! !!!!!! ",
|
||||
" ########### ! ! !!!!! ",
|
||||
" ########## !!!!!! ",
|
||||
" ###### !!! !! ",
|
||||
" ######## ## !! !!! ",
|
||||
" ######## !!!! ",
|
||||
" ## ## # !!! ",
|
||||
" #### ## ",
|
||||
" #### ### ",
|
||||
" ### # !!!! ",
|
||||
" ## !! !!! ! ",
|
||||
" ## !! !!!!! ",
|
||||
" !!! !!!!!!!!!! ",
|
||||
" !!!!! !!!!!!!!!!!! ! ",
|
||||
" !!!! !!!!!!!!!!!!!!! !! !! ",
|
||||
" !!!! !!!!!!!!!!!!!!!!! !!!!!!! ",
|
||||
" !!!! !!!!!!!!!!!!!!!!!!! !!!!! !!!! ",
|
||||
" !!! !!!!!!!!!!!!!!!!!!! ! ",
|
||||
" !!! ! !!!!!!!!!!!!!!!!! ! ",
|
||||
" !!! ! !!!!!!!!!!!!!!!!!!! ! ",
|
||||
" !! ! !!!!!!!!!!!!!!!!!!!! !!! !!! !! !! ",
|
||||
" !!! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ",
|
||||
" !!! !!! ! ! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! ",
|
||||
" !! !!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!! ",
|
||||
" !!! !!! !!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!! ",
|
||||
" !!! !!!!!! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!! ",
|
||||
" $$ $ !!! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!! !!! !",
|
||||
" $$$$$$ ! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" $ $$$$$ ! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! ",
|
||||
" $$$$$$%%!!! !!! !!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!!!!!! ",
|
||||
" $$$$%$$$%%!!!!! ! !!!!! !!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!!",
|
||||
" $$$$&%%%%!!!!!!!! !! !! !!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&%%%%!!!!!!!! !! !!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $&&&&&%%%%!!!!!!!!! !! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&&%%%%!!!!!!!!! ! !!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&&&%%%%!!! !!! ! !!!!!!!!!!!!!!!!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&&&&%%%%!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $&&&&&& %%%!!!! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&&& %%%!!!! !! !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$&&&&&&& %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" $$$&&&&& %%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$$$&&&&& %%%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!",
|
||||
" $$$$$&&&& %%%%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ",
|
||||
" $$$$$&&&& %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !! !!!!!!! ",
|
||||
" $$$$$&&&& %%%%%!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! ! !!!!!!! ",
|
||||
" $$$$$&&&&&'%%%% !!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ! ",
|
||||
" $$$$$&&&&& ((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! !!! ",
|
||||
" $$$ &&&&& (((!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ",
|
||||
" &&&& )(!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ",
|
||||
" ** &&&&& )))))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!! ",
|
||||
" ** &&& )+)))!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!!! ",
|
||||
" ***&& ++++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! ",
|
||||
" --* .!!!++,,,!!!!!!!!!!!!!!!!!!!!!!!!!!///!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!!!! !! ",
|
||||
" ----.......++,,,,!!!!!!!!!!!!!!!!!!!!!!//////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!! !!! ",
|
||||
"0 11----.......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2!!!!!!!!!!!!!! !!! ",
|
||||
"00 111-----......,,,,,,!!!!!!!!!!!!!!!!!!!!!////////////!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!2222!!!!!!!!!!!! !! 3 ",
|
||||
"0 11------......4444,444!!!!!!!!!!!//!!!!!!/////////////!!!!!!!!!!!!!55!!!!!!!!!!!!!!2222!!!!!!!!!!!! ! 3",
|
||||
" 6677-----8......44444444!!!!!!!!!!///////!/////////////////!!!!!!!!!!555!!!!!!!!!!!!222222!!!!!!!!! !! ! ",
|
||||
"66669----8888...444444444444!!!!!!///////////////////////////!!!55555!5555555!!!!55!!222222!!!!!!!!! !! ! ",
|
||||
"666666----88::::4444444444444!!!!!////////////////////////////2555555555555555555552222222222!!!!!!! ! ",
|
||||
"666666;---<<=:==444>>4444444!!!!!!///////////////////////////22255555555555555555552522222222!!2!!!! ! ",
|
||||
"66666;;;?<<<====@@@@>444444 !!!!!!!////////////////////////2/22225555555555555555555552222222222!!! !! ! ",
|
||||
"66666;????AAB=C@@@@@>4 4 !!!!!!!! /////////////////////222222555555555555555555222222222222!!! ! ",
|
||||
"66666???? BBDBCC@@@@@@ 44!!!!!!!! ////EEE///////////////22222222555555555555555522222222222!!!!! F ! ",
|
||||
"666666 ??? BDDCCC@@@@ !!!!!! ////EEEE//////////////222222222255555555555522222222222222!!! FFF ",
|
||||
"666 ?? BGCCCHHH II!!! ///EEEEEEEE//////////22222222222555555555522222222222222!!! FFF ",
|
||||
"JJJ 6 ??? KCLHHM MM III!! NENNEEEEE//EOOOOOO222222222222222225522222222222222PPP F ",
|
||||
"J ? ???? KLQQQM MMMMMMMMMMMRSSS NNNNNNEEEEEEEEEOO22222222222222222222222222222222222PPP F ",
|
||||
" JJ ? ? ?QQQ QMMMMMMMMMMMMMRSTS NNNNNNNEEEEUUOO222222222222222222222222222222222 22PP F ",
|
||||
"JJ QQQQMMMMMMMMMMMMMTTT NNNNNNNEEEUUUU2222222222222222222222222222222 2 PPV F ",
|
||||
" ?? QQQQQMMMMMMMMMMMMTTTT NTTNNNNNNEUWUUU2222222222222222222222222222222 2 PVV V FF ",
|
||||
" XXXXXYY Q Q QM MMMMZZZ[[[TTTTTTTTTTTNNWWWWW]]]]2222222222222222222222222222222 VVV FFFF ",
|
||||
"XXXXXXYY QQQ ^ ZZZZ[[[TTTTTTTTTTTNWWWWWW]]]]]222222222222222222222222222222 VVV FFFFFF ",
|
||||
"XXXXXXYY ZZZ[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222 V FFFFF F ",
|
||||
"XXXXXXYYY` ` aZZ[[[[[TTTTTTTTTTTWWWWWW]]]____22222222222222222222222222222 FF ",
|
||||
"XXXXXXXY```` ``` bcddd[[[[[TTTTTTTTTWWWW]]]]]]__2222222222222222222222222222222 FF ",
|
||||
"XXXXXXXY``````````eeeeeeeccdddd[[[[TTTTTTTTTWWW]]]]]]_____22222222222222222222222222222 F ",
|
||||
"XXXXXXX```````````eeeeeeeddddddd[ff TTTTTTTT]]]]]]]]_____ggg2222222__222222222222222222 ",
|
||||
"XXXXXXX```````````eeeeeeedddddddddd TTTTTTTT]]]]]]]______gggg2_h2____22222222222222222 F ",
|
||||
"XXXXXXX```````````eeeeeee dddddddddd TTTTTTT]]]]]___________gg______i2222222222222222 F F ",
|
||||
"XXXXXXX```````````eeeeeee ddddddddddj kTTT]]]]]]]_________________ii2222222222222222 ",
|
||||
"XXXXXXXX``````````eeeeeeee dddddddddd kkl ]]]_____________m___ii22222222222222n n F ",
|
||||
"XXXXXXXXoo````````eeeeeeee dddddddddkkklll _______________m__iiii2222p22222222 n ",
|
||||
"qXXXXXooooorrr````sssssssss ddddddddddddlll ______________m iiiii22pppp2222 ",
|
||||
"qqXXXooooooorrrr``sssssssss dddddddddddll __________ iiiiituupp 2 v ",
|
||||
"qqqooooooooorrrrrssssssssss dddddddddllll _________ iiittuupp 22 w ",
|
||||
"qqqooooooooorrrrrsssssssssss dddddxxxlll ________ iiitttttp w ",
|
||||
"qqqoooooooorrrrrrssssssssssy xxdxxxx _______ iiitttttup ww ",
|
||||
"zoooooooooorrrrrssssssssssyyy xxxxxx ____ ttttttup w ",
|
||||
"zooo{ooooorrrrrrssssssssss||||yxxxx _____ _ ittt}}}p www ~ ",
|
||||
"zzo{{{{{{{{rrrrrssssssssss||||| xx ___ _ it t}}pp wwww ",
|
||||
"z\u007f\u007f{{{{{{{\u0080rrrrrsssssssss||||||\u0081 \u0081\u0081\u0081\u0081 ___ i }ppp wwwww ",
|
||||
"\u0082\u007f\u007f{{{{{{{rrrrr\u0083\u0083ssssssss||||||\u0081\u0081\u0081\u0081\u0081\u0081 ___\u0084 tt p w www \u0085 \u0086 ",
|
||||
"\u0087\u0082{{{{{{{\u0080\u0080rr\u0083\u0083\u0083\u0083sssssss|||||||||\u0081\u0081\u0081 _ \u0084 _ tt w www ",
|
||||
"\u0087\u0082{{{{{{{\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||||\u0081\u0081\u0081 \u0088 \u0084\u0084 tt \u0089w ww \u0085 ",
|
||||
" {{{\u0080\u0080\u0080\u0080\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083\u0083ssssss||||||\u0081\u0081\u0081 \u0088 \u008a \u0089\u0089\u0089 \u0089\u0089\u0089 w \u008b ",
|
||||
" \u0080\u0080\u0080\u0080\u0083\u0083\u0083\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008css\u008d\u008e\u008e||\u008e\u0081\u0081\u0081\u0081 \u0088 \u008a\u008a \u0089\u0089 \u008a \u0089\u008a\u008a \u008a ",
|
||||
" \u0080\u0080\u0080\u0080\u0080\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081\u0081 \u0088 \u008a \u008a\u008a\u0089\u0089\u0089 \u0089\u0089\u0089\u008a\u008a \u008a ",
|
||||
" \u0090\u0091\u0091\u0091\u008f\u008f\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008c\u008d\u008d\u008d\u008e\u008e\u008e\u008e\u0081\u0081\u0081 \u008a \u008a\u008a \u008a \u008a\u0089\u008a\u008a\u008a\u008a\u008a \u008a\u008a \u008a \u008a \u0092 "
|
||||
]
|
||||
}
|
|
@ -0,0 +1,170 @@
|
|||
{
|
||||
"keys": [
|
||||
"",
|
||||
"67",
|
||||
"27",
|
||||
"28",
|
||||
"204",
|
||||
"92",
|
||||
"185",
|
||||
"119",
|
||||
"223",
|
||||
"52",
|
||||
"203",
|
||||
"29",
|
||||
"166",
|
||||
"201",
|
||||
"6",
|
||||
"177",
|
||||
"221",
|
||||
"227",
|
||||
"20",
|
||||
"123",
|
||||
"9",
|
||||
"122",
|
||||
"141",
|
||||
"108",
|
||||
"151",
|
||||
"222",
|
||||
"61",
|
||||
"216",
|
||||
"180",
|
||||
"124",
|
||||
"178",
|
||||
"219",
|
||||
"179",
|
||||
"159",
|
||||
"146"
|
||||
],
|
||||
"data": {},
|
||||
"grid": [
|
||||
" !!!!##$$$$$$$$%%%%&&&&'' ( ))))) )))))) ) ) ))) ",
|
||||
" * !!!!#$$$$$$$$$%++++&&&& )))) ))))) )) ) )))))) ",
|
||||
" !!###$$$$$$$$$,+++++&& )))))) )))) ))) ))) )) ))))- -- ",
|
||||
" ##$$$$$$$$$$$+++++++& ))) ) ) ))))))--- - ",
|
||||
" $$$$$$$$$$$$+++++++ )) ) )) )))------- - . ",
|
||||
" ///$$/$$$$$$$+++++++ 0 ))))) ) ))---- ",
|
||||
" //////$$$$$11+++++ ))))))))22 ) )-- -- 3 3 ",
|
||||
" //////$$$$$1114++++ ) ) 5 --- 33 ",
|
||||
" ///////11$11114+++6 55 5 5 - ",
|
||||
" ////////111111146666 7 8 55555 55 ",
|
||||
" ///////1111111144666 88 5 555555 55 9 ",
|
||||
" ///////1111116664666 888 555555555 555 9 ",
|
||||
" ///////1111::::64666 8888 55555555555555555 ;;",
|
||||
" <<<<<<<<<::::::666 8888 555555555555555555 ;;",
|
||||
" <<<<<<====:::::66 888 55555555555555555555 9 ",
|
||||
" <<<<<=====::::6 8888 5555555555555555555555555 > ",
|
||||
" <<<<<======::666 8888 555555555555555555555555555 > ",
|
||||
" <<<<=====???666 888 555555555555555555555555555 ",
|
||||
" <<<<====????66 888 5555555555555555555555555555 ",
|
||||
" <<<<==?????@6 5555555555555555555555555555 ",
|
||||
" <<<<???????@? 55555555555555555555555555555 ",
|
||||
" <<<????????? 5555555555555555555555555555 ",
|
||||
" ???????AA?? 5555555555555555555555555555 ",
|
||||
" ????????? 555555555555555555555555555 ",
|
||||
" ???????? 5555555555 555555555555555 ",
|
||||
" ??????? 5555555 555555555555 ",
|
||||
" ?? 555 5 5555555555 B ",
|
||||
" 5555555555 BB ",
|
||||
" 5555555 BB ",
|
||||
" C 555555 BB ",
|
||||
" 5 5 BBB ",
|
||||
" 5 B ",
|
||||
" 555 BBB ",
|
||||
" 55 BB ",
|
||||
" 55 BB ",
|
||||
" BBB ",
|
||||
" BBB ",
|
||||
" BBB ",
|
||||
" B ",
|
||||
" ",
|
||||
" CC ",
|
||||
" ",
|
||||
" B ",
|
||||
" ",
|
||||
" B ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" ",
|
||||
" "
|
||||
]
|
||||
}
|
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 87 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 34 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 7.7 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 29 KiB |
After Width: | Height: | Size: 8.8 KiB |
After Width: | Height: | Size: 8.8 KiB |
17
tests/visual_tests/styles/gdal-filter-factor.xml
Normal file
|
@ -0,0 +1,17 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="white">
|
||||
|
||||
<Style name="test">
|
||||
<Rule>
|
||||
<RasterSymbolizer filter-factor="1"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
|
||||
<Layer name="test" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>test</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../data/Yosemite_L9.tif</Parameter>
|
||||
<Parameter name="type">gdal</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
</Map>
|
|
@ -0,0 +1,30 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
|
||||
<Style name="style" direct-image-filters="agg-stack-blur(5,5)">
|
||||
<Rule>
|
||||
<PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../data/shp/world_merc</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
<Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in">
|
||||
<Rule>
|
||||
<PolygonSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>mask</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="inline">
|
||||
wkt,name
|
||||
"Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
|
||||
</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -0,0 +1,30 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
|
||||
<Style name="style" direct-image-filters="agg-stack-blur(5,5)">
|
||||
<Rule>
|
||||
<PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../data/shp/world_merc</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
<Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in">
|
||||
<Rule>
|
||||
<PolygonSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>mask</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="inline">
|
||||
wkt,name
|
||||
"Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
|
||||
</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -0,0 +1,30 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
|
||||
<Style name="style" direct-image-filters="agg-stack-blur(5,5)">
|
||||
<Rule>
|
||||
<PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../data/shp/world_merc</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
<Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in">
|
||||
<Rule>
|
||||
<PolygonSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>mask</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="inline">
|
||||
wkt,name
|
||||
"Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
|
||||
</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -0,0 +1,30 @@
|
|||
<Map srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over" background-color="purple">
|
||||
<Style name="style" direct-image-filters="agg-stack-blur(5,5)">
|
||||
<Rule>
|
||||
<PolygonSymbolizer fill="yellow" fill-opacity=".6"/>
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="world" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>style</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="file">../../data/shp/world_merc</Parameter>
|
||||
<Parameter name="type">shape</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
|
||||
<Style name="mask" image-filters="agg-stack-blur(5,5)" opacity=".8" comp-op="dst-in">
|
||||
<Rule>
|
||||
<PolygonSymbolizer />
|
||||
</Rule>
|
||||
</Style>
|
||||
<Layer name="mask" srs="+proj=merc +a=6378137 +b=6378137 +lat_ts=0.0 +lon_0=0.0 +x_0=0.0 +y_0=0.0 +k=1.0 +units=m +nadgrids=@null +wktext +no_defs +over">
|
||||
<StyleName>mask</StyleName>
|
||||
<Datasource>
|
||||
<Parameter name="inline">
|
||||
wkt,name
|
||||
"Polygon((-10000000 -5000000, -10000000 10000000, -5000000 10000000, -5000000 -5000000, -10000000 -5000000))","bounds"
|
||||
</Parameter>
|
||||
<Parameter name="type">csv</Parameter>
|
||||
</Datasource>
|
||||
</Layer>
|
||||
</Map>
|
|
@ -77,6 +77,13 @@ sizes_many_in_small_range = [(490, 100), (495, 100), (497, 100), (498, 100),
|
|||
|
||||
default_text_box = mapnik.Box2d(-0.05, -0.01, 0.95, 0.01)
|
||||
|
||||
merc_z1_bboxes = {
|
||||
'0,0':mapnik.Box2d(-20037508.342,0,0,20037508.342), # upper left
|
||||
'1,0':mapnik.Box2d(0,0,20037508.342,20037508.342), # upper right
|
||||
'0,1':mapnik.Box2d(-20037508.342,-20037508.342,0,0), # lower left
|
||||
'1,1':mapnik.Box2d(0,-20037508.342,20037508.342,0) # lower right
|
||||
}
|
||||
|
||||
dirname = os.path.dirname(__file__)
|
||||
|
||||
files = {
|
||||
|
@ -132,6 +139,7 @@ files = {
|
|||
'tiff-opaque-edge-gdal2': {'sizes':[(600,400),(969,793)]},
|
||||
'tiff-opaque-edge-raster2': {'sizes':[(600,400),(969,793)]},
|
||||
'tiff-resampling': {'sizes':[(600,400)]},
|
||||
'gdal-filter-factor': {'sizes':[(600,400)]},
|
||||
# https://github.com/mapnik/mapnik/issues/1622
|
||||
'tiff-edge-alignment-gdal1': {'sizes':[(256,256),(255,257)],
|
||||
'bbox':mapnik.Box2d(-13267022.12540147,4618019.500877209,-13247454.246160466,4637587.380118214)
|
||||
|
@ -155,7 +163,11 @@ files = {
|
|||
},
|
||||
'road-casings-non-grouped-rendering': {'sizes':[(600,600)],
|
||||
'bbox':mapnik.Box2d(1477001.12245,6890242.37746,1480004.49012,6892244.62256)
|
||||
}
|
||||
},
|
||||
'style-level-compositing-tiled-0,0':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['0,0']},
|
||||
'style-level-compositing-tiled-1,0':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['1,0']},
|
||||
'style-level-compositing-tiled-0,1':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['0,1']},
|
||||
'style-level-compositing-tiled-1,1':{'sizes':[(512,512)],'bbox':merc_z1_bboxes['1,1']}
|
||||
}
|
||||
|
||||
class Reporting:
|
||||
|
|