Merge branch 'master' of github.com:mapnik/mapnik into expr-v2

Conflicts:
	tests/visual_tests/test.py
This commit is contained in:
Dane Springmeyer 2014-01-17 20:04:09 -08:00
commit 49aadae244
33 changed files with 565 additions and 22 deletions

View file

@ -14,6 +14,12 @@ Released ...
Summary: TODO
- GDAL plugin: Added back support for user driven `nodata` on rgb(a) images (#2023)
- GDAL plugin: Allowed nodata to override alpha band if set on rgba images (#2023)
- GDAL plugin: Added `nodata_tolerance` option to set nearby pixels transparent (has similar effect to the `nearblack` program) (#2023)
- Added support for web fonts: .woff format (#2113)
- Added missing support for `geometry-transform` in `line-pattern` and `polygon-pattern` symbolizers (#2065)

View file

@ -77,7 +77,8 @@ inline GDALDataset* gdal_datasource::open_dataset() const
gdal_datasource::gdal_datasource(parameters const& params)
: datasource(params),
desc_(*params.get<std::string>("type"), "utf-8"),
nodata_value_(params.get<double>("nodata"))
nodata_value_(params.get<double>("nodata")),
nodata_tolerance_(*params.get<double>("nodata_tolerance",1e-12))
{
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource: Initializing...";
@ -132,17 +133,29 @@ gdal_datasource::gdal_datasource(parameters const& params)
tr[3] = extent_.maxy();
tr[4] = 0;
tr[5] = -extent_.height() / (double)height_;
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource extent override gives Geotransform="
<< tr[0] << "," << tr[1] << ","
<< tr[2] << "," << tr[3] << ","
<< tr[4] << "," << tr[5];
}
else
{
dataset->GetGeoTransform(tr);
if (dataset->GetGeoTransform(tr) != CPLE_None)
{
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource GetGeotransform failure gives="
<< tr[0] << "," << tr[1] << ","
<< tr[2] << "," << tr[3] << ","
<< tr[4] << "," << tr[5];
}
else
{
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource Geotransform="
<< tr[0] << "," << tr[1] << ","
<< tr[2] << "," << tr[3] << ","
<< tr[4] << "," << tr[5];
}
}
MAPNIK_LOG_DEBUG(gdal) << "gdal_datasource Geotransform="
<< tr[0] << "," << tr[1] << ","
<< tr[2] << "," << tr[3] << ","
<< tr[4] << "," << tr[5];
// TODO - We should throw for true non-north up images, but the check
// below is clearly too restrictive.
// https://github.com/mapnik/mapnik/issues/970
@ -228,7 +241,8 @@ featureset_ptr gdal_datasource::features(query const& q) const
nbands_,
dx_,
dy_,
nodata_value_));
nodata_value_,
nodata_tolerance_));
}
featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol) const
@ -249,5 +263,6 @@ featureset_ptr gdal_datasource::features_at_point(coord2d const& pt, double tol)
nbands_,
dx_,
dy_,
nodata_value_));
nodata_value_,
nodata_tolerance_));
}

View file

@ -67,6 +67,7 @@ private:
int nbands_;
bool shared_dataset_;
boost::optional<double> nodata_value_;
double nodata_tolerance_;
};
#endif // GDAL_DATASOURCE_HPP

View file

@ -34,6 +34,7 @@
#include <boost/variant/apply_visitor.hpp>
// stl
#include <cmath>
#include <memory>
#include "gdal_featureset.hpp"
#include <gdal_priv.h>
@ -60,7 +61,8 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
int nbands,
double dx,
double dy,
boost::optional<double> const& nodata)
boost::optional<double> const& nodata,
double nodata_tolerance)
: dataset_(dataset),
ctx_(std::make_shared<mapnik::context_type>()),
band_(band),
@ -72,6 +74,7 @@ gdal_featureset::gdal_featureset(GDALDataset& dataset,
dy_(dy),
nbands_(nbands),
nodata_value_(nodata),
nodata_tolerance_(nodata_tolerance),
first_(true)
{
ctx_->push("nodata");
@ -287,13 +290,13 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: Processing rgb bands...";
raster_nodata = red->GetNoDataValue(&raster_has_nodata);
GDALColorTable *color_table = red->GetColorTable();
if (!alpha && raster_has_nodata && !color_table)
bool has_nodata = nodata_value_ || raster_has_nodata;
if (has_nodata && !color_table)
{
double apply_nodata = nodata_value_ ? *nodata_value_ : raster_nodata;
// read the data in and create an alpha channel from the nodata values
// NOTE: we intentionally ignore user supplied nodata value since it only
// works for grayscale images or a single band (as a double)
// TODO - we assume here the nodata value for the red band applies to all band
// but that may not always be the case: http://trac.osgeo.org/gdal/ticket/2734
// TODO - we assume here the nodata value for the red band applies to all bands
// more details about this at http://trac.osgeo.org/gdal/ticket/2734
float* imageData = (float*)image.getBytes();
red->RasterIO(GF_Read, x_off, y_off, width, height,
imageData, image.width(), image.height(),
@ -301,7 +304,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
int len = image.width() * image.height();
for (int i = 0; i < len; ++i)
{
if (std::fabs(raster_nodata - imageData[i]) < 1e-12)
if (std::fabs(apply_nodata - imageData[i]) < nodata_tolerance_)
{
*reinterpret_cast<unsigned *>(&imageData[i]) = 0;
}
@ -336,7 +339,7 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
int len = image.width() * image.height();
for (int i = 0; i < len; ++i)
{
if (std::fabs(apply_nodata - imageData[i]) < 1e-12)
if (std::fabs(apply_nodata - imageData[i]) < nodata_tolerance_)
{
*reinterpret_cast<unsigned *>(&imageData[i]) = 0;
}
@ -380,12 +383,15 @@ feature_ptr gdal_featureset::get_feature(mapnik::query const& q)
if (alpha)
{
MAPNIK_LOG_DEBUG(gdal) << "gdal_featureset: processing alpha band...";
if (raster_has_nodata)
if (!raster_has_nodata)
{
MAPNIK_LOG_ERROR(gdal) << "warning: alpha channel being used instead of nodata value";
alpha->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 3,
image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
}
else
{
MAPNIK_LOG_ERROR(gdal) << "warning: nodata value (" << raster_nodata << ") used to set transparency instead of alpha band";
}
alpha->RasterIO(GF_Read, x_off, y_off, width, height, image.getBytes() + 3,
image.width(), image.height(), GDT_Byte, 4, 4 * image.width());
}
}
// set nodata value to be used in raster colorizer

View file

@ -67,7 +67,8 @@ public:
int nbands,
double dx,
double dy,
boost::optional<double> const& nodata);
boost::optional<double> const& nodata,
double nodata_tolerance);
virtual ~gdal_featureset();
mapnik::feature_ptr next();
@ -90,6 +91,7 @@ private:
double dy_;
int nbands_;
boost::optional<double> nodata_value_;
double nodata_tolerance_;
bool first_;
};

Binary file not shown.

Binary file not shown.

Binary file not shown.

View file

@ -0,0 +1,33 @@
{
"keys": [
""
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,136 @@
{
"keys": [
""
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,136 @@
{
"keys": [
""
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

View file

@ -0,0 +1,136 @@
{
"keys": [
""
],
"data": {},
"grid": [
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" ",
" "
]
}

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 4 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 51 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 54 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 27 KiB

View file

@ -0,0 +1,17 @@
<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
<Style name="heat">
<Rule>
<RasterSymbolizer opacity="1" scaling="bilinear"/>
</Rule>
</Style>
<Layer name="heat"
srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<StyleName>heat</StyleName>
<Datasource>
<Parameter name="file">../data/aerial_rgba.tiff</Parameter>
<Parameter name="type">gdal</Parameter>
<Parameter name="nodata">255</Parameter>
<Parameter name="nodata_tolerance">5</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -0,0 +1,17 @@
<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
<Style name="heat">
<Rule>
<RasterSymbolizer opacity="1" scaling="bilinear"/>
</Rule>
</Style>
<Layer name="heat"
srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<StyleName>heat</StyleName>
<Datasource>
<!-- created with nearblack -o r.tif -of GTiff -white tests/visual_tests/data/heat.tif -setmask tests/visual_tests/data/heat_rgb.tif -->
<Parameter name="file">../data/heat_rgb.tif</Parameter>
<Parameter name="type">gdal</Parameter>
<Parameter name="nodata">255</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -0,0 +1,16 @@
<Map srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs" background-color="steelblue">
<Style name="heat">
<Rule>
<RasterSymbolizer opacity="1" scaling="bilinear"/>
</Rule>
</Style>
<Layer name="heat"
srs="+proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs">
<StyleName>heat</StyleName>
<Datasource>
<!-- created with gdal_translate tests/visual_tests/data/heat.tif -a_nodata 255 tests/visual_tests/data/heat_nodata.tif -->
<Parameter name="file">../data/heat_nodata.tif</Parameter>
<Parameter name="type">gdal</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -0,0 +1,19 @@
<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 scaling="bilinear" />
</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>
<Parameter name="nodata">255</Parameter>
<Parameter name="nodata_tolerance">100</Parameter>
</Datasource>
</Layer>
</Map>

View file

@ -214,6 +214,9 @@ files = {
'image-filters-galore':{'sizes':[(512,512)]},
'image-filters-multi-blur':{'sizes':[(512,512)]},
'line-opacity-multi-render':{'sizes':[(512,512)]},
'tiff-nodata-rgb':{'sizes':[(512,512)]},
'tiff-nodata-rgba':{'sizes':[(512,512)]},
'tiff-nodata-tolerance':{'sizes':[(512,512)]},
'marker-vs-point':{'sizes':[(512,512)]}
}