commit
9117e7d9ff
24 changed files with 532 additions and 21 deletions
|
@ -90,7 +90,8 @@ struct vector_markers_dispatch : util::noncopyable
|
||||||
coord2d center = src_->bounding_box().center();
|
coord2d center = src_->bounding_box().center();
|
||||||
agg::trans_affine_translation recenter(-center.x, -center.y);
|
agg::trans_affine_translation recenter(-center.x, -center.y);
|
||||||
agg::trans_affine tr = recenter * marker_trans_;
|
agg::trans_affine tr = recenter * marker_trans_;
|
||||||
markers_placement_params params { src_->bounding_box(), tr, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
|
direction_enum direction = get<direction_enum, keys::direction>(sym_, feature_, vars_);
|
||||||
|
markers_placement_params params { src_->bounding_box(), tr, spacing * scale_factor_, max_error, allow_overlap, avoid_edges, direction };
|
||||||
markers_placement_finder<T, Detector> placement_finder(
|
markers_placement_finder<T, Detector> placement_finder(
|
||||||
placement_method, path, detector_, params);
|
placement_method, path, detector_, params);
|
||||||
double x, y, angle = .0;
|
double x, y, angle = .0;
|
||||||
|
@ -147,7 +148,8 @@ struct raster_markers_dispatch : util::noncopyable
|
||||||
value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
|
value_double spacing = get<value_double, keys::spacing>(sym_, feature_, vars_);
|
||||||
value_double max_error = get<value_double, keys::max_error>(sym_, feature_, vars_);
|
value_double max_error = get<value_double, keys::max_error>(sym_, feature_, vars_);
|
||||||
box2d<double> bbox(0,0, src_.width(),src_.height());
|
box2d<double> bbox(0,0, src_.width(),src_.height());
|
||||||
markers_placement_params params { bbox, marker_trans_, spacing * scale_factor_, max_error, allow_overlap, avoid_edges };
|
direction_enum direction = get<direction_enum, keys::direction>(sym_, feature_, vars_);
|
||||||
|
markers_placement_params params { bbox, marker_trans_, spacing * scale_factor_, max_error, allow_overlap, avoid_edges, direction };
|
||||||
markers_placement_finder<T, label_collision_detector4> placement_finder(
|
markers_placement_finder<T, label_collision_detector4> placement_finder(
|
||||||
placement_method, path, detector_, params);
|
placement_method, path, detector_, params);
|
||||||
double x, y, angle = .0;
|
double x, y, angle = .0;
|
||||||
|
|
|
@ -97,6 +97,10 @@ public:
|
||||||
x = pos.x;
|
x = pos.x;
|
||||||
y = pos.y;
|
y = pos.y;
|
||||||
angle = path_.current_segment_angle();
|
angle = path_.current_segment_angle();
|
||||||
|
if (!this->set_direction(angle))
|
||||||
|
{
|
||||||
|
continue;
|
||||||
|
}
|
||||||
box2d<double> box = this->perform_transform(angle, x, y);
|
box2d<double> box = this->perform_transform(angle, x, y);
|
||||||
if ((this->params_.avoid_edges && !this->detector_.extent().contains(box))
|
if ((this->params_.avoid_edges && !this->detector_.extent().contains(box))
|
||||||
|| (!this->params_.allow_overlap && !this->detector_.has_placement(box)))
|
|| (!this->params_.allow_overlap && !this->detector_.has_placement(box)))
|
||||||
|
|
|
@ -24,6 +24,7 @@
|
||||||
#define MAPNIK_MARKERS_PLACEMENTS_POINT_HPP
|
#define MAPNIK_MARKERS_PLACEMENTS_POINT_HPP
|
||||||
|
|
||||||
#include <mapnik/geom_util.hpp>
|
#include <mapnik/geom_util.hpp>
|
||||||
|
#include <mapnik/util/math.hpp>
|
||||||
|
|
||||||
#include "agg_basics.h"
|
#include "agg_basics.h"
|
||||||
#include "agg_trans_affine.h"
|
#include "agg_trans_affine.h"
|
||||||
|
@ -38,6 +39,7 @@ struct markers_placement_params
|
||||||
double max_error;
|
double max_error;
|
||||||
bool allow_overlap;
|
bool allow_overlap;
|
||||||
bool avoid_edges;
|
bool avoid_edges;
|
||||||
|
direction_enum direction;
|
||||||
};
|
};
|
||||||
|
|
||||||
template <typename Locator, typename Detector>
|
template <typename Locator, typename Detector>
|
||||||
|
@ -141,6 +143,36 @@ protected:
|
||||||
result.expand_to_include(xD, yD);
|
result.expand_to_include(xD, yD);
|
||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
bool set_direction(double & angle)
|
||||||
|
{
|
||||||
|
switch (params_.direction)
|
||||||
|
{
|
||||||
|
case DIRECTION_UP:
|
||||||
|
angle = .0;
|
||||||
|
return true;
|
||||||
|
case DIRECTION_DOWN:
|
||||||
|
angle = M_PI;
|
||||||
|
return true;
|
||||||
|
case DIRECTION_AUTO:
|
||||||
|
angle = (std::fabs(util::normalize_angle(angle)) > 0.5 * M_PI) ? (angle + M_PI) : angle;
|
||||||
|
return true;
|
||||||
|
case DIRECTION_AUTO_DOWN:
|
||||||
|
angle = (std::fabs(util::normalize_angle(angle)) < 0.5 * M_PI) ? (angle + M_PI) : angle;
|
||||||
|
return true;
|
||||||
|
case DIRECTION_LEFT:
|
||||||
|
angle += M_PI;
|
||||||
|
return true;
|
||||||
|
case DIRECTION_LEFT_ONLY:
|
||||||
|
angle += M_PI;
|
||||||
|
return std::fabs(util::normalize_angle(angle)) < 0.5 * M_PI;
|
||||||
|
case DIRECTION_RIGHT_ONLY:
|
||||||
|
return std::fabs(util::normalize_angle(angle)) < 0.5 * M_PI;
|
||||||
|
case DIRECTION_RIGHT:
|
||||||
|
default:
|
||||||
|
return true;
|
||||||
|
}
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|
|
@ -69,6 +69,10 @@ public:
|
||||||
if (agg::is_line_to(this->locator_.vertex(&x1, &y1)))
|
if (agg::is_line_to(this->locator_.vertex(&x1, &y1)))
|
||||||
{
|
{
|
||||||
angle = std::atan2(y1 - y0, x1 - x0);
|
angle = std::atan2(y1 - y0, x1 - x0);
|
||||||
|
if (!this->set_direction(angle))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
box2d<double> box = this->perform_transform(angle, x, y);
|
box2d<double> box = this->perform_transform(angle, x, y);
|
||||||
|
|
|
@ -74,6 +74,10 @@ public:
|
||||||
if (agg::is_line_to(command1))
|
if (agg::is_line_to(command1))
|
||||||
{
|
{
|
||||||
angle = std::atan2(y0 - y1, x0 - x1);
|
angle = std::atan2(y0 - y1, x0 - x1);
|
||||||
|
if (!this->set_direction(angle))
|
||||||
|
{
|
||||||
|
return false;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
box2d<double> box = this->perform_transform(angle, x, y);
|
box2d<double> box = this->perform_transform(angle, x, y);
|
||||||
|
|
|
@ -91,6 +91,7 @@ enum class property_types : std::uint8_t
|
||||||
target_justify_alignment,
|
target_justify_alignment,
|
||||||
target_vertical_alignment,
|
target_vertical_alignment,
|
||||||
target_upright,
|
target_upright,
|
||||||
|
target_direction,
|
||||||
target_font_feature_settings
|
target_font_feature_settings
|
||||||
};
|
};
|
||||||
|
|
||||||
|
@ -184,6 +185,7 @@ ENUM_FROM_STRING( horizontal_alignment_enum )
|
||||||
ENUM_FROM_STRING( justify_alignment_enum )
|
ENUM_FROM_STRING( justify_alignment_enum )
|
||||||
ENUM_FROM_STRING( text_transform_enum )
|
ENUM_FROM_STRING( text_transform_enum )
|
||||||
ENUM_FROM_STRING( text_upright_enum )
|
ENUM_FROM_STRING( text_upright_enum )
|
||||||
|
ENUM_FROM_STRING( direction_enum )
|
||||||
ENUM_FROM_STRING( gamma_method_enum )
|
ENUM_FROM_STRING( gamma_method_enum )
|
||||||
|
|
||||||
// enum
|
// enum
|
||||||
|
|
|
@ -329,6 +329,13 @@ struct symbolizer_default<marker_multi_policy_enum, keys::markers_multipolicy>
|
||||||
static marker_multi_policy_enum value() { return MARKER_EACH_MULTI; }
|
static marker_multi_policy_enum value() { return MARKER_EACH_MULTI; }
|
||||||
};
|
};
|
||||||
|
|
||||||
|
// direction
|
||||||
|
template <>
|
||||||
|
struct symbolizer_default<direction_enum, keys::direction>
|
||||||
|
{
|
||||||
|
static direction_enum value() { return DIRECTION_RIGHT; }
|
||||||
|
};
|
||||||
|
|
||||||
// placement
|
// placement
|
||||||
|
|
||||||
// colorizer
|
// colorizer
|
||||||
|
|
|
@ -189,6 +189,21 @@ enum text_upright_enum : std::uint8_t
|
||||||
|
|
||||||
DEFINE_ENUM(text_upright_e, text_upright_enum);
|
DEFINE_ENUM(text_upright_e, text_upright_enum);
|
||||||
|
|
||||||
|
enum direction_enum : std::uint8_t
|
||||||
|
{
|
||||||
|
DIRECTION_LEFT,
|
||||||
|
DIRECTION_RIGHT,
|
||||||
|
DIRECTION_LEFT_ONLY,
|
||||||
|
DIRECTION_RIGHT_ONLY,
|
||||||
|
DIRECTION_AUTO,
|
||||||
|
DIRECTION_AUTO_DOWN,
|
||||||
|
DIRECTION_UP,
|
||||||
|
DIRECTION_DOWN,
|
||||||
|
direction_enum_MAX
|
||||||
|
};
|
||||||
|
|
||||||
|
DEFINE_ENUM(direction_e, direction_enum);
|
||||||
|
|
||||||
enum gamma_method_enum : std::uint8_t
|
enum gamma_method_enum : std::uint8_t
|
||||||
{
|
{
|
||||||
GAMMA_POWER, //agg::gamma_power
|
GAMMA_POWER, //agg::gamma_power
|
||||||
|
|
|
@ -89,6 +89,7 @@ enum class keys : std::uint8_t
|
||||||
justify_alignment,
|
justify_alignment,
|
||||||
vertical_alignment,
|
vertical_alignment,
|
||||||
upright,
|
upright,
|
||||||
|
direction,
|
||||||
avoid_edges,
|
avoid_edges,
|
||||||
ff_settings,
|
ff_settings,
|
||||||
MAX_SYMBOLIZER_KEY
|
MAX_SYMBOLIZER_KEY
|
||||||
|
|
35
include/mapnik/util/math.hpp
Normal file
35
include/mapnik/util/math.hpp
Normal file
|
@ -0,0 +1,35 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 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_MATH_HPP
|
||||||
|
#define MAPNIK_MATH_HPP
|
||||||
|
|
||||||
|
#include <mapnik/config.hpp>
|
||||||
|
|
||||||
|
namespace mapnik { namespace util {
|
||||||
|
|
||||||
|
MAPNIK_DECL double normalize_angle(double angle);
|
||||||
|
|
||||||
|
}}
|
||||||
|
|
||||||
|
#endif
|
||||||
|
|
|
@ -243,6 +243,7 @@ source = Split(
|
||||||
renderer_common.cpp
|
renderer_common.cpp
|
||||||
renderer_common/render_pattern.cpp
|
renderer_common/render_pattern.cpp
|
||||||
renderer_common/process_group_symbolizer.cpp
|
renderer_common/process_group_symbolizer.cpp
|
||||||
|
math.cpp
|
||||||
"""
|
"""
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
|
@ -995,6 +995,7 @@ void map_parser::parse_markers_symbolizer(rule & rule, xml_node const& node)
|
||||||
set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
|
set_symbolizer_property<symbolizer_base,transform_type>(sym, keys::image_transform, node);
|
||||||
set_symbolizer_property<symbolizer_base,marker_placement_enum>(sym, keys::markers_placement_type, node);
|
set_symbolizer_property<symbolizer_base,marker_placement_enum>(sym, keys::markers_placement_type, node);
|
||||||
set_symbolizer_property<symbolizer_base,marker_multi_policy_enum>(sym, keys::markers_multipolicy, node);
|
set_symbolizer_property<symbolizer_base,marker_multi_policy_enum>(sym, keys::markers_multipolicy, node);
|
||||||
|
set_symbolizer_property<symbolizer_base,direction_enum>(sym, keys::direction, node);
|
||||||
parse_stroke(sym,node);
|
parse_stroke(sym,node);
|
||||||
rule.append(std::move(sym));
|
rule.append(std::move(sym));
|
||||||
}
|
}
|
||||||
|
|
48
src/math.cpp
Normal file
48
src/math.cpp
Normal file
|
@ -0,0 +1,48 @@
|
||||||
|
/*****************************************************************************
|
||||||
|
*
|
||||||
|
* This file is part of Mapnik (c++ mapping toolkit)
|
||||||
|
*
|
||||||
|
* Copyright (C) 2015 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
|
||||||
|
*
|
||||||
|
*****************************************************************************/
|
||||||
|
|
||||||
|
// mapnik
|
||||||
|
#include <mapnik/util/math.hpp>
|
||||||
|
|
||||||
|
// stl
|
||||||
|
#include <cmath>
|
||||||
|
|
||||||
|
namespace mapnik {
|
||||||
|
|
||||||
|
namespace util {
|
||||||
|
|
||||||
|
double normalize_angle(double angle)
|
||||||
|
{
|
||||||
|
while (angle >= M_PI)
|
||||||
|
{
|
||||||
|
angle -= 2.0 * M_PI;
|
||||||
|
}
|
||||||
|
while (angle < -M_PI)
|
||||||
|
{
|
||||||
|
angle += 2.0 * M_PI;
|
||||||
|
}
|
||||||
|
return angle;
|
||||||
|
}
|
||||||
|
|
||||||
|
} // end namespace util
|
||||||
|
|
||||||
|
} // end namespace mapnik
|
|
@ -177,6 +177,19 @@ static const char * text_upright_strings[] = {
|
||||||
};
|
};
|
||||||
IMPLEMENT_ENUM(text_upright_e, text_upright_strings)
|
IMPLEMENT_ENUM(text_upright_e, text_upright_strings)
|
||||||
|
|
||||||
|
static const char * direction_strings[] = {
|
||||||
|
"left",
|
||||||
|
"right",
|
||||||
|
"left-only",
|
||||||
|
"right-only",
|
||||||
|
"auto",
|
||||||
|
"auto-down",
|
||||||
|
"up",
|
||||||
|
"down",
|
||||||
|
""
|
||||||
|
};
|
||||||
|
IMPLEMENT_ENUM(direction_e, direction_strings)
|
||||||
|
|
||||||
static const char * gamma_method_strings[] = {
|
static const char * gamma_method_strings[] = {
|
||||||
"power", //agg::gamma_power
|
"power", //agg::gamma_power
|
||||||
"linear", //agg::gamma_linear
|
"linear", //agg::gamma_linear
|
||||||
|
|
|
@ -153,6 +153,9 @@ static const property_meta_type key_meta[const_max_key] =
|
||||||
property_meta_type{ "upright", [](enumeration_wrapper e)
|
property_meta_type{ "upright", [](enumeration_wrapper e)
|
||||||
{return enumeration<text_upright_enum,text_upright_enum_MAX>(text_upright_enum(e.value)).as_string();},
|
{return enumeration<text_upright_enum,text_upright_enum_MAX>(text_upright_enum(e.value)).as_string();},
|
||||||
property_types::target_upright},
|
property_types::target_upright},
|
||||||
|
property_meta_type{ "direction", [](enumeration_wrapper e)
|
||||||
|
{return enumeration<direction_enum,direction_enum_MAX>(direction_enum(e.value)).as_string();},
|
||||||
|
property_types::target_direction},
|
||||||
property_meta_type{ "avoid-edges",nullptr, property_types::target_bool },
|
property_meta_type{ "avoid-edges",nullptr, property_types::target_bool },
|
||||||
property_meta_type{ "font-feature-settings", nullptr, property_types::target_font_feature_settings },
|
property_meta_type{ "font-feature-settings", nullptr, property_types::target_font_feature_settings },
|
||||||
|
|
||||||
|
|
|
@ -30,6 +30,7 @@
|
||||||
#include <mapnik/text/text_properties.hpp>
|
#include <mapnik/text/text_properties.hpp>
|
||||||
#include <mapnik/text/glyph_positions.hpp>
|
#include <mapnik/text/glyph_positions.hpp>
|
||||||
#include <mapnik/vertex_cache.hpp>
|
#include <mapnik/vertex_cache.hpp>
|
||||||
|
#include <mapnik/util/math.hpp>
|
||||||
|
|
||||||
// agg
|
// agg
|
||||||
#include "agg_conv_clip_polyline.h"
|
#include "agg_conv_clip_polyline.h"
|
||||||
|
@ -95,11 +96,11 @@ text_upright_e placement_finder::simplify_upright(text_upright_e upright, double
|
||||||
{
|
{
|
||||||
if (upright == UPRIGHT_AUTO)
|
if (upright == UPRIGHT_AUTO)
|
||||||
{
|
{
|
||||||
return (std::fabs(normalize_angle(angle)) > 0.5*M_PI) ? UPRIGHT_LEFT : UPRIGHT_RIGHT;
|
return (std::fabs(util::normalize_angle(angle)) > 0.5*M_PI) ? UPRIGHT_LEFT : UPRIGHT_RIGHT;
|
||||||
}
|
}
|
||||||
if (upright == UPRIGHT_AUTO_DOWN)
|
if (upright == UPRIGHT_AUTO_DOWN)
|
||||||
{
|
{
|
||||||
return (std::fabs(normalize_angle(angle)) < 0.5*M_PI) ? UPRIGHT_LEFT : UPRIGHT_RIGHT;
|
return (std::fabs(util::normalize_angle(angle)) < 0.5*M_PI) ? UPRIGHT_LEFT : UPRIGHT_RIGHT;
|
||||||
}
|
}
|
||||||
if (upright == UPRIGHT_LEFT_ONLY)
|
if (upright == UPRIGHT_LEFT_ONLY)
|
||||||
{
|
{
|
||||||
|
@ -260,10 +261,12 @@ bool placement_finder::single_line_placement(vertex_cache &pp, text_upright_e or
|
||||||
}
|
}
|
||||||
current_cluster = glyph.char_index;
|
current_cluster = glyph.char_index;
|
||||||
// Only calculate new angle at the start of each cluster!
|
// Only calculate new angle at the start of each cluster!
|
||||||
angle = normalize_angle(off_pp.angle(sign * layout.cluster_width(current_cluster)));
|
// Y axis is inverted.
|
||||||
|
// See note about coordinate systems in placement_finder::find_point_placement().
|
||||||
|
angle = -util::normalize_angle(off_pp.angle(sign * layout.cluster_width(current_cluster)));
|
||||||
rot.init(angle);
|
rot.init(angle);
|
||||||
if ((text_props_->max_char_angle_delta > 0) && (last_cluster_angle != 999) &&
|
if ((text_props_->max_char_angle_delta > 0) && (last_cluster_angle != 999) &&
|
||||||
std::fabs(normalize_angle(angle-last_cluster_angle)) > text_props_->max_char_angle_delta)
|
std::fabs(util::normalize_angle(angle - last_cluster_angle)) > text_props_->max_char_angle_delta)
|
||||||
{
|
{
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
@ -328,21 +331,6 @@ void placement_finder::path_move_dx(vertex_cache & pp, double dx)
|
||||||
if (!pp.move(dx)) pp.restore_state(state);
|
if (!pp.move(dx)) pp.restore_state(state);
|
||||||
}
|
}
|
||||||
|
|
||||||
double placement_finder::normalize_angle(double angle)
|
|
||||||
{
|
|
||||||
while (angle >= M_PI)
|
|
||||||
{
|
|
||||||
angle -= 2.0 * M_PI;
|
|
||||||
}
|
|
||||||
while (angle < -M_PI)
|
|
||||||
{
|
|
||||||
angle += 2.0 * M_PI;
|
|
||||||
}
|
|
||||||
// y axis is inverted.
|
|
||||||
// See note about coordinate systems in placement_finder::find_point_placement().
|
|
||||||
return -angle;
|
|
||||||
}
|
|
||||||
|
|
||||||
double placement_finder::get_spacing(double path_length, double layout_width) const
|
double placement_finder::get_spacing(double path_length, double layout_width) const
|
||||||
{
|
{
|
||||||
int num_labels = 1;
|
int num_labels = 1;
|
||||||
|
|
|
@ -427,6 +427,7 @@ compile_get_opt_attr(vertical_alignment_e);
|
||||||
compile_get_opt_attr(horizontal_alignment_e);
|
compile_get_opt_attr(horizontal_alignment_e);
|
||||||
compile_get_opt_attr(justify_alignment_e);
|
compile_get_opt_attr(justify_alignment_e);
|
||||||
compile_get_opt_attr(text_upright_e);
|
compile_get_opt_attr(text_upright_e);
|
||||||
|
compile_get_opt_attr(direction_e);
|
||||||
compile_get_opt_attr(halo_rasterizer_e);
|
compile_get_opt_attr(halo_rasterizer_e);
|
||||||
compile_get_opt_attr(expression_ptr);
|
compile_get_opt_attr(expression_ptr);
|
||||||
compile_get_opt_attr(font_feature_settings);
|
compile_get_opt_attr(font_feature_settings);
|
||||||
|
|
|
@ -0,0 +1,131 @@
|
||||||
|
{
|
||||||
|
"keys": [
|
||||||
|
"",
|
||||||
|
"4",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9",
|
||||||
|
"10",
|
||||||
|
"11",
|
||||||
|
"12",
|
||||||
|
"13",
|
||||||
|
"14",
|
||||||
|
"15",
|
||||||
|
"16",
|
||||||
|
"17",
|
||||||
|
"18",
|
||||||
|
"19",
|
||||||
|
"20",
|
||||||
|
"21",
|
||||||
|
"22",
|
||||||
|
"23",
|
||||||
|
"24",
|
||||||
|
"25",
|
||||||
|
"26",
|
||||||
|
"27"
|
||||||
|
],
|
||||||
|
"data": {},
|
||||||
|
"grid": [
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" !!! ",
|
||||||
|
" # $ % !!! & ' ( ) * ",
|
||||||
|
" # # # # $ $$$ % % !!! & &&& ' ' ' ' ( (( ((( )))) ))) * *** ",
|
||||||
|
" #### #### $$$ $$$$ % % ! !!! &&& &&&& '''' '''' ((( ((( )) )) *** **** ",
|
||||||
|
" ##### ### $$$ $$$$ % % ! ! &&& &&&& ''''' ''' (((( ((( ))) ))))) *** **** ",
|
||||||
|
" ### #### $$$$ $$ $ % % ! ! !!! &&&& && & ''' '''' (( ((( ))) )))) **** ** * ",
|
||||||
|
" # # # $ $ $ % % !!!! !!!! & & & ' ' ' (((( ( )))) ) * * * ",
|
||||||
|
" # # # $ $ $ % % !!!! !!!! & & & ' ' ' ( ((( ) ))) * * * ",
|
||||||
|
" #### #### $$$ $$$ % % !!!! ! ! &&& &&& '''' '''' ((( ((( ))) )) *** *** ",
|
||||||
|
" #### #### $$$ $$$ % % ! ! &&& &&& '''' '''' ((((( (( )) )) ) *** *** ",
|
||||||
|
" #### #### $$$$ $$ $ % % ! ! ! &&&& && & '''' '''' (( ((( ))) ))) **** ** * ",
|
||||||
|
" # # # # # $ $$ $ $ $ % % % !!!! ! ! & && & & ' ' ' ' ' (((( (( ( )))) ) ) * ** * * * * ",
|
||||||
|
" # ### # $ $$$$ $ % %%% % %% % % !!!! !!!! !!!! ! & &&& & ' ''' ''' '' ' ' ( (( ( ) )))) ) * ** ** * ",
|
||||||
|
" #### ### $ $ $ $ $ %%%% %%% !!! ! ! &&&& &&& ' ' ' ' ' ' (((( ( ((( )))) ) ))) * * * * *** * * * ",
|
||||||
|
" #### ### $$$$ $$$$ %%%% %%% !! ! &&&& &&& '''' '''' ((( ((( ))) )) **** **** ",
|
||||||
|
" #### #### $$$$ $$$$ %%%% %%%% ! ! &&&& &&&& '''' '''' (( (( ))))) )))) **** **** ",
|
||||||
|
" # # ## # $$$ $$$$ % % %% % ! ! & & && & ''' '''' ((( (((( ))) )))) *** **** ",
|
||||||
|
" # # $ $ % % ! ! & & ' ' ( ( ) ) * * ",
|
||||||
|
" ## # # # $ $ $ $ %% % % % ! ! && & & & ' ' ' ' (((( ((( )))) ))) * * * * ",
|
||||||
|
" #### ### $ $$ $$$$ %%%% %%% ! ! &&&& &&& ' '' '''' ((( ((( ))) )) * ** **** ",
|
||||||
|
" #### ### $$$ $$$ %%%% %%% ! ! &&&& &&& ''' ''' ((( ((( )))) ))))) *** *** ",
|
||||||
|
" #### #### $$$ $$$$ %%%% %%%% ! ! &&&& &&&& ''' '''' (( ((( ))) )))) *** **** ",
|
||||||
|
" # ## # $ $$ $ % %% % !! & && & ' '' ' (((( (( ))) * ** * ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" + , - . / 0 1 2 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + ++ + , ,, - -- - . . / // / 0 00 1 111 2 222 3 33 ",
|
||||||
|
" + + +++ , , ,, , - - --- . . . / /// 0 0 00 0 1 1111 2 22 3 3 3 33 3 ",
|
||||||
|
" + +++ +++ , ,,,, ,,, - --- - -- - --- . .... .... . / /// /// 0 000 000 00 0 000 1 11 111 2 2222 22222 3 33 33 333 ",
|
||||||
|
" + ++++ , , ,,,, - ---- . . . / //// 0 0 0 0000 1 1 111 2 2 2222 3 3 3 333 3 3333 ",
|
||||||
|
" + + + , , , - - - . . / / / 0 0 0 1 1 11 2 2 3 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" ++ ,, -- .. // 00 11 22 33 ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" 4 5 6 7 8 9 : ; < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 4 5 5 5 6 6 7 7 7 8 8 8 9 9 9 : ::: ; ;;; < < < ",
|
||||||
|
" 4 4 4444 5 5 555 6 6 6 7 7 777 8 888 9 9 9999 : :::: ; ;; < < < <<< ",
|
||||||
|
" 4 444 444 5 5555 5555 6 666 6 66 6 6 7 7777 7777 7777 8 888 8888 9 999 999 99 9 999 : :: ::: ; ;;;; ;;;;; < << << <<<< ",
|
||||||
|
" 4 444 5 5 55 5 6 6 7 7 77 7 8 88 8 9 9 9 999 : : ::: ; ; ;;;; < < < <<< < << < ",
|
||||||
|
" 4 4 4 5 5 5 6 6 7 7 7 8 8 8 9 9 9 : : :: ; ; < < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 44 55 66 77 88 99 :: ;; << ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
]
|
||||||
|
}
|
|
@ -0,0 +1,131 @@
|
||||||
|
{
|
||||||
|
"keys": [
|
||||||
|
"",
|
||||||
|
"4",
|
||||||
|
"1",
|
||||||
|
"2",
|
||||||
|
"3",
|
||||||
|
"5",
|
||||||
|
"6",
|
||||||
|
"7",
|
||||||
|
"8",
|
||||||
|
"9",
|
||||||
|
"10",
|
||||||
|
"11",
|
||||||
|
"12",
|
||||||
|
"13",
|
||||||
|
"14",
|
||||||
|
"15",
|
||||||
|
"16",
|
||||||
|
"17",
|
||||||
|
"18",
|
||||||
|
"19",
|
||||||
|
"20",
|
||||||
|
"21",
|
||||||
|
"22",
|
||||||
|
"23",
|
||||||
|
"24",
|
||||||
|
"25",
|
||||||
|
"26",
|
||||||
|
"27"
|
||||||
|
],
|
||||||
|
"data": {},
|
||||||
|
"grid": [
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" !!! ! ",
|
||||||
|
" !!!!! ",
|
||||||
|
" !!!!!! ",
|
||||||
|
" # $ % !!!!! & ' ( ) * ",
|
||||||
|
" # # # $ $ $ % % !!!!!!!! & & & ' ' ' ( ( ) ) ) * * * ",
|
||||||
|
" ### # # ## $$ $$ $ $$$ % % !! !!!! && && & &&& ''' ' ' '' ((((( ( (((((( ))))) ) )))))) ** ** * *** ",
|
||||||
|
" ### #### ## ### $$$$$$ $$$$$$ % % !!!! !!! &&&&&& &&&&&& ''' '''' '' ''' (((((( ((((( )))))) )))) ****** ****** ",
|
||||||
|
" #### ## ####### $$$$$$ $$$$$$$ % % ! !!! ! &&&&&& &&&&&&& '''' '' ''''''' (((((( ((((( ))) )))) ****** ******* ",
|
||||||
|
" ######## ###### # $$$$$$ $$$$$$ % % ! ! &&&&&& &&&&&& '''''''' '''''' ' (((((((((( ( ((((( ( )) ) ))) ) ****** ****** ",
|
||||||
|
" ##### ####### $$$$$$ $ $$$$$$$$ % % ! ! &&&&&& & &&&&&&&& ''''' ''''''' (((( ( ((( )))))))))) ))))))))) ****** * ******** ",
|
||||||
|
" ####### ####### $$ $$$$ $$$$$ $ % % !! !! ! && &&&& &&&&& & ''''''' ''''''' (((( ((((( )))))) ))))) ** **** ***** * ",
|
||||||
|
" ###### ###### $$$$$$$$ $$$ $ % % !!!!!! ! &&&&&&&& &&& & '''''' '''''' ( (( (((((( )))))) )))))) ******** *** * ",
|
||||||
|
" ## ### # ## ## $ $$$ $$$ $ % % % % % !!!!!! ! ! ! & &&& && & & '' ''' '' '' ' ((((((( ((((( ( )))))) )))))) ) * *** ** * ",
|
||||||
|
" # # # # #### # $ $ $$$ $$ $$ $ % % % %%%% %% %% %%!%!!! !!! !! !! ! !! ! !!&! & && & &&&&&& ' ' '' ' ''' '' '' ' ' '' ''(( ( ((( ( ) )) ) ) ))) * * * * * * ",
|
||||||
|
" # ## # # # $ $ $$ $ $ $ % %% % % % %% %% !%!!!! ! !! ! ! ! ! !! ! && & && & & ' ' ' '' ' ' ' '' ''''' ' ( (( ( ( ) ) )) )))))) ) * * * ** ** ** * *",
|
||||||
|
" # # ## # # ## $ $$ $ $$$$ $$$ % % %% % % %% %% %% %!!!!!!! ! !! ! !! ! ! ! & && &&&& &&& ' '' ' '''' ''' ' '' ' ''' ' ( (( ( (( ) )) ) ))))))))) ) * ** * * ******* * *",
|
||||||
|
" ## ### #### ## $ $$$ $$$ $$ %% %%% %%%% %% % !!!!!! ! !! !&& &&& &&&& && ' ''' '' '' ' ' ( ((((( ((((((( ))))))) ))))))) * *** * ********** ***",
|
||||||
|
" ###### ####### $ $$$ $$$$$$$ %%%%%% %%%%%%% !!! !! &&&&&& &&&&&&& ' ''' ''''''' (((((( (((((( ) )) ))))) * *** ******* ",
|
||||||
|
" ####### ####### $$$$$$$ $$$$$$$$ %%%%%%% %%%%%%% ! ! !! &&&&&&& &&&&&&& ''''''' '''''''' (((((( (((((( ))))) )))) ******* ******** ",
|
||||||
|
" # ##### ##### $$$$$$ $ $$$$$$ % %%%%% %%%%% ! !! & &&&&& &&&&& '''''' ' '''''' (((((((( ( ( ((((( ( )))) )))) ****** * ****** ",
|
||||||
|
" ######## ######## $$$$$$$ $$$$$$ %%%%%%%% %%%%%%%% ! !! &&&&&&&& &&&&&&&& ''''''' '''''' ( (( (((( )))))))))) ))))))))) ******* ****** ",
|
||||||
|
" #### ## ####### $$$$$$$ $$$$$$ %%%% %% %%%%%%% ! !! &&&& && &&&&&&& ''''''' '''''' (((( (((( )))))) )))))) ******* ****** ",
|
||||||
|
" ### ## ## ### $$$$$$ $$$$$$ %%% %% %% %%% ! !! &&& && && &&& '''''' '''''' ((((( (((((( )))))) )))))) ****** ****** ",
|
||||||
|
" ## # ## ## $$$ $ $$ $$ %% % %% %% ! !! && & && && ''' ' '' '' (((((( ((((((( )))))) ))))))) *** * ** ** ",
|
||||||
|
" ### $$$ %%% !!! &&& ''' ((( ))) *** ",
|
||||||
|
" # $ % ! & ' ( ) * ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" + , - . / 0 1 2 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + , , - - . . / / 0 0 1 1 2 2 3 3 ",
|
||||||
|
" + + ++ , , ,, - - -- . . / / // 0 0 00 1 111111 2 2 2222 3 3 33 ",
|
||||||
|
" + ++++ + , ,,, , , - ---- - . . / //// / 0 000 0 0 1 111111 2 222222 3 333 3 3 ",
|
||||||
|
" + + + +++++ , , ,,,,, , - - - ----- - . . . . / / ///// 0 00000 0 0 1 111111 2 2 222 3 33333 3 ",
|
||||||
|
" + + + +++++++++ , ,,, ,, ,,,,,,, - - - ----------- -- - . ... .. .. . .. . ../. // / //////// 0 00 0 00000000000 0 0 00 00 1 111 111111 2 22 2 2 222 2 3 3 3 3333333 ",
|
||||||
|
" + ++ + +++++++ , , ,, , ,,,,,,, - -- - -------- -- - . . .. . . . . .. . // / //////// 0 0 0 00 000000000 00000 0 1 11 1 1111 2 2 22 222222222 2 3 3 3 33 333333333",
|
||||||
|
" + ++ + +++++++ , , ,, , ,,,,,,,, - -- - --------- - . . .. . .. . . . // / // /////// 0 0 0 00 000000000 0 000 0 1 11 1 1111 2 2 22 2 2222222 3 3 3 333333333333",
|
||||||
|
" + +++++++ , , ,,,,,, - ------- - . . .. ./ /////// 0 0000000 0 1 1 1111 2 2 222222 3 3 33333333333333",
|
||||||
|
" + ++ +++ , ,, ,,, - -- --- . .. / // /// 0 00 000 1 1111111 2 2222222 3 33 333 ",
|
||||||
|
" + ++ ++ , ,, , - -- -- . .. / // // 0 00 0 1 11 1111 2 22 2 2 3 33 3 ",
|
||||||
|
" + ++ , ,, - -- . .. / // 0 00 1 11 2 22 3 33 ",
|
||||||
|
" + ++ , ,, - -- . .. / // 0 00 1 11 2 22 3 33 ",
|
||||||
|
" + ++ , ,, - -- . .. / // 0 00 1 11 2 22 3 33 ",
|
||||||
|
" + ++ , ,, - -- . .. / // 0 00 1 11 2 22 3 33 ",
|
||||||
|
" + ++ , ,, - -- . .. / // 0 00 1 11 2 22 3 33 ",
|
||||||
|
" +++ ,,, --- ... /// 000 111 222 333 ",
|
||||||
|
" + , - . / 0 1 2 3 ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" 4 5 6 7 8 9 : ; < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 5 5 6 6 7 7 8 8 9 9 : : ; ; < < ",
|
||||||
|
" 4 4 44 5 5 55 6 6 7 7 77 8 8 88 9 9 99 : :::::: ; ; ;;;; < < << ",
|
||||||
|
" 4 44 44 5 5 5555 6 6 7 7 7777 8 8 8888 9 99 99 : :::::: ; ;;;;;; < < <<<< ",
|
||||||
|
" 4 4 4 44 4444 5 5 5555555 6 6 6 6 6 7 7 7777777 7 8 8 8888888 9 99 99999 : :::::: ; ; ;;; < <<<<<<< ",
|
||||||
|
" 4 4 4 44444444444 5 555 55 55 55555 6 6 6 6666 66 66 66 6 7 777 77 77 777777 7 7787 88 8 8888888888 9 99 9 99999999999 9 9 99 99 : ::: :::::: ; ;; ; ; ;;; ; < < < < <<<<< ",
|
||||||
|
" 4 44 4 44444444 5 5 55 5 5555555 6 66 6 6 6 66 66 6 7 7 77 7 77777777 77 7 88 8 88 8888888 9 9 9 999999999 99 99999 9 : :: : :::: ; ; ;; ;;;;;;;;; ; < < < << <<<<<<<<<",
|
||||||
|
" 4 44 44444444 5 5 55 5 5555555 6 66 6 66 66 66 6 7 7 77 7 7777777 7 7 7 88 8 888888888 9 9 9 999999999 99 9 999 9 : :: : :::: ; ; ;; ; ;;;;;;; < < < <<<<<<<<<< <",
|
||||||
|
" 4 44444 5 5 5555 6 66 6 7 7 7777 78 8888 9 99999 9 9 : : :::: ; ; ;;;;;; < < <<<<<<<<<< <<<",
|
||||||
|
" 4 44444 4 5 5555 5 6 66 7 7777 7 8 8888 8 9 99999 9 : ::::::: ; ;;;;;;; < <<<< < ",
|
||||||
|
" 4 44 44 5 55 55 6 66 7 77 77 8 88 88 9 99 99 : :: :::: ; ;; ; ; < << << ",
|
||||||
|
" 4 44 5 55 6 66 7 77 8 88 9 99 : :: ; ;; < << ",
|
||||||
|
" 4 44 5 55 6 66 7 77 8 88 9 99 : :: ; ;; < << ",
|
||||||
|
" 4 44 5 55 6 66 7 77 8 88 9 99 : :: ; ;; < << ",
|
||||||
|
" 4 44 5 55 6 66 7 77 8 88 9 99 : :: ; ;; < << ",
|
||||||
|
" 4 44 5 55 6 66 7 77 8 88 9 99 : :: ; ;; < << ",
|
||||||
|
" 444 555 666 777 888 999 ::: ;;; <<< ",
|
||||||
|
" 4 5 6 7 8 9 : ; < ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" ",
|
||||||
|
" "
|
||||||
|
]
|
||||||
|
}
|
Binary file not shown.
After Width: | Height: | Size: 16 KiB |
Binary file not shown.
After Width: | Height: | Size: 19 KiB |
Binary file not shown.
After Width: | Height: | Size: 29 KiB |
Binary file not shown.
After Width: | Height: | Size: 28 KiB |
88
tests/visual_tests/styles/marker-direction.xml
Normal file
88
tests/visual_tests/styles/marker-direction.xml
Normal file
|
@ -0,0 +1,88 @@
|
||||||
|
<?xml version="1.0" encoding="utf-8"?>
|
||||||
|
<!DOCTYPE Map>
|
||||||
|
<Map background-color="white">
|
||||||
|
<Parameters>
|
||||||
|
<Parameter name="sizes">1152,384</Parameter>
|
||||||
|
</Parameters>
|
||||||
|
<Style name="line">
|
||||||
|
<Rule>
|
||||||
|
<LineSymbolizer />
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Style name="text">
|
||||||
|
<Rule>
|
||||||
|
<TextSymbolizer
|
||||||
|
geometry-transform="scale(0.0001)"
|
||||||
|
placement="point"
|
||||||
|
horizontal-alignment="right"
|
||||||
|
face-name="DejaVu Sans Book"
|
||||||
|
allow-overlap="true"
|
||||||
|
dx="20"
|
||||||
|
>
|
||||||
|
[direction]
|
||||||
|
</TextSymbolizer>
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Style name="markers">
|
||||||
|
<Rule>
|
||||||
|
<Filter>[id] % 9 = 8</Filter>
|
||||||
|
<MarkersSymbolizer
|
||||||
|
placement="[placement]"
|
||||||
|
spacing="30"
|
||||||
|
file="../../data/svg/octocat.svg"
|
||||||
|
transform="scale(.05)"
|
||||||
|
ignore-placement="true"
|
||||||
|
/>
|
||||||
|
</Rule>
|
||||||
|
<Rule>
|
||||||
|
<ElseFilter />
|
||||||
|
<MarkersSymbolizer
|
||||||
|
placement="[placement]"
|
||||||
|
spacing="30"
|
||||||
|
file="../../data/svg/octocat.svg"
|
||||||
|
transform="scale(.05)"
|
||||||
|
ignore-placement="true"
|
||||||
|
direction="[direction]"
|
||||||
|
/>
|
||||||
|
</Rule>
|
||||||
|
</Style>
|
||||||
|
<Layer name="carto_tests">
|
||||||
|
<StyleName>line</StyleName>
|
||||||
|
<StyleName>markers</StyleName>
|
||||||
|
<StyleName>text</StyleName>
|
||||||
|
<Datasource>
|
||||||
|
<Parameter name="type">csv</Parameter>
|
||||||
|
<Parameter name="extent">-1.5, -7.5, 25.5, 1.5</Parameter>
|
||||||
|
<Parameter name="inline">
|
||||||
|
id, wkt, placement, direction
|
||||||
|
0, "LINESTRING( 1 0, 0 -1, -1 0, 0 1, 1 0)", "line", "left"
|
||||||
|
1, "LINESTRING( 4 0, 3 -1, 2 0, 3 1, 4 0)", "line", "right"
|
||||||
|
2, "LINESTRING( 7 0, 6 -1, 5 0, 6 1, 7 0)", "line", "left-only"
|
||||||
|
3, "LINESTRING(10 0, 9 -1, 8 0, 9 1, 10 0)", "line", "right-only"
|
||||||
|
4, "LINESTRING(13 0, 12 -1, 11 0, 12 1, 13 0)", "line", "auto"
|
||||||
|
5, "LINESTRING(16 0, 15 -1, 14 0, 15 1, 16 0)", "line", "auto-down"
|
||||||
|
6, "LINESTRING(19 0, 18 -1, 17 0, 18 1, 19 0)", "line", "up"
|
||||||
|
7, "LINESTRING(22 0, 21 -1, 20 0, 21 1, 22 0)", "line", "down"
|
||||||
|
8, "LINESTRING(25 0, 24 -1, 23 0, 24 1, 25 0)", "line", "[default]"
|
||||||
|
9, "LINESTRING( 1 -3, 0 -4, -1 -3, 0 -2, 1 -3)", "vertex-first", "left"
|
||||||
|
10, "LINESTRING( 4 -3, 3 -4, 2 -3, 3 -2, 4 -3)", "vertex-first", "right"
|
||||||
|
11, "LINESTRING( 7 -3, 6 -4, 5 -3, 6 -2, 7 -3)", "vertex-first", "left-only"
|
||||||
|
12, "LINESTRING(10 -3, 9 -4, 8 -3, 9 -2, 10 -3)", "vertex-first", "right-only"
|
||||||
|
13, "LINESTRING(13 -3, 12 -4, 11 -3, 12 -2, 13 -3)", "vertex-first", "auto"
|
||||||
|
14, "LINESTRING(16 -3, 15 -4, 14 -3, 15 -2, 16 -3)", "vertex-first", "auto-down"
|
||||||
|
15, "LINESTRING(19 -3, 18 -4, 17 -3, 18 -2, 19 -3)", "vertex-first", "up"
|
||||||
|
16, "LINESTRING(22 -3, 21 -4, 20 -3, 21 -2, 22 -3)", "vertex-first", "down"
|
||||||
|
17, "LINESTRING(25 -3, 24 -4, 23 -3, 24 -2, 25 -3)", "vertex-first", "[default]"
|
||||||
|
18, "LINESTRING( 1 -6, 0 -7, -1 -6, 0 -5, 1 -6)", "vertex-last", "left"
|
||||||
|
19, "LINESTRING( 4 -6, 3 -7, 2 -6, 3 -5, 4 -6)", "vertex-last", "right"
|
||||||
|
20, "LINESTRING( 7 -6, 6 -7, 5 -6, 6 -5, 7 -6)", "vertex-last", "left-only"
|
||||||
|
21, "LINESTRING(10 -6, 9 -7, 8 -6, 9 -5, 10 -6)", "vertex-last", "right-only"
|
||||||
|
22, "LINESTRING(13 -6, 12 -7, 11 -6, 12 -5, 13 -6)", "vertex-last", "auto"
|
||||||
|
23, "LINESTRING(16 -6, 15 -7, 14 -6, 15 -5, 16 -6)", "vertex-last", "auto-down"
|
||||||
|
24, "LINESTRING(19 -6, 18 -7, 17 -6, 18 -5, 19 -6)", "vertex-last", "up"
|
||||||
|
25, "LINESTRING(22 -6, 21 -7, 20 -6, 21 -5, 22 -6)", "vertex-last", "down"
|
||||||
|
26, "LINESTRING(25 -6, 24 -7, 23 -6, 24 -5, 25 -6)", "vertex-last", "[default]"
|
||||||
|
</Parameter>
|
||||||
|
</Datasource>
|
||||||
|
</Layer>
|
||||||
|
</Map>
|
Loading…
Reference in a new issue