2. PostGIS plug-in - optional 'multiple_geometries' parameter to control how Multi* geometries built.
3. MarkersSymbolizer (work in progress) to render vector shapes (markers) alonh a path with collision detection.
- libxml2 support
- strict error handling while parsing XML map files
- implemented save_map()
- removed some duplicate defaults
- all symbolizers with icons share a common base class now
(FIXME : label_spacing is still, too slow!!)
2. Re-use some agg objects.
3. placement_finder cleanups!
4. Added support for 'building_symbolizer' - extruded polygons
+ raster and gdal input isn't tested. Not working currently...
+ *-input.so plugins created. Change loader in source or link plugin to correct place
+ use pkg-config uninstalled feature
-> define project root to PKG_CONFIG_PATH to use mapnik without installation
+ added various library checks
+ don't install fonts
+ don't use included AGG
-> check for a installed libagg
+ Added Makefile for c++ demo
+ don't build any python wrapper stuff
-> this follows if all other building works
+ added Anjuta file
-> not needed to build anything, but helps much if you use Anjuta
plugins/input/postgis/SConscript:
- added boost_thread-mt to darwin builds
demo/c++/rundemo.cpp:
- setBackground() is now set_background()
bindings/python/SConscript:
- added boost_thread-mt to darwin builds
- changed builder to LoadableModule which builds a so called "bundle"
on darwin and a shared library on all other systems.
- LDMODULEPREFIX = ''
SConstruct:
- freetype-config is now searched in the path.
2. Pass resolution to bbox query
3. Use variant<int,double,string> as parameter value e.g in Python:
ds = Raster(file="/path/to/file",lox = 12312.4,.....)
Added extractor facility to work with mapnik::parameter (C++):
mapnik::parameters params;
params["parameter0"] = 123.456;
params["parameter1"] = "123.456"; // initialize with string extract double later
boost::optional<double> val0 = params.get<double>("parameter0");
if (val0)
{
std::cout << *val0;
}
// with default value. NOTE: there is no 'parameter2' in params
boost::optional<double> val2 = params.get<double>("parameter2",654.321);
std::cout << * val2;
//
4. Added Gdal factory method in __init__.py
ds = Gdal(file="/tmp/file.tiff")
to be rendered. This allows for a large extent (larger than can be
rendered into a single image in memory) to be rendered out as tiles.
Since the full extent is used for the placement calculations text
crossing tile boundaries will be consistent.
This method is a little inefficient when a large number of labels need
placed, an improved method would be to cache these placements between
tiles, but the attached is a start.
c++ users should simple call the render method with a start X and Y
coordinate specified,
for (int TileX = 0;TileX < 5;++TileX)
{
for(int TileY = 0;TileY < 5; ++TileY)
{
int TileSize=250;
int StartX = TileX*TileSize;
int StartY = TileY*TileSize;
Image32 buf(TileSize,TileSize);
agg_renderer<Image32> ren(m,buf,StartX,StartY);
ren.apply();
char name[324];
sprintf(name,"tile_%d_%d.png",TileX,TileY);
ImageUtils::save_to_file(name,"png",buf);
}
}
python users should call render_tile_to_file
for y in range(tile_count_y):
for x in range(tile_count_x):
if not os.path.exists("tiles/%d/%d/" % (map_scale, y)):
os.makedirs("tiles/%d/%d/" % (map_scale, y))
render_tile_to_file(m, x*tile_size, y*tile_size, tile_size, tile_size,
'tiles/%d/%d/%d.png' % (map_scale,y,x), 'png')
bool hit_test(double x, double y, double tol);
2. added image_view(unsigned x, unsigned y, unsigned width, unsigned height)
allowing to select region from image data e.g (in Python):
im = Image(2048,2048)
view = im.view(0,0,256,256)
save_to_file(filename,type, view)
3. changed envelope method to return vy value in datasource classes
4. features_at_point impl for shape and postgis plug-ins
rendering them as labels when using the text or shield symbolisers
(blame my horrible datasets)
* correctly recognise the Postgis "text" data type (it was in
postgisfs.cpp just not postgis.cpp) - my initial workaround to the
above was "SELECT trim(from label) AS label ..." which failed
miserably because it returned a text data type.
Thanks to Robert Coup for the patch!
2. added extra parameter 'estimate_extent'. By default, exact extent will be calulated e.g :
select extent(geom) from table_name;
Sometimes it is more practical (faster!) to use estimated extent
select estimated_extent('table_name','geom');
but it is somewhere around 95% accurate.
Usage:
....
params["estimate_extent"]="true";
....