# $Id: CHANGELOG 776 2008-12-7 01:30:27Z dane $
----------------
Mapnik Changelog
----------------
A simple log of core changes affecting Mapnik usage.
Developers: Please commit along with changes.
For a complete change history, see the SVN log.
Mapnik 2.1.0
------------
- New CSV plugin - reads tabular files - autodetecting geo columns, newlines, and delimiters. Uses in-memory featureset for fast rendering and is not designed for large files (#902)
- Fixed bug in shield line placement when dx/dy are used to shift the label relative to the placement point (Matt Amos) (#908)
Mapnik 2.0.0
------------
- Add minimum-path-length property to text_symbolizer to allow labels to be placed only on lines of a certain length (#865)
- Add support for png quantization using fixed palettes (#843)
- Add AlsoFilter functionality - http://trac.mapnik.org/wiki/AlsoFilter
- SQLite Plugin: optimize i/o using shared cache and no mutexes (#797)
- Directly link input plugins to libmapnik to avoid having to set dlopen flags from binding languages (#790)
- Throw an error during registration for fonts which Freetype2 does not report a family or style name (r2985).
- Fixed quoting syntax for "table"."attribute" in PostGIS plugin (previously if table aliases were used quoting like "table.attribute" would cause query failure) (r2979).
- Added the ability to control the PostGIS feature id by suppling a key_field to reference and integer attribute name (r2979).
- Added alternative, more robust proj_transform functions to project a bbox using more points than just the four
corners to ensure an optimally sized bbox despite proj4 out of bounds conditions. (olt)
- Added map.base parameter that can be set to control where files with relative paths should be interpreted
from when a map is loaded from a string or saved to a string. It defaults to an empty string which means
that the base path will be the current working directory of the mapnik process. When a stylesheet is read
from a file that files directory is used. And a custom value can still be passed as an argument to
load_map_from_string().
- Added python function 'render_grid' to allow conversion of grid buffer to python object containing list of grid
pixels, list of keys, and a and dictionary of feature attributes.
- Added new rendering backend, grid_renderer, that collects the attributes of rendered features and
burns their ids into a grid buffer.
- Added optional 'maximum-extent' parameter to map object. If set will be used, instead of combined
layer extents, for return value of map.zoom_all(). Useful in cases where the combined layer extents
cannot possibly be projected into the map srs or the user wishes to control map bounds without
modifying the extents of each layer.
- Support for NODATA values with grey and rgb images in GDAL plugin (#727)
- Print warning if invalid XML property names are used (#110)
- Made XML property names use consistent dashes, never underscores (#644)
- Added support for drawing only first matching rule using filter-mode="first" in Style (#706)
- Added support to PointSymbolizer ('ignore_placement') for skipping adding placed points to collision detector (#564)
- Added ability to register fonts within XML using Map level 'font_directory' parameter (#168)
- TextSymbolizer: Change text_convert to text_transform to better match css naming (r2211)
- Shapefile Plugin: Throw error if attribute name is requested that does not exist (#604)
- Upgraded to the latest proj4 string literal for EPSG:4326 (WGS84) as global default projection (#333)
- Added 'mapnik_version_from_string()' function in python bindings to easily convert string representation
of version number to the integer format used in 'mapnik/version.hpp'. e.g. '0.7.1' --> 701.
- Added xinclude (http://www.w3.org/TR/xinclude/) support to libxml2-based xml parser (oldtopos) (#567)
- Optimized rendering speeds by avoiding locking in the projection code (r2063) (r2713)
- Added support for setting global alignment of polygon pattern fills (#203)
- Added support for choosing OGR layer by index number using 'layer_by_index' parameter (r1904)
- Added support for fractional halo widths (using FT Stroker) (#93)
- Added support for reading jpeg images (in addition to png/tiff) for image symbolizers (#518)
- Made libjpeg dependency optional at compile time and added mapnik2.has_jpeg() method to check for support in python (#545).
- Fixed reading of PostGIS data on Big Endian systems (#515)
- PostGIS: Added better support for alternative schemas (#500)
- AGG Renderer - Enforced default gamma function on all symbolizers to ensure proper antialiasing
even when gamma is modified on the PolygonSymbolizer. (#512)
- Added ability to read pre 2.0.0 stylesheets, but prints a warning for deprecated syntax (r1592, #501)
- Rasterlite Plugin: Experimental support for Rasterlite, to practically use sqlite database with wavelet compressed rasters (#469)
- PNG: fixed png256 for large images and some improvements to reduce color corruptions (#522)
- Implement MarkersSymbolizer in Cairo render and improve the markers placement finder. (#553)
Mapnik 0.7.0 Release
--------------------
(Packaged from r1574)
- Core: Fixed linking to external libagg (r1297,r1299)
- Core: Completed full support for PPC (Big endian) architectures (r1352 -> r1357)
- Gdal Plugin: Added support for Gdal overviews, enabling fast loading of > 1GB rasters (#54)
* Use the gdaladdo utility to add overviews to existing GDAL datasets
- PostGIS: Added an optional 'geometry_table' parameter. The 'geometry_table' used by Mapnik to look up
metadata in the geometry_columns and calculate extents (when the 'geometry_field' and 'srid' parameters
are not supplied). If 'geometry_table' is not specified Mapnik will attempt to determine the name of the
table to query based on parsing the 'table' parameter, which may fail for complex queries with more than
one 'from' keyword. Using this parameter should allow for existing metadata and table indexes to be used
while opening the door to much more complicated subqueries being passed to the 'table' parameter without
failing (#260, #426).
- PostGIS Plugin: Added optional 'geometry_field' and 'srid' parameters. If specified these will allow
Mapnik to skip several queries to try to determine these values dynamically, and can be helpful to avoid
possible query failures during metadata lookup with complex subqueries as discussed in #260 and #436, but
also solvable by specifying the 'geometry_table' parameter. (r1300,#376)
- PostGIS: Added an optional 'extent_from_subquery' parameter that when true (while the 'extent' parameter is
not provided and 'estimate_extent' is false) will direct Mapnik to calculate the extent upon the exact table
or sql provided in the 'table' parameter. If a sub-select is used for the table parameter then this will,
in cases where the subquery limits results, provide a faster and more accurate layer extent. It will have
no effect if the 'table' parameter is simply an existing table. This parameter is false by default. (#456)
- PostGIS Plugin: Added '!bbox!' token substitution ability in sql query string. This opens the door for various
complex queries that may aggregate geometries to be kept fast by allowing proper placement of the bbox
query to be used by indexes. (#415)
* Pass the bbox token inside a subquery like: !bbox!
* Valid Usages include:
(Select ST_Union(geom) as geom from table where ST_Intersects(geometry,!bbox!)) as map
(Select * from table where geom && !bbox!) as map
- PostGIS Plugin: Added 'scale_denominator' substitution ability in sql query string (#415/#465)
* Pass the scale_denominator token inside a subquery like: !scale_denominator!
* e.g. (Select * from table where field_value > !scale_denominator!) as map
- PostGIS Plugin: Added support for quoted table names (r1454) (#393)
- PostGIS: Add a 'persist_connection' option (default true), that when false will release
the idle psql connection after datasource goes out of scope (r1337) (#433,#434)
- PostGIS: Added support for BigInt (int8) postgres type (384)
- PostGIS Plugin: Throw and report errors if SQL execution fails (r1291) (#363, #242)
- PostGIS Plugin: Fixed problem in conversion of long numbers to strings (r1302,1303)
- PostGIS Plugin: Added missing support for BigInt(int8) postgres datatypes (r1250) (#384)
- OGR Plugin: Added support for reading multipoint features (#458)
- Shape Plugin: Fixed bug in file extension stripping (#413)
- Shape Plugin: Fixed missing compiler flags that causes crashing on newer g++ versions (#436)
- PNG: Fixed problem with garbled/striped png256 output along sharp edges(#416,#445,#447,#202)
- PNG: Added support for semi-transparency in png256 output (#477,#202)
- PolygonSymbolizer: Added 'gamma' attribute to allow for dilation of polygon edges - a solution
to gap artifacts or "ghost lines" between adjacent polygons and allows for slight sharpening of
the edges of non overlapping polygons. Accepts any values but 0-1 is the recommended range.
- TextSymbolizer: Large set of new attributes: 'text_transform', 'line_spacing', 'character_spacing',
'wrap_character', 'wrap_before', 'horizontal_alignment', 'justify_alignment', and 'opacity'.
* More details at changesets: r1254 and r1341
- SheildSymbolizer: Added special new attributes: 'unlock_image', 'VERTEX' placement, 'no_text' and many
attributes previously only supported in the TextSymbolizer: 'allow_overlap', 'vertical_alignment',
'horizontal_alignment', 'justify_alignment', 'wrap_width', 'wrap_character', 'wrap_before', 'text_transform',
'line_spacing', 'character_spacing', and 'opacity'.
* More details at changeset r1341
- XML: Added support for using CDATA with libxml2 parser (r1364)
- XML: Fixed memory leak in libxml2 implementation (#473)
- XML: Added function to serialize map to string, called 'mapnik.save_map_to_string()' (#396)
- XML: Added parameter to