Skip to content
Merged

Proj6 #262

Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
4 changes: 2 additions & 2 deletions mapnik/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -156,7 +156,7 @@ def forward(self, projection):
Example: Project the geographic coordinates of the
city center of Stuttgart into the local
map projection (GK Zone 3/DHDN, EPSG 31467)
>>> p = Projection('+init=epsg:31467')
>>> p = Projection('epsg:31467')
>>> Coord(9.1, 48.7).forward(p)
Coord(3507360.12813,5395719.2749)
"""
Expand All @@ -176,7 +176,7 @@ def inverse(self, projection):
city center of Stuttgart in the local
map projection (GK Zone 3/DHDN, EPSG 31467)
into geographic coordinates:
>>> p = Projection('+init=epsg:31467')
>>> p = Projection('epsg:31467')
>>> Coord(3507360.12813,5395719.2749).inverse(p)
Coord(9.1, 48.7)
"""
Expand Down
36 changes: 18 additions & 18 deletions src/mapnik_layer.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -146,13 +146,13 @@ void export_layer()
class_<layer>("Layer", "A Mapnik map layer.", init<std::string const&,optional<std::string const&> >(
"Create a Layer with a named string and, optionally, an srs string.\n"
"\n"
"The srs can be either a Proj.4 epsg code ('+init=epsg:<code>') or\n"
"of a Proj.4 literal ('+proj=<literal>').\n"
"If no srs is specified it will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
"The srs can be either a Proj epsg code ('epsg:<code>') or\n"
"of a Proj literal ('+proj=<literal>').\n"
"If no srs is specified it will default to 'epsg:4326'\n"
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr\n"
"<mapnik._mapnik.Layer object at 0x6a270>\n"
))
Expand All @@ -166,7 +166,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.envelope()\n"
"box2d(-1.0,-1.0,0.0,0.0) # default until a datasource is loaded\n"
)
Expand All @@ -183,7 +183,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.visible(1.0/1000000)\n"
"True\n"
">>> lyr.active = False\n"
Expand All @@ -198,7 +198,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.active\n"
"True # Active by default\n"
">>> lyr.active = False # set False to disable layer rendering\n"
Expand All @@ -213,7 +213,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.status\n"
"True # Active by default\n"
">>> lyr.status = False # set False to disable layer rendering\n"
Expand Down Expand Up @@ -250,7 +250,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer, Datasource\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.datasource = Datasource(type='shape',file='world_borders')\n"
">>> lyr.datasource\n"
"<mapnik.Datasource object at 0x65470>\n"
Expand Down Expand Up @@ -285,7 +285,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.maximum_scale_denominator\n"
"1.7976931348623157e+308 # default is the numerical maximum\n"
">>> lyr.maximum_scale_denominator = 1.0/1000000\n"
Expand All @@ -300,7 +300,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.minimum_scale_denominator # default is 0\n"
"0.0\n"
">>> lyr.minimum_scale_denominator = 1.0/1000000\n"
Expand All @@ -315,7 +315,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import Layer\n"
">>> lyr = Layer('My Layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = Layer('My Layer','epsg:4326')\n"
">>> lyr.name\n"
"'My Layer'\n"
">>> lyr.name = 'New Name'\n"
Expand All @@ -330,7 +330,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import layer\n"
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = layer('My layer','epsg:4326')\n"
">>> lyr.queryable\n"
"False # Not queryable by default\n"
">>> lyr.queryable = True\n"
Expand All @@ -345,12 +345,12 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import layer\n"
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = layer('My layer','epsg:4326')\n"
">>> lyr.srs\n"
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n"
">>> # set to google mercator with Proj.4 literal\n"
"'epsg:4326' # The default srs if not initialized with custom srs\n"
">>> # set to google mercator with Proj literal\n"
"... \n"
">>> lyr.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'\n"
">>> lyr.srs = 'epsg:3857'\n"
)

.add_property("group_by",
Expand All @@ -367,7 +367,7 @@ void export_layer()
"\n"
"Usage:\n"
">>> from mapnik import layer\n"
">>> lyr = layer('My layer','+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')\n"
">>> lyr = layer('My layer','epsg:4326')\n"
">>> lyr.styles\n"
"<mapnik._mapnik.Names object at 0x6d3e8>\n"
">>> len(lyr.styles)\n"
Expand Down
20 changes: 10 additions & 10 deletions src/mapnik_map.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -165,17 +165,17 @@ void export_map()
class_<Map>("Map","The map object.",init<int,int,optional<std::string const&> >(
( arg("width"),arg("height"),arg("srs") ),
"Create a Map with a width and height as integers and, optionally,\n"
"an srs string either with a Proj.4 epsg code ('+init=epsg:<code>')\n"
"or with a Proj.4 literal ('+proj=<literal>').\n"
"If no srs is specified the map will default to '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
"an srs string either with a Proj epsg code ('epsg:<code>')\n"
"or with a Proj literal ('+proj=<literal>').\n"
"If no srs is specified the map will default to 'epsg:4326'\n"
"\n"
"Usage:\n"
">>> from mapnik import Map\n"
">>> m = Map(600,400)\n"
">>> m\n"
"<mapnik._mapnik.Map object at 0x6a240>\n"
">>> m.srs\n"
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
"'epsg:4326'\n"
))

.def("append_style",insert_style,
Expand Down Expand Up @@ -502,22 +502,22 @@ void export_map()
.add_property("srs",
make_function(&Map::srs,return_value_policy<copy_const_reference>()),
&Map::set_srs,
"Spatial reference in Proj.4 format.\n"
"Spatial reference in Proj format.\n"
"Either an epsg code or proj literal.\n"
"For example, a proj literal:\n"
"\t'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
"\t'epsg:4326'\n"
"and a proj epsg code:\n"
"\t'+init=epsg:4326'\n"
"\t'epsg:4326'\n"
"\n"
"Note: using epsg codes requires the installation of\n"
"the Proj.4 'epsg' data file normally found in '/usr/local/share/proj'\n"
"the Proj 'epsg' data file normally found in '/usr/local/share/proj'\n"
"\n"
"Usage:\n"
">>> m.srs\n"
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs' # The default srs if not initialized with custom srs\n"
"'epsg:4326' # The default srs if not initialized with custom srs\n"
">>> # set to google mercator with Proj.4 literal\n"
"... \n"
">>> m.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'\n"
">>> m.srs = 'epsg:3857'\n"
)

.add_property("width",
Expand Down
17 changes: 9 additions & 8 deletions src/mapnik_proj_transform.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -48,7 +48,7 @@ struct proj_transform_pickle_suite : boost::python::pickle_suite
getinitargs(const proj_transform& p)
{
using namespace boost::python;
return boost::python::make_tuple(p.source(),p.dest());
return boost::python::make_tuple(p.definition());
}
};

Expand All @@ -62,7 +62,7 @@ mapnik::coord2d forward_transform_c(mapnik::proj_transform& t, mapnik::coord2d c
if (!t.forward(x,y,z)) {
std::ostringstream s;
s << "Failed to forward project "
<< "from " << t.source().params() << " to: " << t.dest().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return mapnik::coord2d(x,y);
Expand All @@ -76,7 +76,7 @@ mapnik::coord2d backward_transform_c(mapnik::proj_transform& t, mapnik::coord2d
if (!t.backward(x,y,z)) {
std::ostringstream s;
s << "Failed to back project "
<< "from " << t.dest().params() << " to: " << t.source().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return mapnik::coord2d(x,y);
Expand All @@ -88,7 +88,7 @@ mapnik::box2d<double> forward_transform_env(mapnik::proj_transform& t, mapnik::b
if (!t.forward(new_box)) {
std::ostringstream s;
s << "Failed to forward project "
<< "from " << t.source().params() << " to: " << t.dest().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return new_box;
Expand All @@ -100,7 +100,7 @@ mapnik::box2d<double> backward_transform_env(mapnik::proj_transform& t, mapnik::
if (!t.backward(new_box)){
std::ostringstream s;
s << "Failed to back project "
<< "from " << t.dest().params() << " to: " << t.source().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return new_box;
Expand All @@ -112,7 +112,7 @@ mapnik::box2d<double> forward_transform_env_p(mapnik::proj_transform& t, mapnik:
if (!t.forward(new_box,points)) {
std::ostringstream s;
s << "Failed to forward project "
<< "from " << t.source().params() << " to: " << t.dest().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return new_box;
Expand All @@ -124,7 +124,7 @@ mapnik::box2d<double> backward_transform_env_p(mapnik::proj_transform& t, mapnik
if (!t.backward(new_box,points)){
std::ostringstream s;
s << "Failed to back project "
<< "from " << t.dest().params() << " to: " << t.source().params();
<< t.definition();
throw std::runtime_error(s.str());
}
return new_box;
Expand All @@ -136,14 +136,15 @@ void export_proj_transform ()
{
using namespace boost::python;

class_<proj_transform, boost::noncopyable>("ProjTransform", init< projection const&, projection const& >())
class_<proj_transform, boost::noncopyable>("ProjTransform", init<projection const&, projection const&>())
.def_pickle(proj_transform_pickle_suite())
.def("forward", forward_transform_c)
.def("backward",backward_transform_c)
.def("forward", forward_transform_env)
.def("backward",backward_transform_env)
.def("forward", forward_transform_env_p)
.def("backward",backward_transform_env_p)
.def("definition",&proj_transform::definition)
;

}
8 changes: 4 additions & 4 deletions src/mapnik_projection.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -95,8 +95,8 @@ void export_projection ()
using namespace boost::python;

class_<projection>("Projection", "Represents a map projection.",init<std::string const&>(
(arg("proj4_string")),
"Constructs a new projection from its PROJ.4 string representation.\n"
(arg("proj_string")),
"Constructs a new projection from its PROJ string representation.\n"
"\n"
"The constructor will throw a RuntimeError in case the projection\n"
"cannot be initialized.\n"
Expand All @@ -105,9 +105,9 @@ void export_projection ()
.def_pickle(projection_pickle_suite())
.def ("params", make_function(&projection::params,
return_value_policy<copy_const_reference>()),
"Returns the PROJ.4 string for this projection.\n")
"Returns the PROJ string for this projection.\n")
.def ("expanded",&projection::expanded,
"normalize PROJ.4 definition by expanding +init= syntax\n")
"normalize PROJ definition by expanding epsg:XXXX syntax\n")
.add_property ("geographic", &projection::is_geographic,
"This property is True if the projection is a geographic projection\n"
"(i.e. it uses lon/lat coordinates)\n")
Expand Down
10 changes: 5 additions & 5 deletions src/mapnik_python.cpp
Original file line number Diff line number Diff line change
Expand Up @@ -598,9 +598,9 @@ std::string mapnik_version_string()
return MAPNIK_VERSION_STRING;
}

bool has_proj4()
bool has_proj()
{
#if defined(MAPNIK_USE_PROJ4)
#if defined(MAPNIK_USE_PROJ)
return true;
#else
return false;
Expand Down Expand Up @@ -1035,8 +1035,8 @@ BOOST_PYTHON_MODULE(_mapnik)
">>> m = Map(256,256)\n"
">>> load_map(m,'mapfile_wgs84.xml')\n"
">>> m.srs\n"
"'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'\n"
">>> m.srs = '+init=espg:3395'\n"
"'epsg:4326'\n"
">>> m.srs = 'espg:3395'\n"
">>> save_map(m,'mapfile_mercator.xml')\n"
"\n"
);
Expand All @@ -1045,7 +1045,7 @@ BOOST_PYTHON_MODULE(_mapnik)
def("save_map_to_string", &save_map_to_string, save_map_to_string_overloads());
def("mapnik_version", &mapnik_version,"Get the Mapnik version number");
def("mapnik_version_string", &mapnik_version_string,"Get the Mapnik version string");
def("has_proj4", &has_proj4, "Get proj4 status");
def("has_proj", &has_proj, "Get proj status");
def("has_jpeg", &has_jpeg, "Get jpeg read/write support status");
def("has_png", &has_png, "Get png read/write support status");
def("has_tiff", &has_tiff, "Get tiff read/write support status");
Expand Down
2 changes: 1 addition & 1 deletion test/data
Submodule data updated 85 files
+2 −2 broken_maps/bool_value_broken.xml
+2 −2 broken_maps/datasource_type_broken.xml
+2 −2 broken_maps/datasource_type_missing.xml
+2 −2 broken_maps/db_host_broken.xml
+2 −2 broken_maps/db_user_broken.xml
+6 −0 broken_maps/duplicate_stylename.xml
+2 −2 broken_maps/font_name_broken.xml
+2 −2 broken_maps/polygon_pattern_symbolizer_broken.xml
+2 −2 broken_maps/shield_symbolizer_broken.xml
+2 −2 broken_maps/text_symbolizer_broken.xml
+2 −2 broken_maps/xml_tag_mismatch.xml
+ geobuf/geometrycollection.geobuf
+ geobuf/linestring.geobuf
+ geobuf/multilinestring.geobuf
+ geobuf/multipoint.geobuf
+ geobuf/multipolygon.geobuf
+ geobuf/point-fc.geobuf
+ geobuf/point.geobuf
+ geobuf/polygon.geobuf
+ geobuf/standalone-feature.geobuf
+ geobuf/standalone-geometry.geobuf
+8 −8 good_maps/agg_poly_gamma_map.xml
+3 −3 good_maps/agg_stack_blur.xml
+1 −1 good_maps/also_and_else_filter.xml
+2 −2 good_maps/bool_values.xml
+6 −6 good_maps/bounds_clipping.xml
+4 −4 good_maps/empty_text_symbolizer.xml
+4 −4 good_maps/frame.xml
+4 −4 good_maps/geometry-transform.xml
+4 −4 good_maps/interior_point.xml
+3 −3 good_maps/layer_buffer_size_reduction.xml
+21 −0 good_maps/layer_scale_denominator.xml
+5 −5 good_maps/line_symbolizer2.xml
+9 −9 good_maps/marker-text-line.xml
+5 −5 good_maps/marker_ellipse_transform.xml
+5 −5 good_maps/marker_ellipse_transform2.xml
+3 −3 good_maps/markers_symbolizer_lines.xml
+3 −3 good_maps/markers_symbolizer_lines_file.xml
+3 −3 good_maps/markers_symbolizer_points.xml
+3 −3 good_maps/markers_symbolizer_points_file.xml
+4 −4 good_maps/markers_symbolizer_points_gradient.xml
+3 −3 good_maps/markers_symbolizer_points_stacked.xml
+3 −3 good_maps/merc2wgs84_reprojection.xml
+0 −752 good_maps/osm-styles.xml
+0 −35 good_maps/osm_nodes_ways.xml
+4 −4 good_maps/point_csv.xml
+3 −3 good_maps/point_json.xml
+20 −20 good_maps/point_json_inline.xml
+3 −3 good_maps/point_symbolizer.xml
+3 −3 good_maps/point_symbolizer_ignore_placements.xml
+6 −6 good_maps/polygon_pattern_seamless.xml
+2 −2 good_maps/raster_symbolizer.xml
+4 −4 good_maps/rtl_text_map.xml
+3 −3 good_maps/shield_symbolizer.xml
+4 −4 good_maps/sqlite.xml
+3 −3 good_maps/sqlite_attachdb.xml
+1 −1 good_maps/style_level_comp_op.xml
+1 −1 good_maps/style_level_image_filter.xml
+3 −3 good_maps/style_level_opacity_and_blur.xml
+1 −1 good_maps/text-placement-type-dummy.xml
+20 −20 good_maps/text_breaks.xml
+6 −6 good_maps/text_halo_and_collision.xml
+4 −4 good_maps/text_rotation.xml
+3 −3 good_maps/wgs842merc_reprojection.xml
+2 −2 good_maps/xinclude/layers.xml
+2 −2 good_maps/xinclude/layers_with_entities.xml
+2 −2 good_maps/xinclude/map.xml
+2 −2 good_maps/xinclude/map_with_entities_and_includes.xml
+12 −0 json/feature-empty-properties.json
+12 −0 json/feature-null-properties.json
+27 −0 json/feature_collection_issue_4140.json
+4 −4 python_plugin/python_circle_datasource.xml
+2 −2 python_plugin/python_point_datasource.xml
+ raster/dataraster-int32.tif
+ raster/lower_columbia.tif.ovr
+ raster/mercator.tif
+ raster/red-square-transparent-preprocessed.tif
+10 −0 svg/clippath.svg
+42 −0 svg/octocat-css.svg
+ tiff/overview-test-gray8.tif
+ tiff/overview-test-gray8.tif.ovr
+ tiff/overview-test-gray8.tif.ovr.ovr
+ tiff/overview-test.tif
+ tiff/overview-test.tif.ovr
+1 −1 vrt/points.vrt
2 changes: 1 addition & 1 deletion test/data-visual
Submodule data-visual updated 2658 files
4 changes: 2 additions & 2 deletions test/python_tests/agg_rasterizer_integer_overflow_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -27,7 +27,7 @@

def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_memory():
expected_color = mapnik.Color('white')
projection = '+init=epsg:4326'
projection = 'epsg:4326'
ds = mapnik.MemoryDatasource()
context = mapnik.Context()
feat = mapnik.Feature.from_geojson(json.dumps(geojson), context)
Expand Down Expand Up @@ -57,7 +57,7 @@ def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_memory():

def test_that_coordinates_do_not_overflow_and_polygon_is_rendered_csv():
expected_color = mapnik.Color('white')
projection = '+init=epsg:4326'
projection = 'epsg:4326'
ds = mapnik.MemoryDatasource()
context = mapnik.Context()
feat = mapnik.Feature.from_geojson(json.dumps(geojson), context)
Expand Down
2 changes: 1 addition & 1 deletion test/python_tests/datasource_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -29,7 +29,7 @@ def test_that_datasources_exist():

@raises(RuntimeError)
def test_vrt_referring_to_missing_files():
srs = '+init=epsg:32630'
srs = 'epsg:32630'
if 'gdal' in mapnik.DatasourceCache.plugin_names():
lyr = mapnik.Layer('dataraster')
lyr.datasource = mapnik.Gdal(
Expand Down
4 changes: 2 additions & 2 deletions test/python_tests/layer_modification_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -54,8 +54,8 @@ def test_adding_datasource_to_layer():

# also note that since the srs was black it defaulted to wgs84
eq_(m.layers[0].srs,
'+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
eq_(lyr.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
'epsg:4326')
eq_(lyr.srs, 'epsg:4326')

# now add a datasource one...
ds = mapnik.Shapefile(file='../data/shp/world_merc.shp')
Expand Down
2 changes: 1 addition & 1 deletion test/python_tests/layer_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -14,7 +14,7 @@
def test_layer_init():
l = mapnik.Layer('test')
eq_(l.name, 'test')
eq_(l.srs, '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs')
eq_(l.srs, 'epsg:4326')
eq_(l.envelope(), mapnik.Box2d())
eq_(l.clear_label_cache, False)
eq_(l.cache_features, False)
Expand Down
2 changes: 1 addition & 1 deletion test/python_tests/multi_tile_raster_test.py
Original file line number Diff line number Diff line change
Expand Up @@ -16,7 +16,7 @@ def setup():


def test_multi_tile_policy():
srs = '+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs'
srs = 'epsg:4326'
lyr = mapnik.Layer('raster')
if 'raster' in mapnik.DatasourceCache.plugin_names():
lyr.datasource = mapnik.Raster(
Expand Down
Loading