Merge branch 'master' of github.com:mapnik/mapnik into layer-opacity
This commit is contained in:
commit
2003df01a1
533 changed files with 5384 additions and 3428 deletions
138
CHANGELOG.md
138
CHANGELOG.md
|
@ -6,12 +6,104 @@ Developers: Please commit along with changes.
|
|||
|
||||
For a complete change history, see the git log.
|
||||
|
||||
## Future
|
||||
## 2.2.0
|
||||
|
||||
- Added new mapnik-config options: `git-describe`, `defines`, `includes`, `dep-includes`, and `cxxflags` (#1443)
|
||||
Released ---
|
||||
|
||||
(Packaged from ---)
|
||||
|
||||
Summary: The 2.2.0 release is the fastest running and most stable release in the history of Mapnik. The code line represents development in the master branch since the release of 2.1.0 in Aug 2012 and therefore includes nearly a year of bugfixes and low level optimizations. Shapefile and PostGIS datasources have benefited from numerous stability fixes, 64 bit integer support has been added to support OSM data, and many rendering fixes have landed for high quality output when using a rendering `scale_factor`. Many critical code paths have been optimized extensively include raster rendering, xml map loading, string to number conversion, vector reprojection when using `epsg:4326` and `epsg:3857`, `hextree` encoding, halo rendering, and rendering when using a custom `gamma`. Mapnik 2.2 also compiles faster than previous releases in the 2.x series and drops several unneeded and hard to install dependencies.
|
||||
|
||||
- Removed 3 depedencies without loosing any functionality: `ltdl`, `cairomm` and `libsigc++` (#1804,#806,#1681)
|
||||
|
||||
- Added 64 bit integer support in expressions, feature ids, and the grid_renderer (#1661,#1662,#1662)
|
||||
|
||||
- Added the ability to disable the need for various dependencies: `proj4`, `libpng`, `libtiff`, `libjpeg`
|
||||
|
||||
- Added faster reprojection support between `epsg:3857` and `epsg:4326` (#1705,#1703,#1579)
|
||||
|
||||
- Fixed concurrency problem when using cursors in postgis plugin (#1823,#1588)
|
||||
|
||||
- Fixed postgres connection pool leaks when using `persist_connection=false` (#1764)
|
||||
|
||||
- Fixed postgres connection key to respect highest value of `max_size` and `initial_size` for any layer in map (#1599)
|
||||
|
||||
- Fixed potential crash in wkb parsing when postgis returns null geometry (#1843)
|
||||
|
||||
- Fixed blurry rendering of image and SVG icons (#1316)
|
||||
|
||||
- Improved logging system (https://github.com/mapnik/mapnik/wiki/Logging)
|
||||
|
||||
- Added support for reading images from in memory streams (#1805)
|
||||
|
||||
- Optimized halo rendering. When halo radius is < 1 new method will be used automatically (#1781)
|
||||
|
||||
- Added `text-halo-rasterizer` property. Set to `fast` for lower quality but faster
|
||||
halo rendering (#1298)
|
||||
halo rendering (#1298) which matched new default method when radius is < 1.
|
||||
|
||||
- Added support in `shape`, `sqlite`, `geojson`, and `csv` plugin for handling non-latin characters in the paths to file-based resources (#1177)
|
||||
|
||||
- Fixed rendering of markers when their size is greater than the specified `spacing` value (#1487)
|
||||
|
||||
- Fixed handling of alpha premultiplication in image scaling (#1489)
|
||||
|
||||
- Optimized rendering when a style with no symbolizers is encountered (#1517)
|
||||
|
||||
- Optimized string handling and type conversion by removing `boost::to_lower`, `boost::trim`, and `boost::lexical_cast` usage (#1687,#1687,#1633)
|
||||
|
||||
- Optimized alpha preserving `hextree` method for quantization of png images (#1629)
|
||||
|
||||
- Faster rendering of rasters by reducing memory allocation of temporary buffers (#1516)
|
||||
|
||||
- Fixed some raster reprojection artifacts (#1501)
|
||||
|
||||
- Fixed raster alignment when width != height and raster is being scaled (#1748,#1622)
|
||||
|
||||
- Added support for caching rasters for re-use during rendering when styling more than once per layer (#1543)
|
||||
|
||||
- Improved compile speeds of the code - in some cases by up to 2x and removed need for freetype dependency when building code against mapnik (#1688, #1756)
|
||||
|
||||
- Removed internal rule cache on `mapnik::Map` c++ object (#1723)
|
||||
|
||||
- Improved the scaled rendering of various map features when using `scale_factor` > 1 (#1280,#1100,#1273,#1792,#1291,#1344,#1279,#1624,#1767,#1766)
|
||||
|
||||
- Added C++ api for overriding scale_denominator to enable rendering at fixed scale (#1582)
|
||||
|
||||
- Added Layer `buffer-size` that can be used to override Map `buffer-size` to avoid
|
||||
over-fetching of data that does not need to be buffered as much as other layers.
|
||||
Map level `buffer-size` will be default if layers do not set the option. Renamed a
|
||||
previously undocumented parameter by the same name that impacted clipping extent and
|
||||
was not needed (clipping padding should likely be a symbolizer level option) (#1566)
|
||||
|
||||
- Fixed potential file descriptor leaks in image readers when invalid images were encountered (#1783)
|
||||
|
||||
- Fixed alpha handling in the `blur` and `invert` image filters (#1541)
|
||||
|
||||
- Fixed error reporting in the python plugin (#1422)
|
||||
|
||||
- Added the ability to run tests without installing with `make test-local`
|
||||
|
||||
- Reduced library binary size by adding support for `-fvisibility-inlines-hidden` and `-fvisibility=hidden` (#1826,#1832)
|
||||
|
||||
- Added `mapnik::map_request` class, a special object to allow passing mutable map objects to renderer (#1737)
|
||||
|
||||
- Added the ability to use `boost::hash` on `mapnik::value` types (#1729)
|
||||
|
||||
- Removed obsolete `geos` plugin (functionality replaced by `csv` plugin) and unmaintained `kismet` plugin (#1809,#1833)
|
||||
|
||||
- Added new `mapnik-config` flags: `--all-flags`, `--defines`, `--git-describe`, `--includes`, `--dep-includes`, `--cxxflags`, `--cxx` (#1443)
|
||||
|
||||
- Added support for unicode strings as arguments in python bindings (#163)
|
||||
|
||||
- Added DebugSymbolizer which is able to render the otherwise invisible collision boxes (#1366)
|
||||
|
||||
- Optimized rendering by reducing overhead of using `gamma` property (#1174)
|
||||
|
||||
- Fixed rendering artifacts when using `polygon-gamma` or `line-gamma` equal to 0 (#761,#1763)
|
||||
|
||||
- Fixed and optimized the display of excessive precision of some float data in labels (#430,#1697)
|
||||
|
||||
- Removed the `bind` option for datasources (#1654)
|
||||
|
||||
- Added ability to access style list from map by (name,obj) in python (#1725)
|
||||
|
||||
|
@ -21,19 +113,11 @@ For a complete change history, see the git log.
|
|||
|
||||
- Added support for `background-image` in cairo_renderer (#1724)
|
||||
|
||||
- Added Layer `buffer-size` that can be used to override Map `buffer-size` to avoid
|
||||
over-fetching of data that does not need to be buffered as much as other layers.
|
||||
Map level `buffer-size` will be default if layers do not set the option. Renamed a
|
||||
previously undocumented parameter by the same name that impacted clipping extent and
|
||||
was not needed (clipping padding should likely be a symbolizer level option) (#1566)
|
||||
|
||||
- Fixed building symbolizer rendering to be fully sensitive to alpha (8b66128c892 / bc8ea1c5a7a)
|
||||
|
||||
- Added 64 bit integer support in the grid_renderer (#1662)
|
||||
|
||||
- `<Filter>[attr]</Filter>` now returns false if attr is an empty string (#1665)
|
||||
|
||||
- Added 64 bit integer support in expressions and feature ids (#1661,#1662)
|
||||
- `<Filter>[attr]!=null</Filter>` now returns true if attr is not null (#1642)
|
||||
|
||||
- Added support for DBF `Logical` type: #1614
|
||||
|
||||
|
@ -50,9 +134,7 @@ For a complete change history, see the git log.
|
|||
|
||||
- Added support for setting zlib `Z_FIXED` strategy with format string: `png:z=fixed`
|
||||
|
||||
- Fixed handling of transparency level option in Octree-based PNG encoding (#1556)
|
||||
|
||||
- Faster rendering of rasters by reducing memory allocation of temporary buffers (#1516)
|
||||
- Fixed handling of transparency level option in `octree` png encoding (#1556)
|
||||
|
||||
- Added ability to pass a pre-created collision detector to the cairo renderer (#1444)
|
||||
|
||||
|
@ -68,6 +150,24 @@ For a complete change history, see the git log.
|
|||
now the combined layer extents will be again respected: they will be clipped to the maximum-extent if possible
|
||||
and only when back-projecting fails for all layers will the maximum-extent be used as a fallback (#1473)
|
||||
|
||||
- Compile time flag called `PLUGIN_LINKING` to allow input datasource plugins to be statically linked with the mapnik library (#249)
|
||||
|
||||
- Fixed `dasharray` rendering in cairo backend (#1740)
|
||||
|
||||
- Fixed handling of `opacity` in svg rendering (#1744)
|
||||
|
||||
- Fixed uneven rendering of markers along lines (#1693)
|
||||
|
||||
- Fixed handling of extra bytes in some shapefile fields (#1605)
|
||||
|
||||
- Fixed handling (finally) of null shapes and partially corrupt shapefiles (#1630,#1621)
|
||||
|
||||
- Added ability to re-use `mapnik::image_32` and `mapnik::grid` by exposing a `clear` method (#1571)
|
||||
|
||||
- Added support for writing RGB (no A) png images by using the format string of `png:t=0` (#1559)
|
||||
|
||||
- Added experimental support for geometry simplification at symbolizer level (#1385)
|
||||
|
||||
## Mapnik 2.1.0
|
||||
|
||||
Released Aug 23, 2012
|
||||
|
@ -215,7 +315,7 @@ Released April 10, 2012
|
|||
|
||||
- Workaround for boost interprocess compile error with recent gcc versions (#950,#1001,#1082)
|
||||
|
||||
- Fix possible memory corruption when using hextree mode for png color reduction (#1087)
|
||||
- Fix possible memory corruption when using `hextree` mode for png color reduction (#1087)
|
||||
|
||||
- Fixed bug in shield line placement when dx/dy are used to shift the label relative to the placement point (Matt Amos) (#908)
|
||||
|
||||
|
@ -395,14 +495,14 @@ Released March 23, 2010
|
|||
|
||||
- PNG: fixed png256 for large images and some improvements to reduce color corruptions ([#522](https://github.com/mapnik/mapnik/issues/522))
|
||||
|
||||
- PNG: Added new quantization method for indexed png format using hextree with full support for alpha
|
||||
- PNG: Added new quantization method for indexed png format using `hextree` with full support for alpha
|
||||
channel. Also new method has some optimizations for color gradients common when using elevation based
|
||||
rasters. By default old method using octree is used. (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477))
|
||||
rasters. By default old method using `octree` is used. (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477))
|
||||
|
||||
- PNG: Added initial support for passing options to png writter like number of colors, transparency
|
||||
support, quantization method and possibly other in future using type parameter. For example
|
||||
"png8:c=128:t=1:m=h" limits palette to 128 colors, uses only binary transparency (0 - none,
|
||||
1 - binary, 2 - full), and new method of quantization using hextree (h - hextree, o - octree).
|
||||
1 - binary, 2 - full), and new method of quantization using `hextree` (h - `hextree`, o - `octree`).
|
||||
Existing type "png256" can be also written using "png8:c=256:m=o:t=2" (r1680, r1683, [#477](https://github.com/mapnik/mapnik/issues/477))
|
||||
|
||||
|
||||
|
|
|
@ -65,7 +65,7 @@ Note: Python3k is supported, see: https://github.com/mapnik/mapnik/wiki/Python3k
|
|||
|
||||
Optional dependencies:
|
||||
|
||||
* Cairo - Graphics library for output formats like PDF, PS, and SVG
|
||||
* Cairo >= 1.6.0 - Graphics library for output formats like PDF, PS, and SVG
|
||||
- pkg-config - Required for building with cairo support
|
||||
- pycairo - Python bindings for cairo
|
||||
* libpq - PostgreSQL libraries (For PostGIS plugin support)
|
||||
|
|
176
SConstruct
176
SConstruct
|
@ -22,6 +22,7 @@ import sys
|
|||
import re
|
||||
import platform
|
||||
from glob import glob
|
||||
from copy import copy
|
||||
from subprocess import Popen, PIPE
|
||||
from SCons.SConf import SetCacheMode
|
||||
import pickle
|
||||
|
@ -78,6 +79,7 @@ pretty_dep_names = {
|
|||
'pkg-config':'pkg-config tool | more info: http://pkg-config.freedesktop.org',
|
||||
'pg_config':'pg_config program | try setting PG_CONFIG SCons option',
|
||||
'xml2-config':'xml2-config program | try setting XML2_CONFIG SCons option',
|
||||
'libxml2':'libxml2 library | try setting XML2_CONFIG SCons option to point to location of xml2-config program',
|
||||
'gdal-config':'gdal-config program | try setting GDAL_CONFIG SCons option',
|
||||
'freetype-config':'freetype-config program | try setting FREETYPE_CONFIG SCons option',
|
||||
'osm':'more info: https://github.com/mapnik/mapnik/wiki//OsmPlugin',
|
||||
|
@ -100,14 +102,14 @@ PLUGINS = { # plugins with external dependencies
|
|||
'rasterlite': {'default':False,'path':'RASTERLITE','inc':['sqlite3.h','rasterlite.h'],'lib':'rasterlite','lang':'C'},
|
||||
|
||||
# todo: osm plugin does also depend on libxml2 (but there is a separate check for that)
|
||||
'osm': {'default':True,'path':None,'inc':'curl/curl.h','lib':'curl','lang':'C'},
|
||||
'osm': {'default':False,'path':None,'inc':'curl/curl.h','lib':'curl','lang':'C'},
|
||||
|
||||
# plugins without external dependencies requiring CheckLibWithHeader...
|
||||
'shape': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
'csv': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
'raster': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
'geojson': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
'python': {'default':True,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
'python': {'default':False,'path':None,'inc':None,'lib':None,'lang':'C++'},
|
||||
}
|
||||
|
||||
|
||||
|
@ -171,6 +173,10 @@ def shortest_name(libs):
|
|||
name = lib
|
||||
return name
|
||||
|
||||
def rm_path(item,set,_env):
|
||||
for i in _env[set]:
|
||||
if item in i:
|
||||
_env[set].remove(i)
|
||||
|
||||
def sort_paths(items,priority):
|
||||
"""Sort paths such that compiling and linking will globally prefer custom or local libs
|
||||
|
@ -308,8 +314,8 @@ opts.AddVariables(
|
|||
('XML2_CONFIG', 'The path to the xml2-config executable.', 'xml2-config'),
|
||||
PathVariable('ICU_INCLUDES', 'Search path for ICU include files', '/usr/include', PathVariable.PathAccept),
|
||||
PathVariable('ICU_LIBS','Search path for ICU include files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
||||
('ICU_LIB_NAME', 'The library name for icu (such as icuuc, sicuuc, or icucore)', 'icuuc',
|
||||
PathVariable.PathAccept),
|
||||
('ICU_LIB_NAME', 'The library name for icu (such as icuuc, sicuuc, or icucore)', 'icuuc', PathVariable.PathAccept),
|
||||
|
||||
BoolVariable('PNG', 'Build Mapnik with PNG read and write support', 'True'),
|
||||
PathVariable('PNG_INCLUDES', 'Search path for libpng include files', '/usr/include', PathVariable.PathAccept),
|
||||
PathVariable('PNG_LIBS','Search path for libpng library files','/usr/' + LIBDIR_SCHEMA_DEFAULT, PathVariable.PathAccept),
|
||||
|
@ -352,6 +358,9 @@ PathVariable.PathAccept),
|
|||
BoolVariable('ENABLE_STATS', 'Enable global statistics during map processing', 'False'),
|
||||
('DEFAULT_LOG_SEVERITY', 'The default severity of the logger (eg. ' + ', '.join(severities) + ')', 'error'),
|
||||
|
||||
# Plugin linking
|
||||
EnumVariable('PLUGIN_LINKING', "Set plugin linking with libmapnik", 'shared', ['shared','static']),
|
||||
|
||||
# Other variables
|
||||
BoolVariable('SHAPE_MEMORY_MAPPED_FILE', 'Utilize memory-mapped files in Shapefile Plugin (higher memory usage, better performance)', 'True'),
|
||||
('SYSTEM_FONTS','Provide location for python bindings to register fonts (if provided then the bundled DejaVu fonts are not installed)',''),
|
||||
|
@ -434,7 +443,7 @@ pickle_store = [# Scons internal variables
|
|||
'LIBMAPNIK_DEFINES',
|
||||
'LIBMAPNIK_CXXFLAGS',
|
||||
'CAIRO_LIBPATHS',
|
||||
'CAIRO_LINKFLAGS',
|
||||
'CAIRO_ALL_LIBS',
|
||||
'CAIRO_CPPPATHS',
|
||||
'SVG_RENDERER',
|
||||
'SQLITE_LINKFLAGS',
|
||||
|
@ -729,25 +738,23 @@ def FindBoost(context, prefixes, thread_flag):
|
|||
msg = str()
|
||||
|
||||
if BOOST_LIB_DIR:
|
||||
msg += '\n *libs found: %s' % BOOST_LIB_DIR
|
||||
msg += '\nFound boost libs: %s' % BOOST_LIB_DIR
|
||||
env['BOOST_LIBS'] = BOOST_LIB_DIR
|
||||
else:
|
||||
env['BOOST_LIBS'] = '/usr/' + env['LIBDIR_SCHEMA']
|
||||
msg += '\n *using default boost lib dir: %s' % env['BOOST_LIBS']
|
||||
msg += '\nUsing default boost lib dir: %s' % env['BOOST_LIBS']
|
||||
|
||||
if BOOST_INCLUDE_DIR:
|
||||
msg += '\n *headers found: %s' % BOOST_INCLUDE_DIR
|
||||
msg += '\nFound boost headers: %s' % BOOST_INCLUDE_DIR
|
||||
env['BOOST_INCLUDES'] = BOOST_INCLUDE_DIR
|
||||
else:
|
||||
env['BOOST_INCLUDES'] = '/usr/include'
|
||||
msg += '\n *using default boost include dir: %s' % env['BOOST_INCLUDES']
|
||||
msg += '\nUsing default boost include dir: %s' % env['BOOST_INCLUDES']
|
||||
|
||||
if not env['BOOST_TOOLKIT'] and not env['BOOST_ABI'] and not env['BOOST_VERSION']:
|
||||
if BOOST_APPEND:
|
||||
msg += '\n *lib naming extension found: %s' % BOOST_APPEND
|
||||
msg += '\nFound boost lib name extension: %s' % BOOST_APPEND
|
||||
env['BOOST_APPEND'] = BOOST_APPEND
|
||||
else:
|
||||
msg += '\n *no lib naming extension found'
|
||||
else:
|
||||
# Creating BOOST_APPEND according to the Boost library naming order,
|
||||
# which goes <toolset>-<threading>-<abi>-<version>. See:
|
||||
|
@ -762,7 +769,7 @@ def FindBoost(context, prefixes, thread_flag):
|
|||
# Boost libraries.
|
||||
if len(append_params) > 1:
|
||||
env['BOOST_APPEND'] = '-'.join(append_params)
|
||||
msg += '\n *using boost lib naming: %s' % env['BOOST_APPEND']
|
||||
msg += '\nFound boost lib name extension: %s' % env['BOOST_APPEND']
|
||||
|
||||
env.AppendUnique(CPPPATH = os.path.realpath(env['BOOST_INCLUDES']))
|
||||
env.AppendUnique(LIBPATH = os.path.realpath(env['BOOST_LIBS']))
|
||||
|
@ -799,6 +806,32 @@ int main()
|
|||
context.Result(ret)
|
||||
return ret
|
||||
|
||||
def CheckCairoHasFreetype(context, silent=False):
|
||||
if not silent:
|
||||
context.Message('Checking for cairo freetype font support ... ')
|
||||
context.env.AppendUnique(CPPPATH=copy(env['CAIRO_CPPPATHS']))
|
||||
|
||||
ret = context.TryRun("""
|
||||
|
||||
#include <cairo-features.h>
|
||||
|
||||
int main()
|
||||
{
|
||||
#ifdef CAIRO_HAS_FT_FONT
|
||||
return 0;
|
||||
#else
|
||||
return 1;
|
||||
#endif
|
||||
}
|
||||
|
||||
""", '.cpp')[0]
|
||||
if silent:
|
||||
context.did_show_result=1
|
||||
context.Result(ret)
|
||||
for item in env['CAIRO_CPPPATHS']:
|
||||
rm_path(item,'CPPPATH',context.env)
|
||||
return ret
|
||||
|
||||
def GetBoostLibVersion(context):
|
||||
ret = context.TryRun("""
|
||||
|
||||
|
@ -946,6 +979,7 @@ conf_tests = { 'prioritize_paths' : prioritize_paths,
|
|||
'CheckPKGVersion' : CheckPKGVersion,
|
||||
'FindBoost' : FindBoost,
|
||||
'CheckBoost' : CheckBoost,
|
||||
'CheckCairoHasFreetype' : CheckCairoHasFreetype,
|
||||
'GetBoostLibVersion' : GetBoostLibVersion,
|
||||
'GetMapnikLibVersion' : GetMapnikLibVersion,
|
||||
'parse_config' : parse_config,
|
||||
|
@ -1007,11 +1041,12 @@ if not preconfigured:
|
|||
env['SKIPPED_DEPS'] = []
|
||||
env['HAS_CAIRO'] = False
|
||||
env['CAIRO_LIBPATHS'] = []
|
||||
env['CAIRO_LINKFLAGS'] = []
|
||||
env['CAIRO_ALL_LIBS'] = []
|
||||
env['CAIRO_CPPPATHS'] = []
|
||||
env['HAS_PYCAIRO'] = False
|
||||
env['HAS_LIBXML2'] = False
|
||||
env['LIBMAPNIK_LIBS'] = []
|
||||
env['LIBMAPNIK_LINKFLAGS'] = []
|
||||
env['LIBMAPNIK_CPPATHS'] = []
|
||||
env['LIBMAPNIK_DEFINES'] = []
|
||||
env['LIBMAPNIK_CXXFLAGS'] = []
|
||||
|
@ -1137,6 +1172,8 @@ if not preconfigured:
|
|||
# https://github.com/mapnik/mapnik/issues/913
|
||||
if conf.parse_config('XML2_CONFIG',checks='--cflags'):
|
||||
env['HAS_LIBXML2'] = True
|
||||
else:
|
||||
env['MISSING_DEPS'].append('libxml2')
|
||||
|
||||
LIBSHEADERS = [
|
||||
['z', 'zlib.h', True,'C'],
|
||||
|
@ -1185,7 +1222,7 @@ if not preconfigured:
|
|||
|
||||
# if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests
|
||||
if env['PRIORITIZE_LINKING']:
|
||||
conf.prioritize_paths(silent=False)
|
||||
conf.prioritize_paths(silent=True)
|
||||
|
||||
if not env['HOST']:
|
||||
for libname, headers, required, lang in LIBSHEADERS:
|
||||
|
@ -1234,7 +1271,7 @@ if not preconfigured:
|
|||
|
||||
# if requested, sort LIBPATH and CPPPATH before running CheckLibWithHeader tests
|
||||
if env['PRIORITIZE_LINKING']:
|
||||
conf.prioritize_paths()
|
||||
conf.prioritize_paths(silent=True)
|
||||
|
||||
if not env['HOST']:
|
||||
# if the user is not setting custom boost configuration
|
||||
|
@ -1369,9 +1406,9 @@ if not preconfigured:
|
|||
#os.path.join(c_inc,'include/libpng'),
|
||||
]
|
||||
)
|
||||
env["CAIRO_LINKFLAGS"] = ['cairo']
|
||||
env["CAIRO_ALL_LIBS"] = ['cairo']
|
||||
if env['RUNTIME_LINK'] == 'static':
|
||||
env["CAIRO_LINKFLAGS"].extend(
|
||||
env["CAIRO_ALL_LIBS"].extend(
|
||||
['pixman-1','expat','fontconfig','iconv']
|
||||
)
|
||||
# todo - run actual checkLib?
|
||||
|
@ -1394,7 +1431,7 @@ if not preconfigured:
|
|||
cairo_env.ParseConfig(cmd)
|
||||
for lib in cairo_env['LIBS']:
|
||||
if not lib in env['LIBS']:
|
||||
env["CAIRO_LINKFLAGS"].append(lib)
|
||||
env["CAIRO_ALL_LIBS"].append(lib)
|
||||
for lpath in cairo_env['LIBPATH']:
|
||||
if not lpath in env['LIBPATH']:
|
||||
env["CAIRO_LIBPATHS"].append(lpath)
|
||||
|
@ -1411,6 +1448,11 @@ if not preconfigured:
|
|||
else:
|
||||
color_print(4,'Not building with cairo support, pass CAIRO=True to enable')
|
||||
|
||||
if not env['HOST'] and env['HAS_CAIRO']:
|
||||
if not conf.CheckCairoHasFreetype():
|
||||
env['SKIPPED_DEPS'].append('cairo')
|
||||
env['HAS_CAIRO'] = False
|
||||
|
||||
if 'python' in env['BINDINGS'] or 'python' in env['REQUESTED_PLUGINS']:
|
||||
if not os.access(env['PYTHON'], os.X_OK):
|
||||
color_print(1,"Cannot run python interpreter at '%s', make sure that you have the permissions to execute it." % env['PYTHON'])
|
||||
|
@ -1608,7 +1650,9 @@ if not preconfigured:
|
|||
if env['DEBUG']:
|
||||
env.Append(CXXFLAGS = common_cxx_flags + '-O0 -fno-inline')
|
||||
else:
|
||||
env.Append(CXXFLAGS = common_cxx_flags + '-O%s -fvisibility-inlines-hidden -fno-strict-aliasing -finline-functions -Wno-inline -Wno-parentheses -Wno-char-subscripts' % (env['OPTIMIZATION']))
|
||||
# TODO - add back -fvisibility-inlines-hidden
|
||||
# https://github.com/mapnik/mapnik/issues/1863
|
||||
env.Append(CXXFLAGS = common_cxx_flags + '-O%s -fno-strict-aliasing -finline-functions -Wno-inline -Wno-parentheses -Wno-char-subscripts' % (env['OPTIMIZATION']))
|
||||
|
||||
if env['DEBUG_UNDEFINED']:
|
||||
env.Append(CXXFLAGS = '-fsanitize=undefined-trap -fsanitize-undefined-trap-on-error -ftrapv -fwrapv')
|
||||
|
@ -1638,7 +1682,7 @@ if not preconfigured:
|
|||
|
||||
# if requested, sort LIBPATH and CPPPATH one last time before saving...
|
||||
if env['PRIORITIZE_LINKING']:
|
||||
conf.prioritize_paths()
|
||||
conf.prioritize_paths(silent=True)
|
||||
|
||||
# finish config stage and pickle results
|
||||
env = conf.Finish()
|
||||
|
@ -1696,15 +1740,11 @@ if not HELP_REQUESTED:
|
|||
p = env['PATH_REMOVE']
|
||||
if p in env['ENV']['PATH']:
|
||||
env['ENV']['PATH'].replace(p,'')
|
||||
def rm_path(set):
|
||||
for i in env[set]:
|
||||
if p in i:
|
||||
env[set].remove(i)
|
||||
rm_path('LIBPATH')
|
||||
rm_path('CPPPATH')
|
||||
rm_path('CXXFLAGS')
|
||||
rm_path('CAIRO_LIBPATHS')
|
||||
rm_path('CAIRO_CPPPATHS')
|
||||
rm_path(p,'LIBPATH',env)
|
||||
rm_path(p,'CPPPATH',env)
|
||||
rm_path(p,'CXXFLAGS',env)
|
||||
rm_path(p,'CAIRO_LIBPATHS',env)
|
||||
rm_path(p,'CAIRO_CPPPATHS',env)
|
||||
|
||||
if env['PATH_REPLACE']:
|
||||
searches,replace = env['PATH_REPLACE'].split(':')
|
||||
|
@ -1727,8 +1767,6 @@ if not HELP_REQUESTED:
|
|||
Export('env')
|
||||
|
||||
plugin_base = env.Clone()
|
||||
if not env['DEBUG']:
|
||||
plugin_base.Append(CXXFLAGS='-fvisibility=hidden')
|
||||
|
||||
Export('plugin_base')
|
||||
|
||||
|
@ -1758,36 +1796,46 @@ if not HELP_REQUESTED:
|
|||
# Build the requested and able-to-be-compiled input plug-ins
|
||||
GDAL_BUILT = False
|
||||
OGR_BUILT = False
|
||||
for plugin in env['REQUESTED_PLUGINS']:
|
||||
details = env['PLUGINS'][plugin]
|
||||
if details['lib'] in env['LIBS']:
|
||||
SConscript('plugins/input/%s/build.py' % plugin)
|
||||
if plugin == 'ogr': OGR_BUILT = True
|
||||
if plugin == 'gdal': GDAL_BUILT = True
|
||||
if plugin == 'ogr' or plugin == 'gdal':
|
||||
if GDAL_BUILT and OGR_BUILT:
|
||||
env['LIBS'].remove(details['lib'])
|
||||
else:
|
||||
env['LIBS'].remove(details['lib'])
|
||||
elif not details['lib']:
|
||||
# build internal shape and raster plugins
|
||||
SConscript('plugins/input/%s/build.py' % plugin)
|
||||
else:
|
||||
color_print(1,"Notice: dependencies not met for plugin '%s', not building..." % plugin)
|
||||
# also clear out locally built target
|
||||
for plugin in env['PLUGINS']:
|
||||
if env['PLUGIN_LINKING'] == 'static' or plugin not in env['REQUESTED_PLUGINS']:
|
||||
if os.path.exists('plugins/input/%s.input' % plugin):
|
||||
os.unlink('plugins/input/%s.input' % plugin)
|
||||
if plugin in env['REQUESTED_PLUGINS']:
|
||||
details = env['PLUGINS'][plugin]
|
||||
if details['lib'] in env['LIBS']:
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
SConscript('plugins/input/%s/build.py' % plugin)
|
||||
if plugin == 'ogr': OGR_BUILT = True
|
||||
if plugin == 'gdal': GDAL_BUILT = True
|
||||
if plugin == 'ogr' or plugin == 'gdal':
|
||||
if GDAL_BUILT and OGR_BUILT:
|
||||
env['LIBS'].remove(details['lib'])
|
||||
else:
|
||||
env['LIBS'].remove(details['lib'])
|
||||
elif not details['lib']:
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
# build internal datasource input plugins
|
||||
SConscript('plugins/input/%s/build.py' % plugin)
|
||||
else:
|
||||
color_print(1,"Notice: dependencies not met for plugin '%s', not building..." % plugin)
|
||||
if os.path.exists('plugins/input/%s.input' % plugin):
|
||||
os.unlink('plugins/input/%s.input' % plugin)
|
||||
|
||||
create_uninstall_target(env, env['MAPNIK_LIB_DIR_DEST'], False)
|
||||
create_uninstall_target(env, env['MAPNIK_INPUT_PLUGINS_DEST'] , False)
|
||||
|
||||
# before installing plugins, wipe out any previously
|
||||
# installed plugins that we are no longer building
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
# if statically linking plugins still make sure
|
||||
# to create the dynamic plugins directory
|
||||
if env['PLUGIN_LINKING'] == 'static':
|
||||
if not os.path.exists(env['MAPNIK_INPUT_PLUGINS_DEST']):
|
||||
os.makedirs(env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# before installing plugins, wipe out any previously
|
||||
# installed plugins that we are no longer building
|
||||
for plugin in PLUGINS.keys():
|
||||
if plugin not in env['REQUESTED_PLUGINS']:
|
||||
plugin_path = os.path.join(env['MAPNIK_INPUT_PLUGINS_DEST'],'%s.input' % plugin)
|
||||
if os.path.exists(plugin_path):
|
||||
plugin_path = os.path.join(env['MAPNIK_INPUT_PLUGINS_DEST'],'%s.input' % plugin)
|
||||
if os.path.exists(plugin_path):
|
||||
if plugin not in env['REQUESTED_PLUGINS'] or env['PLUGIN_LINKING'] == 'static':
|
||||
color_print(3,"Notice: removing out of date plugin: '%s'" % plugin_path)
|
||||
os.unlink(plugin_path)
|
||||
|
||||
|
@ -1827,11 +1875,10 @@ if not HELP_REQUESTED:
|
|||
SConscript('fonts/build.py')
|
||||
|
||||
# build C++ tests
|
||||
if env['CPP_TESTS']:
|
||||
SConscript('tests/cpp_tests/build.py')
|
||||
SConscript('tests/cpp_tests/build.py')
|
||||
|
||||
if env['SVG_RENDERER']:
|
||||
SConscript('tests/cpp_tests/svg_renderer_tests/build.py')
|
||||
if env['CPP_TESTS'] and env['SVG_RENDERER']:
|
||||
SConscript('tests/cpp_tests/svg_renderer_tests/build.py')
|
||||
|
||||
if env['BENCHMARK']:
|
||||
SConscript('benchmark/build.py')
|
||||
|
@ -1845,11 +1892,14 @@ if not HELP_REQUESTED:
|
|||
# if requested, build the sample input plugins
|
||||
if env['SAMPLE_INPUT_PLUGINS']:
|
||||
SConscript('plugins/input/templates/helloworld/build.py')
|
||||
elif 'install' in COMMAND_LINE_TARGETS:
|
||||
plugin_path = os.path.join(env['MAPNIK_INPUT_PLUGINS_DEST'],'hello.input')
|
||||
if os.path.exists(plugin_path):
|
||||
color_print(3,"Notice: removing out of date plugin: '%s'" % plugin_path)
|
||||
os.unlink(plugin_path)
|
||||
else:
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
plugin_path = os.path.join(env['MAPNIK_INPUT_PLUGINS_DEST'],'hello.input')
|
||||
if os.path.exists(plugin_path):
|
||||
color_print(3,"Notice: removing out of date plugin: '%s'" % plugin_path)
|
||||
os.unlink(plugin_path)
|
||||
if os.path.exists('plugins/input/templates/hello.input'):
|
||||
os.unlink('plugins/input/templates/hello.input')
|
||||
|
||||
# update linux project files
|
||||
if env['PLATFORM'] == 'Linux':
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -43,19 +43,22 @@ prefix = env['PREFIX']
|
|||
target_path = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik')
|
||||
target_path_deprecated = os.path.normpath(env['PYTHON_INSTALL_LOCATION'] + os.path.sep + 'mapnik2')
|
||||
|
||||
libraries = ['mapnik',env['BOOST_PYTHON_LIB']]
|
||||
py_env = env.Clone()
|
||||
py_env.Append(CPPPATH = env['PYTHON_INCLUDES'])
|
||||
|
||||
py_env['LIBS'] = ['mapnik',env['BOOST_PYTHON_LIB']]
|
||||
|
||||
# TODO - do solaris/fedora need direct linking too?
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
if not env['PYTHON_DYNAMIC_LOOKUP']:
|
||||
if env['PNG']:
|
||||
libraries.append('png')
|
||||
py_env.AppendUnique(LIBS = 'png')
|
||||
if env['JPEG']:
|
||||
libraries.append('jpeg')
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_regex%s' % env['BOOST_APPEND'])
|
||||
py_env.AppendUnique(LIBS = 'jpeg')
|
||||
py_env.AppendUnique(LIBS = env['ICU_LIB_NAME'])
|
||||
py_env.AppendUnique(LIBS = 'boost_regex%s' % env['BOOST_APPEND'])
|
||||
if env['THREADING'] == 'multi':
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
py_env.AppendUnique(LIBS = 'boost_thread%s' % env['BOOST_APPEND'])
|
||||
|
||||
##### Python linking on OS X is tricky ###
|
||||
# Confounding problems are:
|
||||
|
@ -115,6 +118,9 @@ if env['CUSTOM_LDFLAGS']:
|
|||
else:
|
||||
linkflags = python_link_flag
|
||||
|
||||
if env['LINKING'] == 'static':
|
||||
py_env.AppendUnique(LIBS=env['LIBMAPNIK_LIBS'])
|
||||
|
||||
paths = '''
|
||||
"""Configuration paths of Mapnik fonts and input plugins (auto-generated by SCons)."""
|
||||
|
||||
|
@ -147,9 +153,6 @@ except: pass
|
|||
# install the shared object beside the module directory
|
||||
sources = glob.glob('*.cpp')
|
||||
|
||||
py_env = env.Clone()
|
||||
py_env.Append(CPPPATH = env['PYTHON_INCLUDES'])
|
||||
|
||||
if 'install' in COMMAND_LINE_TARGETS:
|
||||
# install the core mapnik python files, including '__init__.py'
|
||||
init_files = glob.glob('mapnik/*.py')
|
||||
|
@ -177,14 +180,14 @@ if 'uninstall' not in COMMAND_LINE_TARGETS:
|
|||
py_env.Append(CPPPATH = env['CAIRO_CPPPATHS'])
|
||||
py_env.Append(CPPDEFINES = '-DHAVE_CAIRO')
|
||||
if env['PLATFORM'] == 'Darwin':
|
||||
py_env.Append(LIBS=env['CAIRO_LINKFLAGS'])
|
||||
py_env.Append(LIBS=env['CAIRO_ALL_LIBS'])
|
||||
|
||||
if env['HAS_PYCAIRO']:
|
||||
py_env.ParseConfig('pkg-config --cflags pycairo')
|
||||
py_env.Append(CPPDEFINES = '-DHAVE_PYCAIRO')
|
||||
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
_mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LIBS=libraries, LDMODULEPREFIX='', LDMODULESUFFIX='.so',LINKFLAGS=linkflags)
|
||||
py_env.AppendUnique(LIBS = 'boost_thread%s' % env['BOOST_APPEND'])
|
||||
_mapnik = py_env.LoadableModule('mapnik/_mapnik', sources, LDMODULEPREFIX='', LDMODULESUFFIX='.so',LINKFLAGS=linkflags)
|
||||
|
||||
Depends(_mapnik, env.subst('../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
|
|
|
@ -558,24 +558,6 @@ def Osm(**keywords):
|
|||
keywords['type'] = 'osm'
|
||||
return CreateDatasource(keywords)
|
||||
|
||||
def Geos(**keywords):
|
||||
"""Create a GEOS Vector Datasource.
|
||||
|
||||
Required keyword arguments:
|
||||
wkt -- inline WKT text of the geometry
|
||||
|
||||
Optional keyword arguments:
|
||||
extent -- manually specified data extent (comma delimited string, default None)
|
||||
|
||||
>>> from mapnik import Geos, Layer
|
||||
>>> datasource = Geos(wkt='MULTIPOINT(100 100, 50 50, 0 0)')
|
||||
>>> lyr = Layer('GEOS Layer from WKT string')
|
||||
>>> lyr.datasource = datasource
|
||||
|
||||
"""
|
||||
keywords['type'] = 'geos'
|
||||
return CreateDatasource(keywords)
|
||||
|
||||
def Python(**keywords):
|
||||
"""Create a Python Datasource.
|
||||
|
||||
|
|
|
@ -48,14 +48,26 @@ namespace
|
|||
{
|
||||
//user-friendly wrapper that uses Python dictionary
|
||||
using namespace boost::python;
|
||||
boost::shared_ptr<mapnik::datasource> create_datasource(const dict& d)
|
||||
boost::shared_ptr<mapnik::datasource> create_datasource(dict const& d)
|
||||
{
|
||||
mapnik::parameters params;
|
||||
boost::python::list keys=d.keys();
|
||||
for (int i=0; i<len(keys); ++i)
|
||||
for (int i=0; i < len(keys); ++i)
|
||||
{
|
||||
std::string key = extract<std::string>(keys[i]);
|
||||
object obj = d[key];
|
||||
if (PyUnicode_Check(obj.ptr()))
|
||||
{
|
||||
PyObject* temp = PyUnicode_AsUTF8String(obj.ptr());
|
||||
if (temp)
|
||||
{
|
||||
char* c_str = PyString_AsString(temp);
|
||||
params[key] = std::string(c_str);
|
||||
Py_DecRef(temp);
|
||||
}
|
||||
continue;
|
||||
}
|
||||
|
||||
extract<std::string> ex0(obj);
|
||||
extract<mapnik::value_integer> ex1(obj);
|
||||
extract<double> ex2(obj);
|
||||
|
|
42
bindings/python/mapnik_debug_symbolizer.cpp
Normal file
42
bindings/python/mapnik_debug_symbolizer.cpp
Normal file
|
@ -0,0 +1,42 @@
|
|||
/*****************************************************************************
|
||||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2013 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
|
||||
*
|
||||
*****************************************************************************/
|
||||
|
||||
#include <boost/python.hpp>
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include <mapnik/debug_symbolizer.hpp>
|
||||
|
||||
void export_debug_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
||||
mapnik::enumeration_<mapnik::debug_symbolizer_mode_e>("debug_symbolizer_mode")
|
||||
.value("COLLISION",mapnik::DEBUG_SYM_MODE_COLLISION)
|
||||
.value("VERTEX",mapnik::DEBUG_SYM_MODE_VERTEX)
|
||||
;
|
||||
|
||||
class_<mapnik::debug_symbolizer>("DebugSymbolizer",
|
||||
init<>("Default debug Symbolizer"))
|
||||
.add_property("mode",
|
||||
&mapnik::debug_symbolizer::get_mode,
|
||||
&mapnik::debug_symbolizer::set_mode)
|
||||
;
|
||||
}
|
|
@ -34,8 +34,6 @@
|
|||
#include <mapnik/parse_path.hpp>
|
||||
#include <mapnik/value.hpp>
|
||||
|
||||
|
||||
using mapnik::Feature;
|
||||
using mapnik::expression_ptr;
|
||||
using mapnik::parse_expression;
|
||||
using mapnik::to_expression_string;
|
||||
|
@ -53,15 +51,15 @@ std::string expression_to_string_(mapnik::expr_node const& expr)
|
|||
return mapnik::to_expression_string(expr);
|
||||
}
|
||||
|
||||
mapnik::value expression_evaluate_(mapnik::expr_node const& expr, mapnik::Feature const& f)
|
||||
mapnik::value expression_evaluate_(mapnik::expr_node const& expr, mapnik::feature_impl const& f)
|
||||
{
|
||||
// will be auto-converted to proper python type by `mapnik_value_to_python`
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::Feature,mapnik::value>(f),expr);
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value>(f),expr);
|
||||
}
|
||||
|
||||
bool expression_evaluate_to_bool_(mapnik::expr_node const& expr, mapnik::Feature const& f)
|
||||
bool expression_evaluate_to_bool_(mapnik::expr_node const& expr, mapnik::feature_impl const& f)
|
||||
{
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::Feature,mapnik::value>(f),expr).to_bool();
|
||||
return boost::apply_visitor(mapnik::evaluate<mapnik::feature_impl,mapnik::value>(f),expr).to_bool();
|
||||
}
|
||||
|
||||
// path expression
|
||||
|
@ -75,7 +73,7 @@ std::string path_to_string_(mapnik::path_expression const& expr)
|
|||
return mapnik::path_processor_type::to_string(expr);
|
||||
}
|
||||
|
||||
std::string path_evaluate_(mapnik::path_expression const& expr, mapnik::Feature const& f)
|
||||
std::string path_evaluate_(mapnik::path_expression const& expr, mapnik::feature_impl const& f)
|
||||
{
|
||||
return mapnik::path_processor_type::evaluate(expr, f);
|
||||
}
|
||||
|
|
|
@ -41,28 +41,27 @@
|
|||
|
||||
namespace {
|
||||
|
||||
using mapnik::Feature;
|
||||
using mapnik::geometry_utils;
|
||||
using mapnik::from_wkt;
|
||||
using mapnik::context_type;
|
||||
using mapnik::context_ptr;
|
||||
using mapnik::feature_kv_iterator;
|
||||
|
||||
mapnik::geometry_type const& (mapnik::Feature::*get_geometry_by_const_ref)(unsigned) const = &mapnik::Feature::get_geometry;
|
||||
boost::ptr_vector<mapnik::geometry_type> const& (mapnik::Feature::*get_paths_by_const_ref)() const = &mapnik::Feature::paths;
|
||||
mapnik::geometry_type const& (mapnik::feature_impl::*get_geometry_by_const_ref)(unsigned) const = &mapnik::feature_impl::get_geometry;
|
||||
boost::ptr_vector<mapnik::geometry_type> const& (mapnik::feature_impl::*get_paths_by_const_ref)() const = &mapnik::feature_impl::paths;
|
||||
|
||||
void feature_add_geometries_from_wkb(Feature &feature, std::string wkb)
|
||||
void feature_add_geometries_from_wkb(mapnik::feature_impl &feature, std::string wkb)
|
||||
{
|
||||
geometry_utils::from_wkb(feature.paths(), wkb.c_str(), wkb.size());
|
||||
}
|
||||
|
||||
void feature_add_geometries_from_wkt(Feature &feature, std::string wkt)
|
||||
void feature_add_geometries_from_wkt(mapnik::feature_impl &feature, std::string wkt)
|
||||
{
|
||||
bool result = mapnik::from_wkt(wkt, feature.paths());
|
||||
if (!result) throw std::runtime_error("Failed to parse WKT");
|
||||
}
|
||||
|
||||
std::string feature_to_geojson(Feature const& feature)
|
||||
std::string feature_to_geojson(mapnik::feature_impl const& feature)
|
||||
{
|
||||
std::string json;
|
||||
mapnik::json::feature_generator g;
|
||||
|
@ -73,22 +72,22 @@ std::string feature_to_geojson(Feature const& feature)
|
|||
return json;
|
||||
}
|
||||
|
||||
mapnik::value __getitem__(Feature const& feature, std::string const& name)
|
||||
mapnik::value __getitem__(mapnik::feature_impl const& feature, std::string const& name)
|
||||
{
|
||||
return feature.get(name);
|
||||
}
|
||||
|
||||
mapnik::value __getitem2__(Feature const& feature, std::size_t index)
|
||||
mapnik::value __getitem2__(mapnik::feature_impl const& feature, std::size_t index)
|
||||
{
|
||||
return feature.get(index);
|
||||
}
|
||||
|
||||
void __setitem__(Feature & feature, std::string const& name, mapnik::value const& val)
|
||||
void __setitem__(mapnik::feature_impl & feature, std::string const& name, mapnik::value const& val)
|
||||
{
|
||||
feature.put_new(name,val);
|
||||
}
|
||||
|
||||
boost::python::dict attributes(Feature const& f)
|
||||
boost::python::dict attributes(mapnik::feature_impl const& f)
|
||||
{
|
||||
boost::python::dict attributes;
|
||||
feature_kv_iterator itr = f.begin();
|
||||
|
@ -191,7 +190,6 @@ struct value_null_from_python
|
|||
void export_feature()
|
||||
{
|
||||
using namespace boost::python;
|
||||
using mapnik::Feature;
|
||||
|
||||
// Python to mapnik::value converters
|
||||
// NOTE: order matters here. For example value_null must be listed before
|
||||
|
@ -211,25 +209,25 @@ void export_feature()
|
|||
.def("push", &context_type::push)
|
||||
;
|
||||
|
||||
class_<Feature,boost::shared_ptr<Feature>,
|
||||
class_<mapnik::feature_impl,boost::shared_ptr<mapnik::feature_impl>,
|
||||
boost::noncopyable>("Feature",init<context_ptr,mapnik::value_integer>("Default ctor."))
|
||||
.def("id",&Feature::id)
|
||||
.def("__str__",&Feature::to_string)
|
||||
.def("id",&mapnik::feature_impl::id)
|
||||
.def("__str__",&mapnik::feature_impl::to_string)
|
||||
.def("add_geometries_from_wkb", &feature_add_geometries_from_wkb)
|
||||
.def("add_geometries_from_wkt", &feature_add_geometries_from_wkt)
|
||||
.def("add_geometry", &Feature::add_geometry)
|
||||
.def("num_geometries",&Feature::num_geometries)
|
||||
.def("add_geometry", &mapnik::feature_impl::add_geometry)
|
||||
.def("num_geometries",&mapnik::feature_impl::num_geometries)
|
||||
.def("get_geometry", make_function(get_geometry_by_const_ref,return_value_policy<reference_existing_object>()))
|
||||
.def("geometries",make_function(get_paths_by_const_ref,return_value_policy<reference_existing_object>()))
|
||||
.def("envelope", &Feature::envelope)
|
||||
.def("has_key", &Feature::has_key)
|
||||
.def("envelope", &mapnik::feature_impl::envelope)
|
||||
.def("has_key", &mapnik::feature_impl::has_key)
|
||||
.add_property("attributes",&attributes)
|
||||
.def("__setitem__",&__setitem__)
|
||||
.def("__contains__",&__getitem__)
|
||||
.def("__getitem__",&__getitem__)
|
||||
.def("__getitem__",&__getitem2__)
|
||||
.def("__len__", &Feature::size)
|
||||
.def("context",&Feature::context)
|
||||
.def("__len__", &mapnik::feature_impl::size)
|
||||
.def("context",&mapnik::feature_impl::context)
|
||||
.def("to_geojson",&feature_to_geojson)
|
||||
;
|
||||
}
|
||||
|
|
|
@ -65,10 +65,7 @@ inline mapnik::feature_ptr next(mapnik::featureset_ptr const& itr)
|
|||
void export_featureset()
|
||||
{
|
||||
using namespace boost::python;
|
||||
using mapnik::Feature;
|
||||
using mapnik::Featureset;
|
||||
|
||||
class_<Featureset,boost::shared_ptr<Featureset>,
|
||||
class_<mapnik::Featureset,boost::shared_ptr<mapnik::Featureset>,
|
||||
boost::noncopyable>("Featureset",no_init)
|
||||
.def("__iter__",pass_through)
|
||||
.def("next",next)
|
||||
|
|
|
@ -30,6 +30,8 @@
|
|||
#include <mapnik/parse_path.hpp>
|
||||
#include "mapnik_svg.hpp"
|
||||
#include "mapnik_enumeration.hpp"
|
||||
#include "python_optional.hpp"
|
||||
|
||||
#include <mapnik/marker_cache.hpp> // for known_svg_prefix_
|
||||
|
||||
using mapnik::markers_symbolizer;
|
||||
|
@ -70,16 +72,6 @@ void set_marker_type(mapnik::markers_symbolizer & symbolizer, std::string const&
|
|||
|
||||
}
|
||||
|
||||
|
||||
// https://github.com/mapnik/mapnik/issues/1367
|
||||
PyObject* get_fill_opacity_impl(markers_symbolizer & sym)
|
||||
{
|
||||
boost::optional<float> fill_opacity = sym.get_fill_opacity();
|
||||
if (fill_opacity)
|
||||
return ::PyFloat_FromDouble(*fill_opacity);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
void export_markers_symbolizer()
|
||||
{
|
||||
using namespace boost::python;
|
||||
|
@ -119,7 +111,7 @@ void export_markers_symbolizer()
|
|||
&markers_symbolizer::set_opacity,
|
||||
"Set/get the overall opacity")
|
||||
.add_property("fill_opacity",
|
||||
&get_fill_opacity_impl,
|
||||
&markers_symbolizer::get_fill_opacity,
|
||||
&markers_symbolizer::set_fill_opacity,
|
||||
"Set/get the fill opacity")
|
||||
.add_property("ignore_placement",
|
||||
|
|
|
@ -62,6 +62,7 @@ void export_polygon_pattern_symbolizer();
|
|||
void export_raster_symbolizer();
|
||||
void export_text_placement();
|
||||
void export_shield_symbolizer();
|
||||
void export_debug_symbolizer();
|
||||
void export_font_engine();
|
||||
void export_projection();
|
||||
void export_proj_transform();
|
||||
|
@ -84,7 +85,6 @@ void export_logger();
|
|||
#include <mapnik/rule.hpp>
|
||||
#include <mapnik/image_util.hpp>
|
||||
#include <mapnik/load_map.hpp>
|
||||
#include <mapnik/config_error.hpp>
|
||||
#include <mapnik/scale_denominator.hpp>
|
||||
#include <mapnik/value_error.hpp>
|
||||
#include <mapnik/save_map.hpp>
|
||||
|
@ -333,11 +333,6 @@ double scale_denominator(mapnik::Map const &map, bool geographic)
|
|||
}
|
||||
|
||||
// http://docs.python.org/c-api/exceptions.html#standard-exceptions
|
||||
void config_error_translator(mapnik::config_error const & ex)
|
||||
{
|
||||
PyErr_SetString(PyExc_RuntimeError, ex.what());
|
||||
}
|
||||
|
||||
void value_error_translator(mapnik::value_error const & ex)
|
||||
{
|
||||
PyErr_SetString(PyExc_ValueError, ex.what());
|
||||
|
@ -433,7 +428,6 @@ BOOST_PYTHON_MODULE(_mapnik)
|
|||
|
||||
register_exception_translator<std::exception>(&standard_error_translator);
|
||||
register_exception_translator<std::out_of_range>(&out_of_range_error_translator);
|
||||
register_exception_translator<mapnik::config_error>(&config_error_translator);
|
||||
register_exception_translator<mapnik::value_error>(&value_error_translator);
|
||||
register_exception_translator<std::runtime_error>(&runtime_error_translator);
|
||||
register_cairo();
|
||||
|
@ -470,6 +464,7 @@ BOOST_PYTHON_MODULE(_mapnik)
|
|||
export_raster_symbolizer();
|
||||
export_text_placement();
|
||||
export_shield_symbolizer();
|
||||
export_debug_symbolizer();
|
||||
export_font_engine();
|
||||
export_projection();
|
||||
export_proj_transform();
|
||||
|
|
|
@ -28,18 +28,7 @@
|
|||
#include <mapnik/raster_colorizer.hpp>
|
||||
#include <mapnik/image_scaling.hpp>
|
||||
|
||||
namespace {
|
||||
|
||||
// https://github.com/mapnik/mapnik/issues/1367
|
||||
PyObject* get_premultiplied_impl(mapnik::raster_symbolizer & sym)
|
||||
{
|
||||
boost::optional<bool> premultiplied = sym.premultiplied();
|
||||
if (premultiplied)
|
||||
return ::PyBool_FromLong(*premultiplied);
|
||||
Py_RETURN_NONE;
|
||||
}
|
||||
|
||||
}
|
||||
using mapnik::raster_symbolizer;
|
||||
|
||||
void export_raster_symbolizer()
|
||||
|
@ -132,7 +121,7 @@ void export_raster_symbolizer()
|
|||
">>> r.mesh_size = 32\n"
|
||||
)
|
||||
.add_property("premultiplied",
|
||||
&get_premultiplied_impl,
|
||||
&raster_symbolizer::premultiplied,
|
||||
&raster_symbolizer::set_premultiplied,
|
||||
"Get/Set premultiplied status of the source image.\n"
|
||||
"Can be used to override what the source data reports (when in error)\n"
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
using mapnik::rule;
|
||||
using mapnik::expr_node;
|
||||
using mapnik::expression_ptr;
|
||||
using mapnik::Feature;
|
||||
using mapnik::point_symbolizer;
|
||||
using mapnik::line_symbolizer;
|
||||
using mapnik::line_pattern_symbolizer;
|
||||
|
|
|
@ -84,7 +84,7 @@ struct NodeWrap: formatting::node, wrapper<formatting::node>
|
|||
|
||||
}
|
||||
|
||||
void apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
python_block_auto_unblock b;
|
||||
this->get_override("apply")(ptr(&p), ptr(&feature), ptr(&output));
|
||||
|
@ -122,7 +122,7 @@ struct TextNodeWrap: formatting::text_node, wrapper<formatting::text_node>
|
|||
|
||||
}
|
||||
|
||||
virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
if(override o = this->get_override("apply"))
|
||||
{
|
||||
|
@ -135,7 +135,7 @@ struct TextNodeWrap: formatting::text_node, wrapper<formatting::text_node>
|
|||
}
|
||||
}
|
||||
|
||||
void default_apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
formatting::text_node::apply(p, feature, output);
|
||||
}
|
||||
|
@ -143,7 +143,7 @@ struct TextNodeWrap: formatting::text_node, wrapper<formatting::text_node>
|
|||
|
||||
struct FormatNodeWrap: formatting::format_node, wrapper<formatting::format_node>
|
||||
{
|
||||
virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
if(override o = this->get_override("apply"))
|
||||
{
|
||||
|
@ -156,7 +156,7 @@ struct FormatNodeWrap: formatting::format_node, wrapper<formatting::format_node>
|
|||
}
|
||||
}
|
||||
|
||||
void default_apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
formatting::format_node::apply(p, feature, output);
|
||||
}
|
||||
|
@ -164,7 +164,7 @@ struct FormatNodeWrap: formatting::format_node, wrapper<formatting::format_node>
|
|||
|
||||
struct ExprFormatWrap: formatting::expression_format, wrapper<formatting::expression_format>
|
||||
{
|
||||
virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
if(override o = this->get_override("apply"))
|
||||
{
|
||||
|
@ -177,7 +177,7 @@ struct ExprFormatWrap: formatting::expression_format, wrapper<formatting::expres
|
|||
}
|
||||
}
|
||||
|
||||
void default_apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
formatting::expression_format::apply(p, feature, output);
|
||||
}
|
||||
|
@ -201,7 +201,7 @@ struct ListNodeWrap: formatting::list_node, wrapper<formatting::list_node>
|
|||
http://wiki.python.org/moin/boost.python/HowTo#A.22Raw.22_function */
|
||||
|
||||
|
||||
virtual void apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
virtual void apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
if(override o = this->get_override("apply"))
|
||||
{
|
||||
|
@ -214,7 +214,7 @@ struct ListNodeWrap: formatting::list_node, wrapper<formatting::list_node>
|
|||
}
|
||||
}
|
||||
|
||||
void default_apply(char_properties const& p, Feature const& feature, processed_text &output) const
|
||||
void default_apply(char_properties const& p, feature_impl const& feature, processed_text &output) const
|
||||
{
|
||||
formatting::list_node::apply(p, feature, output);
|
||||
}
|
||||
|
|
|
@ -22,7 +22,8 @@
|
|||
|
||||
#include <boost/optional/optional.hpp>
|
||||
#include <boost/python.hpp>
|
||||
#include <boost/noncopyable.hpp>
|
||||
|
||||
#include <mapnik/noncopyable.hpp>
|
||||
|
||||
// boost::optional<T> to/from converter from John Wiegley
|
||||
|
||||
|
@ -46,7 +47,7 @@ struct register_python_conversion
|
|||
};
|
||||
|
||||
template <typename T>
|
||||
struct python_optional : public boost::noncopyable
|
||||
struct python_optional : public mapnik::noncopyable
|
||||
{
|
||||
struct optional_to_python
|
||||
{
|
||||
|
@ -74,7 +75,7 @@ struct python_optional : public boost::noncopyable
|
|||
rvalue_from_python_stage1(source, converters);
|
||||
return rvalue_from_python_stage2(source, data, converters);
|
||||
}
|
||||
return NULL;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void construct(PyObject * source,
|
||||
|
@ -94,17 +95,116 @@ struct python_optional : public boost::noncopyable
|
|||
}
|
||||
};
|
||||
|
||||
explicit python_optional() {
|
||||
explicit python_optional()
|
||||
{
|
||||
register_python_conversion<boost::optional<T>,
|
||||
optional_to_python, optional_from_python>();
|
||||
}
|
||||
};
|
||||
|
||||
/** This class works around a bug in boost python.
|
||||
// to/from boost::optional<bool>
|
||||
template <>
|
||||
struct python_optional<float> : public mapnik::noncopyable
|
||||
{
|
||||
struct optional_to_python
|
||||
{
|
||||
static PyObject * convert(const boost::optional<float>& value)
|
||||
{
|
||||
return (value ? PyFloat_FromDouble(*value) :
|
||||
boost::python::detail::none());
|
||||
}
|
||||
};
|
||||
|
||||
See http://osdir.com/ml/python.c++/2003-11/msg00158.html
|
||||
*/
|
||||
template <typename T, typename X1 = boost::python::detail::not_specified, typename X2 = boost::python::detail::not_specified, typename X3 = boost::python::detail::not_specified>
|
||||
struct optional_from_python
|
||||
{
|
||||
static void * convertible(PyObject * source)
|
||||
{
|
||||
using namespace boost::python::converter;
|
||||
|
||||
if (source == Py_None || PyFloat_Check(source))
|
||||
return source;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void construct(PyObject * source,
|
||||
boost::python::converter::rvalue_from_python_stage1_data * data)
|
||||
{
|
||||
using namespace boost::python::converter;
|
||||
void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *)
|
||||
data)->storage.bytes;
|
||||
if (source == Py_None) // == None
|
||||
new (storage) boost::optional<float>(); // A Boost uninitialized value
|
||||
else
|
||||
new (storage) boost::optional<float>(PyFloat_AsDouble(source));
|
||||
data->convertible = storage;
|
||||
}
|
||||
};
|
||||
|
||||
explicit python_optional()
|
||||
{
|
||||
register_python_conversion<boost::optional<float>,
|
||||
optional_to_python, optional_from_python>();
|
||||
}
|
||||
};
|
||||
|
||||
// to/from boost::optional<float>
|
||||
template <>
|
||||
struct python_optional<bool> : public mapnik::noncopyable
|
||||
{
|
||||
struct optional_to_python
|
||||
{
|
||||
static PyObject * convert(const boost::optional<bool>& value)
|
||||
{
|
||||
if (value)
|
||||
{
|
||||
if (*value) Py_RETURN_TRUE;
|
||||
else Py_RETURN_FALSE;
|
||||
}
|
||||
else return boost::python::detail::none();
|
||||
}
|
||||
};
|
||||
struct optional_from_python
|
||||
{
|
||||
static void * convertible(PyObject * source)
|
||||
{
|
||||
using namespace boost::python::converter;
|
||||
|
||||
if (source == Py_None || PyBool_Check(source))
|
||||
return source;
|
||||
return 0;
|
||||
}
|
||||
|
||||
static void construct(PyObject * source,
|
||||
boost::python::converter::rvalue_from_python_stage1_data * data)
|
||||
{
|
||||
using namespace boost::python::converter;
|
||||
void * const storage = ((rvalue_from_python_storage<boost::optional<bool> > *)
|
||||
data)->storage.bytes;
|
||||
if (source == Py_None) // == None
|
||||
new (storage) boost::optional<bool>(); // A Boost uninitialized value
|
||||
else
|
||||
{
|
||||
new (storage) boost::optional<bool>(source == Py_True ? true : false);
|
||||
}
|
||||
data->convertible = storage;
|
||||
}
|
||||
};
|
||||
|
||||
explicit python_optional()
|
||||
{
|
||||
register_python_conversion<boost::optional<bool>,
|
||||
optional_to_python, optional_from_python>();
|
||||
}
|
||||
};
|
||||
|
||||
|
||||
// This class works around a feature in boost python.
|
||||
// See http://osdir.com/ml/python.c++/2003-11/msg00158.html
|
||||
|
||||
template <typename T,
|
||||
typename X1 = boost::python::detail::not_specified,
|
||||
typename X2 = boost::python::detail::not_specified,
|
||||
typename X3 = boost::python::detail::not_specified>
|
||||
class class_with_converter : public boost::python::class_<T, X1, X2, X3>
|
||||
{
|
||||
public:
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
CXXFLAGS = $(shell mapnik-config --cflags)
|
||||
CXXFLAGS = $(shell mapnik-config --includes --defines --cxxflags --dep-includes)
|
||||
LDFLAGS = $(shell mapnik-config --libs --dep-libs --ldflags)
|
||||
|
||||
OBJ = rundemo.o
|
||||
|
@ -13,8 +13,15 @@ $(BIN) : $(OBJ)
|
|||
.c.o :
|
||||
$(CXX) -c $(CXXFLAGS) $<
|
||||
|
||||
gyp:
|
||||
rm -rf ./build
|
||||
gyp rundemo.gyp --depth=. -f make --generator-output=./build/
|
||||
make -C ./build
|
||||
build/out/Release/rundemo `mapnik-config --prefix`
|
||||
|
||||
.PHONY : clean
|
||||
|
||||
clean:
|
||||
rm -f $(OBJ)
|
||||
rm -f $(BIN)
|
||||
rm -f ./build
|
81
demo/c++/README.md
Normal file
81
demo/c++/README.md
Normal file
|
@ -0,0 +1,81 @@
|
|||
## rundemo.cpp
|
||||
|
||||
This directory contains a simple c++ program demonstrating the Mapnik C++ API. It mimics the python 'rundemo.py' example with a couple exceptions.
|
||||
|
||||
If building on unix you can have this program automatically build by configuring Mapnik like:
|
||||
|
||||
./configure DEMO=True
|
||||
|
||||
However, this example code also should be able to be built standalone.
|
||||
|
||||
The following notes describe how to do that on various operating systems.
|
||||
|
||||
## Depends
|
||||
|
||||
- Mapnik library development headers
|
||||
- `mapnik-config` on unix and `mapnik-config.bat` on windows
|
||||
|
||||
### Unix
|
||||
|
||||
On OS X and Linux you also need `make`.
|
||||
|
||||
### Windows
|
||||
|
||||
On windows, additional dependencies to build are:
|
||||
|
||||
- MSVS 2010 with C++ compiler
|
||||
- Python 2.x
|
||||
- gyp: https://code.google.com/p/gyp | https://github.com/springmeyer/hello-gyp
|
||||
|
||||
`mapnik-config.bat` should come with your Mapnik installation.
|
||||
|
||||
First confirm it is on your path:
|
||||
|
||||
mapnik-config # should give usage
|
||||
|
||||
To install gyp, which is pure python do:
|
||||
|
||||
svn checkout http://gyp.googlecode.com/svn/trunk/ gyp
|
||||
cd gyp
|
||||
python setup.py install
|
||||
|
||||
If you do not have svn installed you can grab gyp from:
|
||||
|
||||
https://github.com/TooTallNate/node-gyp/archive/master.zip
|
||||
# unzip and extract the 'gyp' subfolder then do
|
||||
cd gyp
|
||||
python setup.py install
|
||||
|
||||
## Building the demo
|
||||
|
||||
### Unix
|
||||
|
||||
Simply type:
|
||||
|
||||
make
|
||||
|
||||
Then to run do:
|
||||
|
||||
./rundemo `mapnik-config --prefix`
|
||||
|
||||
On OS X you can also create an xcode project:
|
||||
|
||||
gyp rundemo.gyp --depth=. -f xcode --generator-output=./build/
|
||||
xcodebuild -project ./build/rundemo.xcodeproj
|
||||
./build/out/Release/rundemo `mapnik-config --prefix`
|
||||
|
||||
|
||||
### Windows
|
||||
|
||||
First you need to build the visual studio solution with gyp:
|
||||
|
||||
C:\Python27\python.exe c:\Python27\Scripts\gyp rundemo.gyp --depth=. -f msvs -G msvs_version=2010
|
||||
|
||||
Then you can compile with `msbuild`:
|
||||
|
||||
msbuild rundemo.sln /p:Configuration="Release" /p:Platform=Win32
|
||||
|
||||
Then run it!
|
||||
|
||||
for /f %i in ('mapnik-config --prefix') do set MAPNIK_PREFIX=%i
|
||||
Release\rundemo.exe %MAPNIK_PREFIX%
|
42
demo/c++/common.gypi
Normal file
42
demo/c++/common.gypi
Normal file
|
@ -0,0 +1,42 @@
|
|||
{
|
||||
'variables': {
|
||||
'conditions': [
|
||||
['OS == "mac"', {
|
||||
'target_arch%': 'x64'
|
||||
}, {
|
||||
'target_arch%': 'ia32'
|
||||
}]
|
||||
]
|
||||
},
|
||||
'target_defaults': {
|
||||
'default_configuration': 'Release',
|
||||
'defines': [ ],
|
||||
'conditions': [
|
||||
['OS == "mac"', {
|
||||
'defines': [ 'DARWIN' ]
|
||||
}, {
|
||||
'defines': [ 'LINUX' ]
|
||||
}],
|
||||
['OS == "mac" and target_arch == "x64"', {
|
||||
'xcode_settings': {
|
||||
'ARCHS': [ 'x86_64' ]
|
||||
},
|
||||
}]
|
||||
],
|
||||
'configurations': {
|
||||
'Debug': {
|
||||
'cflags': [ '-g', '-O0' ],
|
||||
'xcode_settings': {
|
||||
'OTHER_CFLAGS': [ '-g', '-O0' ]
|
||||
}
|
||||
},
|
||||
'Release': {
|
||||
'cflags': [ '-O3' ],
|
||||
'defines': [ 'NDEBUG' ],
|
||||
'xcode_settings': {
|
||||
'OTHER_CFLAGS': [ '-O3' ]
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
|
@ -1,20 +0,0 @@
|
|||
This directory contains a simple c++ program demonstrating the Mapnik C++ API. It mimics the python 'rundemo.py' example with a couple exceptions.
|
||||
|
||||
To build it re-configure SCons with DEMO=True then rebuild::
|
||||
|
||||
$ python scons/scons.py configure DEMO=True
|
||||
$ python scons/scons.py
|
||||
|
||||
|
||||
The sample program will be compiled (but not installed).
|
||||
|
||||
|
||||
To run::
|
||||
|
||||
$ cd demo/c++
|
||||
$ ./rundemo /usr/local/lib/mapnik
|
||||
|
||||
For more detailed comments have a look in demo/python/rundemo.py
|
||||
|
||||
Have fun!
|
||||
Artem.
|
48
demo/c++/rundemo.gyp
Normal file
48
demo/c++/rundemo.gyp
Normal file
|
@ -0,0 +1,48 @@
|
|||
{
|
||||
'includes': [ 'common.gypi' ],
|
||||
'default_configuration': 'Release',
|
||||
'targets': [
|
||||
{
|
||||
'target_name': 'rundemo',
|
||||
'type': 'executable',
|
||||
'sources': [
|
||||
'rundemo.cpp',
|
||||
],
|
||||
'conditions': [
|
||||
[ 'OS=="mac"', {
|
||||
'libraries': [
|
||||
'-lmapnik',
|
||||
'-undefined dynamic_lookup'
|
||||
],
|
||||
'xcode_settings': {
|
||||
'OTHER_CPLUSPLUSFLAGS':[
|
||||
'<!@(mapnik-config --cflags)'
|
||||
],
|
||||
'GCC_ENABLE_CPP_RTTI': 'YES',
|
||||
'GCC_ENABLE_CPP_EXCEPTIONS': 'YES'
|
||||
}
|
||||
}],
|
||||
[ 'OS=="win"', {
|
||||
'defines': [
|
||||
'<!@(mapnik-config --defines)',
|
||||
],
|
||||
'libraries': [
|
||||
'<!@(mapnik-config --libs)',
|
||||
'<!@(mapnik-config --dep-libs)'
|
||||
],
|
||||
'include_dirs': [
|
||||
'<!@(mapnik-config --includes)',
|
||||
'<!@(mapnik-config --dep-includes)',
|
||||
],
|
||||
'msvs_settings': {
|
||||
'VCLinkerTool': {
|
||||
'AdditionalLibraryDirectories': [
|
||||
'<!@(mapnik-config --ldflags)'
|
||||
]
|
||||
}
|
||||
}
|
||||
}]
|
||||
]
|
||||
}
|
||||
],
|
||||
}
|
|
@ -1,25 +0,0 @@
|
|||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>charplacement</Name>
|
||||
<ElementPath>charplacement</ElementPath>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>1</FeatureCount>
|
||||
<ExtentXMin>1.00000</ExtentXMin>
|
||||
<ExtentXMax>2.00000</ExtentXMax>
|
||||
<ExtentYMin>1.00000</ExtentYMin>
|
||||
<ExtentYMax>5.00000</ExtentYMax>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>NAME</Name>
|
||||
<ElementPath>NAME</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>CLASS</Name>
|
||||
<ElementPath>CLASS</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
|
@ -1,99 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="charplacement.xsd"
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy>
|
||||
<gml:Box>
|
||||
<gml:coord><gml:X>0</gml:X><gml:Y>0</gml:Y></gml:coord>
|
||||
<gml:coord><gml:X>13</gml:X><gml:Y>-13</gml:Y></gml:coord>
|
||||
</gml:Box>
|
||||
</gml:boundedBy>
|
||||
<gml:featureMember>
|
||||
|
||||
<ogr:charplacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>2,-1 1,-3 2,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>TRIANGLE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F1">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>3,-1 4,-3 3,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>TRIANGLE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F7">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-12 13,-12
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F8">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-13 2,-13 5,-13 10,-13 13,-13
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F9">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>6,-1 5,-3 5,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F10">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-1 8,-3 8,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F11">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>5,-6 5,-8 6,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F12">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-6 8,-8 7,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F13">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>10.055915,-1.00031738281 10.6649858,-1.077712483 11.274056,-1.26950068 11.77921,-1.55298308 12.191993,-1.92815928 12.51529,-2.369132 12.746218,-2.8329032 12.884774,-3.2968745 12.930959,-3.875339</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
<ogr:charplacement fid="F14">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>10.0555,-8.875339 10.6645708,-8.7979439 11.273641,-8.6061557 11.778795,-8.3226733 12.191578,-7.9474971 12.514875,-7.5065244 12.745803,-7.0427532 12.884359,-6.5787819 12.930544,-6.0003174</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F15">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9.055915,-2.00031738281 9.6649858,-2.077712483 10.274056,-2.26950068 10.77921,-2.55298308 11.191993,-2.92815928 11.51529,-3.369132 11.746218,-3.8329032 11.884774,-4.2968745 11.930959,-4.875339
|
||||
11.930544,-5.0003174 11.884359,-5.5787819 11.745803,-6.0427532 11.514875,-6.5065244 11.191578,-6.9474971 10.778795,-7.3226733 10.273641,-7.6061557 9.6645708,-7.7979439 9.0555,-7.875339
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F16">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9.0435048,-10.5550195 9.480786,-10.2191668 9.963148,-10.0731439 10.540222,-10.2495527 10.968444,-10.525815 11.419238,-10.8336443 12.01882,-10.9565825 12.559787,-10.7996079 12.956495,-10.4089966
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>SQUIGGLE</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
<ogr:charplacement fid="F16">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-9 1.4,-10 1.8,-9 2.2,-10 2.6,-9 3.0,-10 3.4,-9 3.8,-10 4.2,-9 4.6,-10
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long ZigZag Road Name</ogr:NAME>
|
||||
<ogr:CLASS>ZIGZAG</ogr:CLASS>
|
||||
</ogr:charplacement>
|
||||
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
|
||||
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengeospatial.net/gml/2.1.2/feature.xsd"/><xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
|
||||
<xs:complexType name="FeatureCollectionType">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureCollectionType">
|
||||
<xs:attribute name="lockId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="scope" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
<xs:element name="charplacement" type="ogr:charplacement_Type" substitutionGroup="gml:_Feature"/>
|
||||
<xs:complexType name="charplacement_Type">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence>
|
||||
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="NAME" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CLASS" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
|
@ -1,25 +0,0 @@
|
|||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>displacement</Name>
|
||||
<ElementPath>displacement</ElementPath>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>1</FeatureCount>
|
||||
<ExtentXMin>1.00000</ExtentXMin>
|
||||
<ExtentXMax>2.00000</ExtentXMax>
|
||||
<ExtentYMin>1.00000</ExtentYMin>
|
||||
<ExtentYMax>5.00000</ExtentYMax>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>NAME</Name>
|
||||
<ElementPath>NAME</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>CLASS</Name>
|
||||
<ElementPath>CLASS</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
|
@ -1,173 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="displacement.xsd"
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy>
|
||||
<gml:Box>
|
||||
<gml:coord><gml:X>0</gml:X><gml:Y>0</gml:Y></gml:coord>
|
||||
<gml:coord><gml:X>13</gml:X><gml:Y>-13</gml:Y></gml:coord>
|
||||
</gml:Box>
|
||||
</gml:boundedBy>
|
||||
<gml:featureMember>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-3 1,-2</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-2 2,-1</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>2,-1 3,-1</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>3,-1 4,-2</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>4,-2 4,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>4,-3 3,-4</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>3,-4 2,-4</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>2,-4 1,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>CLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>5,-3 6,-4</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>6,-4 7,-4</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-4 8,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-3 8,-2</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-2 7,-1</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-1 6,-1</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>6,-1 5,-2</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>5,-2 5,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road</ogr:NAME>
|
||||
<ogr:CLASS>ANTICLOCKWISE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-6.5 2,-5.5 3,-5 4,-5 5,-5.5 6,-6.5
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name To Go Around The Whole Curve!</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-7 2,-8 3,-8.5 4,-8.5 5,-8 6,-7
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name To Go Around The Whole Curve!</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
3,-8.5 2,-9.5 1.5,-10.5 1.5,-11.5 2,-12.5 3,-13.5
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name To Go Around The Whole Curve!</ogr:NAME>
|
||||
<ogr:CLASS>VERTCURVE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
4,-8.5 5,-9.5 5.5,-10.5 5.5,-11.5 5,-12.5 4,-13.5
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name To Go Around The Whole Curve!</ogr:NAME>
|
||||
<ogr:CLASS>VERTCURVE</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9.2,-4 9,-3 10,-3 10.2,-4
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>PARALLELOGRAM</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9,-2 9.2,-1 10.2,-1 10,-2
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>PARALLELOGRAM</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
11,-1 11,-2 12,-2
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CORNER</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
11,-4 12,-4 12,-3
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CORNER</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
12.5,-1 13.5,-1 13.5,-2
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CORNER</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
<ogr:displacement fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
12.5,-4 12.5,-3 13.5,-3
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CORNER</ogr:CLASS>
|
||||
</ogr:displacement>
|
||||
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
|
||||
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengeospatial.net/gml/2.1.2/feature.xsd"/><xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
|
||||
<xs:complexType name="FeatureCollectionType">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureCollectionType">
|
||||
<xs:attribute name="lockId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="scope" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
<xs:element name="displacement" type="ogr:displacement_Type" substitutionGroup="gml:_Feature"/>
|
||||
<xs:complexType name="displacement_Type">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence>
|
||||
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="NAME" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CLASS" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
|
@ -1,25 +0,0 @@
|
|||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>overlap</Name>
|
||||
<ElementPath>overlap</ElementPath>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>1</FeatureCount>
|
||||
<ExtentXMin>1.00000</ExtentXMin>
|
||||
<ExtentXMax>2.00000</ExtentXMax>
|
||||
<ExtentYMin>1.00000</ExtentYMin>
|
||||
<ExtentYMax>5.00000</ExtentYMax>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>NAME</Name>
|
||||
<ElementPath>NAME</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>CLASS</Name>
|
||||
<ElementPath>CLASS</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
|
@ -1,127 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="overlap.xsd"
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy>
|
||||
<gml:Box>
|
||||
<gml:coord><gml:X>0</gml:X><gml:Y>0</gml:Y></gml:coord>
|
||||
<gml:coord><gml:X>13</gml:X><gml:Y>-13</gml:Y></gml:coord>
|
||||
</gml:Box>
|
||||
</gml:boundedBy>
|
||||
<gml:featureMember>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-1 1,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-3 7,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-3 7,-7</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>3,-2 3,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-7 1,-7</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>5,-2 5,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-3 12,-3</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CROSS</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>10,-1 10,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CROSS</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
10,-9 13,-9 13,-11 11,-11 11,-8
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>SELFOVERLAP</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>4,-9 4,-13</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK2</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-9 8,-13</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK2</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-11 9,-11</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK2</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>2,-9 2,-13</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK2</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>6,-9 6,-13</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>NETWORK2</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8.8,-6 8.8,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDOVER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-6 8,-7 10,-7 10,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDUNDER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>12.2,-6 12.2,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDOVER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>11,-6 11,-7 13,-7 13,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDUNDER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>12.2,-3.5 12.2,-5.5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDOVER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
<ogr:overlap fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>11,-4.5 13,-4.5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Long Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BENDUNDER</ogr:CLASS>
|
||||
</ogr:overlap>
|
||||
|
||||
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
|
||||
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengeospatial.net/gml/2.1.2/feature.xsd"/><xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
|
||||
<xs:complexType name="FeatureCollectionType">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureCollectionType">
|
||||
<xs:attribute name="lockId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="scope" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
<xs:element name="overlap" type="ogr:overlap_Type" substitutionGroup="gml:_Feature"/>
|
||||
<xs:complexType name="overlap_Type">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence>
|
||||
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="NAME" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CLASS" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
|
@ -1,25 +0,0 @@
|
|||
<GMLFeatureClassList>
|
||||
<GMLFeatureClass>
|
||||
<Name>textspacing</Name>
|
||||
<ElementPath>textspacing</ElementPath>
|
||||
<DatasetSpecificInfo>
|
||||
<FeatureCount>1</FeatureCount>
|
||||
<ExtentXMin>1.00000</ExtentXMin>
|
||||
<ExtentXMax>2.00000</ExtentXMax>
|
||||
<ExtentYMin>1.00000</ExtentYMin>
|
||||
<ExtentYMax>5.00000</ExtentYMax>
|
||||
</DatasetSpecificInfo>
|
||||
<PropertyDefn>
|
||||
<Name>NAME</Name>
|
||||
<ElementPath>NAME</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
<PropertyDefn>
|
||||
<Name>CLASS</Name>
|
||||
<ElementPath>CLASS</ElementPath>
|
||||
<Type>String</Type>
|
||||
<Width>0</Width>
|
||||
</PropertyDefn>
|
||||
</GMLFeatureClass>
|
||||
</GMLFeatureClassList>
|
|
@ -1,117 +0,0 @@
|
|||
<?xml version="1.0" encoding="utf-8" ?>
|
||||
<ogr:FeatureCollection
|
||||
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
|
||||
xsi:schemaLocation="textspacing.xsd"
|
||||
xmlns:ogr="http://ogr.maptools.org/"
|
||||
xmlns:gml="http://www.opengis.net/gml">
|
||||
<gml:boundedBy>
|
||||
<gml:Box>
|
||||
<gml:coord><gml:X>0</gml:X><gml:Y>0</gml:Y></gml:coord>
|
||||
<gml:coord><gml:X>13</gml:X><gml:Y>-13</gml:Y></gml:coord>
|
||||
</gml:Box>
|
||||
</gml:boundedBy>
|
||||
<gml:featureMember>
|
||||
|
||||
<ogr:textspacing fid="F0">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>2,-1 1,-3 2,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>TRIANGLE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F1">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>3,-1 4,-3 3,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>TRIANGLE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F2">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-7 2,-7</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F3">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-8 3,-8</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F4">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-9 4,-9</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F5">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-10 5,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F6">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>1,-11 7,-11</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F7">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-12 13,-12
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F8">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
1,-13 2,-13 5,-13 10,-13 13,-13
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>STRAIGHT</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F9">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>6,-1 5,-3 5,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F10">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>7,-1 8,-3 8,-5</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F11">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>5,-6 5,-8 6,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F12">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>8,-6 8,-8 7,-10</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>BEND</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F13">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>10.055915,-1.00031738281 10.6649858,-1.077712483 11.274056,-1.26950068 11.77921,-1.55298308 12.191993,-1.92815928 12.51529,-2.369132 12.746218,-2.8329032 12.884774,-3.2968745 12.930959,-3.875339</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
<ogr:textspacing fid="F14">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>10.0555,-8.875339 10.6645708,-8.7979439 11.273641,-8.6061557 11.778795,-8.3226733 12.191578,-7.9474971 12.514875,-7.5065244 12.745803,-7.0427532 12.884359,-6.5787819 12.930544,-6.0003174</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F15">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9.055915,-2.00031738281 9.6649858,-2.077712483 10.274056,-2.26950068 10.77921,-2.55298308 11.191993,-2.92815928 11.51529,-3.369132 11.746218,-3.8329032 11.884774,-4.2968745 11.930959,-4.875339
|
||||
11.930544,-5.0003174 11.884359,-5.5787819 11.745803,-6.0427532 11.514875,-6.5065244 11.191578,-6.9474971 10.778795,-7.3226733 10.273641,-7.6061557 9.6645708,-7.7979439 9.0555,-7.875339
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>CURVE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
<ogr:textspacing fid="F16">
|
||||
<ogr:geometryProperty><gml:LineString><gml:coordinates>
|
||||
9.0435048,-10.5550195 9.480786,-10.2191668 9.963148,-10.0731439 10.540222,-10.2495527 10.968444,-10.525815 11.419238,-10.8336443 12.01882,-10.9565825 12.559787,-10.7996079 12.956495,-10.4089966
|
||||
</gml:coordinates></gml:LineString></ogr:geometryProperty>
|
||||
<ogr:NAME>Road Name</ogr:NAME>
|
||||
<ogr:CLASS>SQUIGGLE</ogr:CLASS>
|
||||
</ogr:textspacing>
|
||||
|
||||
</gml:featureMember>
|
||||
</ogr:FeatureCollection>
|
|
@ -1,36 +0,0 @@
|
|||
<?xml version="1.0" encoding="UTF-8"?>
|
||||
<xs:schema targetNamespace="http://ogr.maptools.org/" xmlns:ogr="http://ogr.maptools.org/" xmlns:xs="http://www.w3.org/2001/XMLSchema" xmlns:gml="http://www.opengis.net/gml" elementFormDefault="qualified" version="1.0">
|
||||
<xs:import namespace="http://www.opengis.net/gml" schemaLocation="http://schemas.opengeospatial.net/gml/2.1.2/feature.xsd"/><xs:element name="FeatureCollection" type="ogr:FeatureCollectionType" substitutionGroup="gml:_FeatureCollection"/>
|
||||
<xs:complexType name="FeatureCollectionType">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureCollectionType">
|
||||
<xs:attribute name="lockId" type="xs:string" use="optional"/>
|
||||
<xs:attribute name="scope" type="xs:string" use="optional"/>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
<xs:element name="textspacing" type="ogr:textspacing_Type" substitutionGroup="gml:_Feature"/>
|
||||
<xs:complexType name="textspacing_Type">
|
||||
<xs:complexContent>
|
||||
<xs:extension base="gml:AbstractFeatureType">
|
||||
<xs:sequence>
|
||||
<xs:element name="geometryProperty" type="gml:GeometryPropertyType" nillable="true" minOccurs="1" maxOccurs="1"/>
|
||||
<xs:element name="NAME" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
<xs:element name="CLASS" nillable="true" minOccurs="0" maxOccurs="1">
|
||||
<xs:simpleType>
|
||||
<xs:restriction base="xs:string">
|
||||
<xs:maxLength value="60"/>
|
||||
</xs:restriction>
|
||||
</xs:simpleType>
|
||||
</xs:element>
|
||||
</xs:sequence>
|
||||
</xs:extension>
|
||||
</xs:complexContent>
|
||||
</xs:complexType>
|
||||
</xs:schema>
|
|
@ -1,3 +0,0 @@
|
|||
These files are for testing various rendering parts of mapnik, they have been created by hand.
|
||||
The raw files are in the raw/ folder (they were created with inkscape to assist!)
|
||||
Run the regenerate.sh script to regenerate the shape files from the gml files, this requires ogr2ogr to run.
|
|
@ -1,20 +0,0 @@
|
|||
#!/bin/sh
|
||||
rm -f textspacing.shp textspacing.shx textspacing.dbf
|
||||
ogr2ogr -f "ESRI Shapefile" textspacing raw/textspacing.gml
|
||||
mv textspacing/* ./
|
||||
rmdir textspacing
|
||||
|
||||
rm -f overlap.shp overlap.shx overlap.dbf
|
||||
ogr2ogr -f "ESRI Shapefile" overlap raw/overlap.gml
|
||||
mv overlap/* ./
|
||||
rmdir overlap
|
||||
|
||||
rm -f displacement.shp displacement.shx displacement.dbf
|
||||
ogr2ogr -f "ESRI Shapefile" displacement raw/displacement.gml
|
||||
mv displacement/* ./
|
||||
rmdir displacement
|
||||
|
||||
rm -f charplacement.shp charplacement.shx charplacement.dbf
|
||||
ogr2ogr -f "ESRI Shapefile" charplacement raw/charplacement.gml
|
||||
mv charplacement/* ./
|
||||
rmdir charplacement
|
|
@ -19,7 +19,7 @@
|
|||
|
||||
|
||||
// qt
|
||||
#include <QApplication>
|
||||
#include <QtWidgets/QApplication>
|
||||
#include <QStringList>
|
||||
#include <QSettings>
|
||||
#include <mapnik/datasource_cache.hpp>
|
||||
|
|
|
@ -32,7 +32,10 @@
|
|||
#include <QSlider>
|
||||
#include <QComboBox>
|
||||
#include <QDoubleSpinBox>
|
||||
|
||||
#include <QFileDialog>
|
||||
#include <QMenu>
|
||||
#include <QMenuBar>
|
||||
#include <QToolBar>
|
||||
// mapnik
|
||||
|
||||
#ifndef Q_MOC_RUN // QT moc chokes on BOOST_JOIN
|
||||
|
|
|
@ -22,7 +22,6 @@
|
|||
#define MAINWINDOW_HPP
|
||||
|
||||
#include <QMainWindow>
|
||||
#include <QPrinter>
|
||||
#include <QList>
|
||||
#include <QActionGroup>
|
||||
#include <QStatusBar>
|
||||
|
@ -78,7 +77,6 @@ private:
|
|||
LayerTab *layerTab_;
|
||||
StyleTab * styleTab_;
|
||||
MapWidget * mapWidget_;
|
||||
QPrinter printer;
|
||||
//actions
|
||||
QList<QAction *> exportAsActs;
|
||||
QActionGroup *toolsGroup;
|
||||
|
|
|
@ -26,7 +26,6 @@
|
|||
|
||||
#include <mapnik/agg_renderer.hpp>
|
||||
#include <mapnik/graphics.hpp>
|
||||
#include <mapnik/grid/grid_renderer.hpp>
|
||||
#include <mapnik/layer.hpp>
|
||||
#include <mapnik/projection.hpp>
|
||||
#include <mapnik/scale_denominator.hpp>
|
||||
|
@ -528,42 +527,7 @@ void render_agg(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
|
|||
|
||||
void render_grid(mapnik::Map const& map, double scaling_factor, QPixmap & pix)
|
||||
{
|
||||
unsigned width=map.width();
|
||||
unsigned height=map.height();
|
||||
|
||||
mapnik::grid buf(width,height,"F_CODE", 1);
|
||||
mapnik::grid_renderer<mapnik::grid> ren(map,buf,scaling_factor);
|
||||
|
||||
try
|
||||
{
|
||||
ren.apply();
|
||||
mapnik::value_integer * imdata = static_cast<mapnik::value_integer*>(buf.raw_data());
|
||||
|
||||
// Not sure how to display long long values ??
|
||||
//QImage image(width,height,QImage::Format_RGB32);
|
||||
//for (unsigned i = 0 ; i < height ; ++i)
|
||||
//{
|
||||
// for (unsigned j = 0 ; j < width ; ++j)
|
||||
// {
|
||||
// image.setPixel(j,i,qRgb((uint8_t)(imdata[i*width+j]>>8),
|
||||
// (uint8_t)(imdata[i*width+j+1]>>8),
|
||||
// (uint8_t)(imdata[i*width+j+2]>>8)));
|
||||
// }
|
||||
//}
|
||||
//pix = QPixmap::fromImage(image);
|
||||
}
|
||||
catch (mapnik::config_error & ex)
|
||||
{
|
||||
std::cerr << ex.what() << std::endl;
|
||||
}
|
||||
catch (const std::exception & ex)
|
||||
{
|
||||
std::cerr << "exception: " << ex.what() << std::endl;
|
||||
}
|
||||
catch (...)
|
||||
{
|
||||
std::cerr << "Unknown exception caught!\n";
|
||||
}
|
||||
std::cerr << "Not supported" << std::endl;
|
||||
}
|
||||
|
||||
|
||||
|
|
|
@ -2,8 +2,10 @@
|
|||
# Mapnik viewer - Copyright (C) 2007 Artem Pavlenko
|
||||
######################################################################
|
||||
TEMPLATE = app
|
||||
QT += core gui widgets
|
||||
QMAKE_CXX = clang++
|
||||
QMAKE_CXXFLAGS += $$system(mapnik-config --cxxflags)
|
||||
QMAKE_CXXFLAGS += $$system(mapnik-config --includes --dep-includes)
|
||||
QMAKE_LFLAGS += $$system(mapnik-config --libs)
|
||||
QMAKE_LFLAGS += $$system(mapnik-config --ldflags --dep-libs)
|
||||
QMAKE_LFLAGS += -lboost_timer
|
||||
|
|
6
deps/agg/include/agg_vpgen_clip_polygon.h
vendored
6
deps/agg/include/agg_vpgen_clip_polygon.h
vendored
|
@ -18,6 +18,9 @@
|
|||
|
||||
#include "agg_basics.h"
|
||||
|
||||
// https://github.com/mapnik/mapnik/issues/1860
|
||||
#include <mapnik/config.hpp>
|
||||
|
||||
namespace agg
|
||||
{
|
||||
|
||||
|
@ -25,7 +28,8 @@ namespace agg
|
|||
//
|
||||
// See Implementation agg_vpgen_clip_polygon.cpp
|
||||
//
|
||||
class vpgen_clip_polygon
|
||||
|
||||
class MAPNIK_DECL vpgen_clip_polygon
|
||||
{
|
||||
public:
|
||||
vpgen_clip_polygon() :
|
||||
|
|
2
deps/clipper/include/clipper.hpp
vendored
2
deps/clipper/include/clipper.hpp
vendored
|
@ -105,7 +105,7 @@ private:
|
|||
enum JoinType { jtSquare, jtRound, jtMiter };
|
||||
|
||||
bool Orientation(const Polygon &poly);
|
||||
double Area(const Polygon &poly);
|
||||
MAPNIK_DECL double Area(const Polygon &poly);
|
||||
|
||||
void OffsetPolygons(const Polygons &in_polys, Polygons &out_polys,
|
||||
double delta, JoinType jointype = jtSquare, double limit = 0, bool autoFix = true);
|
||||
|
|
|
@ -41,7 +41,6 @@
|
|||
|
||||
// cairo
|
||||
#include <cairo.h>
|
||||
#include <cairo-ft.h>
|
||||
|
||||
// stl
|
||||
#include <map>
|
||||
|
|
|
@ -134,19 +134,23 @@ public:
|
|||
|
||||
typedef boost::shared_ptr<datasource> datasource_ptr;
|
||||
|
||||
#define DATASOURCE_PLUGIN(classname) \
|
||||
extern "C" MAPNIK_EXP const char * datasource_name() \
|
||||
{ \
|
||||
return classname::name(); \
|
||||
} \
|
||||
extern "C" MAPNIK_EXP datasource* create(parameters const& params) \
|
||||
{ \
|
||||
return new classname(params); \
|
||||
} \
|
||||
extern "C" MAPNIK_EXP void destroy(datasource *ds) \
|
||||
{ \
|
||||
delete ds; \
|
||||
}
|
||||
#ifdef MAPNIK_STATIC_PLUGINS
|
||||
#define DATASOURCE_PLUGIN(classname)
|
||||
#else
|
||||
#define DATASOURCE_PLUGIN(classname) \
|
||||
extern "C" MAPNIK_EXP const char * datasource_name() \
|
||||
{ \
|
||||
return classname::name(); \
|
||||
} \
|
||||
extern "C" MAPNIK_EXP datasource* create(parameters const& params) \
|
||||
{ \
|
||||
return new classname(params); \
|
||||
} \
|
||||
extern "C" MAPNIK_EXP void destroy(datasource *ds) \
|
||||
{ \
|
||||
delete ds; \
|
||||
}
|
||||
#endif
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -25,14 +25,30 @@
|
|||
|
||||
#include <mapnik/config.hpp>
|
||||
#include <mapnik/symbolizer.hpp>
|
||||
#include <mapnik/enumeration.hpp>
|
||||
|
||||
namespace mapnik
|
||||
{
|
||||
|
||||
enum debug_symbolizer_mode_enum {
|
||||
DEBUG_SYM_MODE_COLLISION,
|
||||
DEBUG_SYM_MODE_VERTEX,
|
||||
debug_symbolizer_mode_enum_MAX
|
||||
};
|
||||
|
||||
DEFINE_ENUM( debug_symbolizer_mode_e, debug_symbolizer_mode_enum );
|
||||
|
||||
struct MAPNIK_DECL debug_symbolizer :
|
||||
public symbolizer_base
|
||||
{
|
||||
debug_symbolizer() : symbolizer_base() {}
|
||||
debug_symbolizer();
|
||||
debug_symbolizer(debug_symbolizer const& rhs);
|
||||
debug_symbolizer_mode_e get_mode() const;
|
||||
void set_mode(debug_symbolizer_mode_e mode);
|
||||
|
||||
private:
|
||||
debug_symbolizer_mode_e mode_;
|
||||
|
||||
};
|
||||
|
||||
}
|
||||
|
|
|
@ -306,9 +306,10 @@ inline std::ostream& operator<< (std::ostream & out,feature_impl const& f)
|
|||
return out;
|
||||
}
|
||||
|
||||
// TODO - remove at Mapnik 3.x
|
||||
typedef feature_impl Feature;
|
||||
|
||||
typedef boost::shared_ptr<Feature> feature_ptr;
|
||||
typedef boost::shared_ptr<feature_impl> feature_ptr;
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -35,11 +35,11 @@ namespace mapnik
|
|||
{
|
||||
struct feature_factory
|
||||
{
|
||||
static boost::shared_ptr<Feature> create (context_ptr const& ctx, mapnik::value_integer fid)
|
||||
static boost::shared_ptr<feature_impl> create (context_ptr const& ctx, mapnik::value_integer fid)
|
||||
{
|
||||
//return boost::allocate_shared<Feature>(boost::pool_allocator<Feature>(),fid);
|
||||
//return boost::allocate_shared<Feature>(boost::fast_pool_allocator<Feature>(),fid);
|
||||
return boost::make_shared<Feature>(ctx,fid);
|
||||
//return boost::allocate_shared<feature_impl>(boost::pool_allocator<feature_impl>(),fid);
|
||||
//return boost::allocate_shared<feature_impl>(boost::fast_pool_allocator<feature_impl>(),fid);
|
||||
return boost::make_shared<feature_impl>(ctx,fid);
|
||||
}
|
||||
};
|
||||
}
|
||||
|
|
|
@ -606,7 +606,7 @@ void feature_style_processor<Processor>::render_style(
|
|||
BOOST_FOREACH(rule const* r, rc.get_if_rules() )
|
||||
{
|
||||
expression_ptr const& expr=r->get_filter();
|
||||
value_type result = boost::apply_visitor(evaluate<Feature,value_type>(*feature),*expr);
|
||||
value_type result = boost::apply_visitor(evaluate<feature_impl,value_type>(*feature),*expr);
|
||||
if (result.to_bool())
|
||||
{
|
||||
#if defined(RENDERING_STATS)
|
||||
|
|
|
@ -1,2 +1,8 @@
|
|||
// TODO - remove this file at mapnik 3.x
|
||||
#ifdef _MSC_VER
|
||||
#pragma NOTE("filter_factory.hpp" is now called "expression.hpp")
|
||||
#else
|
||||
#warning "filter_factory.hpp" is now called "expression.hpp"
|
||||
#endif
|
||||
|
||||
#include <mapnik/expression.hpp>
|
||||
|
|
|
@ -200,10 +200,10 @@ inline bool point_on_path(double x,double y,Iter start,Iter end, double tol)
|
|||
struct filter_in_box
|
||||
{
|
||||
box2d<double> box_;
|
||||
explicit filter_in_box(const box2d<double>& box)
|
||||
explicit filter_in_box(box2d<double> const& box)
|
||||
: box_(box) {}
|
||||
|
||||
bool pass(const box2d<double>& extent) const
|
||||
bool pass(box2d<double> const& extent) const
|
||||
{
|
||||
return extent.intersects(box_);
|
||||
}
|
||||
|
@ -211,23 +211,16 @@ struct filter_in_box
|
|||
|
||||
struct filter_at_point
|
||||
{
|
||||
coord2d pt_;
|
||||
double tol_;
|
||||
explicit filter_at_point(const coord2d& pt, double tol=0)
|
||||
: pt_(pt),
|
||||
tol_(tol) {}
|
||||
bool pass(const box2d<double>& extent) const
|
||||
box2d<double> box_;
|
||||
explicit filter_at_point(coord2d const& pt, double tol=0)
|
||||
: box_(pt,pt)
|
||||
{
|
||||
if (tol_ == 0)
|
||||
{
|
||||
return extent.contains(pt_);
|
||||
}
|
||||
else
|
||||
{
|
||||
box2d<double> extent2 = extent;
|
||||
extent2.pad(tol_);
|
||||
return extent2.contains(pt_);
|
||||
}
|
||||
box_.pad(tol);
|
||||
}
|
||||
|
||||
bool pass(box2d<double> const& extent) const
|
||||
{
|
||||
return extent.intersects(box_);
|
||||
}
|
||||
};
|
||||
|
||||
|
|
|
@ -38,7 +38,7 @@ public:
|
|||
y_(y),
|
||||
tol_(tol) {}
|
||||
|
||||
bool pass(Feature & feature)
|
||||
bool pass(feature_impl & feature)
|
||||
{
|
||||
BOOST_FOREACH(geometry_type & geom, feature.paths())
|
||||
{
|
||||
|
|
|
@ -100,17 +100,25 @@ public:
|
|||
inline double width() const
|
||||
{
|
||||
if (is_bitmap())
|
||||
{
|
||||
return (*bitmap_data_)->width();
|
||||
}
|
||||
else if (is_vector())
|
||||
return (*vector_data_)->width();
|
||||
{
|
||||
return (*vector_data_)->bounding_box().width();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
inline double height() const
|
||||
{
|
||||
if (is_bitmap())
|
||||
{
|
||||
return (*bitmap_data_)->height();
|
||||
}
|
||||
else if (is_vector())
|
||||
return (*vector_data_)->height();
|
||||
{
|
||||
return (*vector_data_)->bounding_box().height();
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
|
||||
|
|
|
@ -34,7 +34,6 @@
|
|||
#include <mapnik/sparsehash/dense_hash_map>
|
||||
typedef google::dense_hash_map<unsigned int, unsigned char> rgba_hash_table;
|
||||
#else
|
||||
#warning compiling without dense_hash_map
|
||||
#include <boost/unordered_map.hpp>
|
||||
typedef boost::unordered_map<unsigned int, unsigned char> rgba_hash_table;
|
||||
#endif
|
||||
|
|
|
@ -40,7 +40,6 @@
|
|||
// mapnik
|
||||
#include <mapnik/config.hpp>
|
||||
#include <mapnik/color.hpp>
|
||||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/enumeration.hpp>
|
||||
|
||||
// boost
|
||||
|
@ -52,6 +51,10 @@
|
|||
namespace mapnik
|
||||
{
|
||||
|
||||
class feature_impl;
|
||||
class raster;
|
||||
|
||||
|
||||
//! \brief Enumerates the modes of interpolation
|
||||
enum colorizer_mode_enum
|
||||
{
|
||||
|
@ -197,7 +200,7 @@ public:
|
|||
//!
|
||||
//! \param[in, out] raster A raster stored in float32 single channel format, which gets colorized in place.
|
||||
//! \param[in] f The feature used to find 'NODATA' information if available
|
||||
void colorize(raster_ptr const& raster, Feature const& f) const;
|
||||
void colorize(boost::shared_ptr<raster> const& raster, feature_impl const& f) const;
|
||||
|
||||
|
||||
//! \brief Perform the translation of input to output
|
||||
|
|
|
@ -57,7 +57,7 @@ class text_symbolizer_helper
|
|||
{
|
||||
public:
|
||||
text_symbolizer_helper(text_symbolizer const& sym,
|
||||
Feature const& feature,
|
||||
feature_impl const& feature,
|
||||
proj_transform const& prj_trans,
|
||||
unsigned width,
|
||||
unsigned height,
|
||||
|
@ -104,7 +104,7 @@ protected:
|
|||
|
||||
//Input
|
||||
text_symbolizer const& sym_;
|
||||
Feature const& feature_;
|
||||
feature_impl const& feature_;
|
||||
proj_transform const& prj_trans_;
|
||||
CoordTransform const& t_;
|
||||
FaceManagerT & font_manager_;
|
||||
|
@ -142,7 +142,7 @@ class shield_symbolizer_helper: public text_symbolizer_helper<FaceManagerT, Dete
|
|||
{
|
||||
public:
|
||||
shield_symbolizer_helper(shield_symbolizer const& sym,
|
||||
Feature const& feature,
|
||||
feature_impl const& feature,
|
||||
proj_transform const& prj_trans,
|
||||
unsigned width,
|
||||
unsigned height,
|
||||
|
|
|
@ -40,6 +40,7 @@
|
|||
|
||||
namespace mapnik
|
||||
{
|
||||
|
||||
#ifdef MAPNIK_THREADSAFE
|
||||
using boost::mutex;
|
||||
#endif
|
||||
|
@ -84,86 +85,103 @@ public:
|
|||
return new(&staticMemory) T;
|
||||
}
|
||||
#ifdef __SUNPRO_CC
|
||||
// Sun C++ Compiler doesn't handle `volatile` keyword same as GCC.
|
||||
// Sun C++ Compiler doesn't handle `volatile` keyword same as GCC.
|
||||
static void destroy(T* obj)
|
||||
#else
|
||||
static void destroy(volatile T* obj)
|
||||
static void destroy(volatile T* obj)
|
||||
#endif
|
||||
{
|
||||
obj->~T();
|
||||
}
|
||||
};
|
||||
|
||||
#ifdef __GNUC__
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy=CreateStatic> class MAPNIK_EXP singleton
|
||||
template <typename U> class CreatePolicy=CreateStatic> class MAPNIK_DECL singleton
|
||||
{
|
||||
#ifdef __SUNPRO_CC
|
||||
/* Sun's C++ compiler will issue the following errors if CreatePolicy<T> is used:
|
||||
Error: A class template name was expected instead of mapnik::CreatePolicy<mapnik::T>
|
||||
Error: A "friend" declaration must specify a class or function.
|
||||
*/
|
||||
friend class CreatePolicy;
|
||||
#else
|
||||
friend class CreatePolicy<T>;
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy=CreateStatic> class singleton
|
||||
{
|
||||
#endif
|
||||
static T* pInstance_;
|
||||
static bool destroyed_;
|
||||
singleton(const singleton &rhs);
|
||||
singleton& operator=(const singleton&);
|
||||
|
||||
static void onDeadReference()
|
||||
{
|
||||
throw std::runtime_error("dead reference!");
|
||||
}
|
||||
|
||||
static void DestroySingleton()
|
||||
{
|
||||
CreatePolicy<T>::destroy(pInstance_);
|
||||
pInstance_ = 0;
|
||||
destroyed_ = true;
|
||||
}
|
||||
|
||||
protected:
|
||||
#ifdef MAPNIK_THREADSAFE
|
||||
static mutex mutex_;
|
||||
#ifdef __SUNPRO_CC
|
||||
/* Sun's C++ compiler will issue the following errors if CreatePolicy<T> is used:
|
||||
Error: A class template name was expected instead of mapnik::CreatePolicy<mapnik::T>
|
||||
Error: A "friend" declaration must specify a class or function.
|
||||
*/
|
||||
friend class CreatePolicy;
|
||||
#else
|
||||
friend class CreatePolicy<T>;
|
||||
#endif
|
||||
singleton() {}
|
||||
public:
|
||||
static T& instance()
|
||||
{
|
||||
if (! pInstance_)
|
||||
static T* pInstance_;
|
||||
static bool destroyed_;
|
||||
singleton(const singleton &rhs);
|
||||
singleton& operator=(const singleton&);
|
||||
|
||||
static void onDeadReference()
|
||||
{
|
||||
throw std::runtime_error("dead reference!");
|
||||
}
|
||||
|
||||
static void DestroySingleton()
|
||||
{
|
||||
CreatePolicy<T>::destroy(pInstance_);
|
||||
pInstance_ = 0;
|
||||
destroyed_ = true;
|
||||
}
|
||||
|
||||
protected:
|
||||
#ifdef MAPNIK_THREADSAFE
|
||||
mutex::scoped_lock lock(mutex_);
|
||||
static mutex mutex_;
|
||||
#endif
|
||||
singleton() {}
|
||||
public:
|
||||
static T& instance()
|
||||
{
|
||||
if (! pInstance_)
|
||||
{
|
||||
if (destroyed_)
|
||||
#ifdef MAPNIK_THREADSAFE
|
||||
mutex::scoped_lock lock(mutex_);
|
||||
#endif
|
||||
if (! pInstance_)
|
||||
{
|
||||
destroyed_ = false;
|
||||
onDeadReference();
|
||||
}
|
||||
else
|
||||
{
|
||||
pInstance_ = CreatePolicy<T>::create();
|
||||
if (destroyed_)
|
||||
{
|
||||
destroyed_ = false;
|
||||
onDeadReference();
|
||||
}
|
||||
else
|
||||
{
|
||||
pInstance_ = CreatePolicy<T>::create();
|
||||
|
||||
// register destruction
|
||||
std::atexit(&DestroySingleton);
|
||||
// register destruction
|
||||
std::atexit(&DestroySingleton);
|
||||
}
|
||||
}
|
||||
}
|
||||
return *pInstance_;
|
||||
}
|
||||
return *pInstance_;
|
||||
}
|
||||
};
|
||||
};
|
||||
#ifdef MAPNIK_THREADSAFE
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> mutex singleton<T,CreatePolicy>::mutex_;
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> mutex singleton<T,CreatePolicy>::mutex_;
|
||||
#endif
|
||||
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> T* singleton<T,CreatePolicy>::pInstance_=0;
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> bool singleton<T,CreatePolicy>::destroyed_=false;
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> T* singleton<T,CreatePolicy>::pInstance_=0;
|
||||
template <typename T,
|
||||
template <typename U> class CreatePolicy> bool singleton<T,CreatePolicy>::destroyed_=false;
|
||||
|
||||
|
||||
#ifdef _WINDOWS
|
||||
|
||||
// UTF8 <--> UTF16 conversion routines
|
||||
|
||||
MAPNIK_DECL std::string utf16_to_utf8(std::wstring const& wstr);
|
||||
MAPNIK_DECL std::wstring utf8_to_utf16(std::string const& str);
|
||||
|
||||
#endif // _WINDOWS
|
||||
|
||||
}
|
||||
|
||||
|
|
|
@ -1,37 +1,62 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik 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
|
||||
#
|
||||
#
|
||||
|
||||
import os
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
PLUGIN_NAME = 'csv'
|
||||
|
||||
install_dest = env['MAPNIK_INPUT_PLUGINS_DEST']
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
""" % locals()
|
||||
)
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries = []
|
||||
libraries.append('mapnik')
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
TARGET = plugin_env.SharedLibrary(
|
||||
'../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env.get('CUSTOM_LDFLAGS')
|
||||
)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(install_dest, TARGET)
|
||||
env.Alias('install', install_dest)
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env.get('CUSTOM_LDFLAGS'))
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
// mapnik
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include <mapnik/unicode.hpp>
|
||||
#include <mapnik/feature_layer_desc.hpp>
|
||||
#include <mapnik/feature_factory.hpp>
|
||||
|
@ -119,9 +120,15 @@ csv_datasource::csv_datasource(parameters const& params)
|
|||
}
|
||||
else
|
||||
{
|
||||
#if defined (_WINDOWS)
|
||||
std::ifstream in(mapnik::utf8_to_utf16(filename_),std::ios_base::in | std::ios_base::binary);
|
||||
#else
|
||||
std::ifstream in(filename_.c_str(),std::ios_base::in | std::ios_base::binary);
|
||||
#endif
|
||||
if (!in.is_open())
|
||||
{
|
||||
throw mapnik::datasource_exception("CSV Plugin: could not open: '" + filename_ + "'");
|
||||
}
|
||||
parse_csv(in,escape_, separator_, quote_);
|
||||
in.close();
|
||||
}
|
||||
|
@ -859,7 +866,7 @@ void csv_datasource::parse_csv(T & stream,
|
|||
}
|
||||
}
|
||||
}
|
||||
if (!feature_count > 0)
|
||||
if (feature_count < 1)
|
||||
{
|
||||
MAPNIK_LOG_ERROR(csv) << "CSV Plugin: could not parse any lines of data";
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -22,35 +22,47 @@
|
|||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'gdal'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
gdal_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
gdal_datasource.cpp
|
||||
gdal_featureset.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
# clear out and rebuild libs
|
||||
plugin_env['LIBS'] = [env['PLUGINS']['gdal']['lib']]
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
plugin_env['LIBS'].append('mapnik')
|
||||
plugin_env['LIBS'].append('boost_system%s' % env['BOOST_APPEND'])
|
||||
plugin_env['LIBS'].append(env['ICU_LIB_NAME'])
|
||||
libraries = [env['PLUGINS']['gdal']['lib']]
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
if env['RUNTIME_LINK'] == 'static':
|
||||
cmd = 'gdal-config --dep-libs'
|
||||
plugin_env.ParseConfig(cmd)
|
||||
plugin_env['LIBS'].append('proj')
|
||||
libraries.append('proj')
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../gdal', source=gdal_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2012 Artem Pavlenko
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,7 +17,7 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
|
||||
#
|
||||
|
||||
Import ('env')
|
||||
|
||||
|
@ -32,27 +32,45 @@ if not can_build:
|
|||
print 'WARNING: skipping building the optional geojson datasource plugin which requires boost >= 1.47'
|
||||
else:
|
||||
Import ('plugin_base')
|
||||
prefix = env['PREFIX']
|
||||
|
||||
PLUGIN_NAME = 'geojson'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
geojson_src = Split(
|
||||
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
geojson_datasource.cpp
|
||||
geojson_featureset.cpp
|
||||
"""
|
||||
)
|
||||
libraries = []
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries.append('mapnik')
|
||||
libraries = []
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
if env['THREADING'] == 'multi':
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../geojson', source=geojson_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -39,6 +39,7 @@
|
|||
|
||||
// mapnik
|
||||
#include <mapnik/unicode.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include <mapnik/feature.hpp>
|
||||
#include <mapnik/feature_kv_iterator.hpp>
|
||||
#include <mapnik/box2d.hpp>
|
||||
|
@ -106,7 +107,11 @@ geojson_datasource::geojson_datasource(parameters const& params)
|
|||
|
||||
typedef std::istreambuf_iterator<char> base_iterator_type;
|
||||
|
||||
std::ifstream is(file_.c_str());
|
||||
#if defined (_WINDOWS)
|
||||
std::ifstream is(mapnik::utf8_to_utf16(file_),std::ios_base::in | std::ios_base::binary);
|
||||
#else
|
||||
std::ifstream is(file_.c_str(),std::ios_base::in | std::ios_base::binary);
|
||||
#endif
|
||||
boost::spirit::multi_pass<base_iterator_type> begin =
|
||||
boost::spirit::make_default_multi_pass(base_iterator_type(is));
|
||||
|
||||
|
@ -204,9 +209,17 @@ mapnik::featureset_ptr geojson_datasource::features(mapnik::query const& q) cons
|
|||
return mapnik::featureset_ptr();
|
||||
}
|
||||
|
||||
// FIXME
|
||||
mapnik::featureset_ptr geojson_datasource::features_at_point(mapnik::coord2d const& pt, double tol) const
|
||||
{
|
||||
throw mapnik::datasource_exception("GeoJSON Plugin: features_at_point is not supported yet");
|
||||
return mapnik::featureset_ptr();
|
||||
mapnik::box2d<double> query_bbox(pt, pt);
|
||||
query_bbox.pad(tol);
|
||||
mapnik::query q(query_bbox);
|
||||
std::vector<mapnik::attribute_descriptor> const& desc = desc_.get_descriptors();
|
||||
std::vector<mapnik::attribute_descriptor>::const_iterator itr = desc.begin();
|
||||
std::vector<mapnik::attribute_descriptor>::const_iterator end = desc.end();
|
||||
for ( ;itr!=end;++itr)
|
||||
{
|
||||
q.add_property_name(itr->get_name());
|
||||
}
|
||||
return features(q);
|
||||
}
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,35 +17,49 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'occi'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
occi_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
occi_types.cpp
|
||||
occi_datasource.cpp
|
||||
occi_featureset.cpp
|
||||
%(PLUGIN_NAME)s_types.cpp
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
spatial_classesm.cpp
|
||||
spatial_classeso.cpp
|
||||
"""
|
||||
)
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
libraries = [ 'occi', 'ociei' ]
|
||||
libraries.append('mapnik')
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../occi', source=occi_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,50 +17,67 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'ogr'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
ogr_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
ogr_converter.cpp
|
||||
ogr_datasource.cpp
|
||||
ogr_featureset.cpp
|
||||
ogr_index_featureset.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
plugin_env['LIBS'] = [env['PLUGINS']['ogr']['lib']]
|
||||
%(PLUGIN_NAME)s_converter.cpp
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
%(PLUGIN_NAME)s_index_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
plugin_env['LIBS'].append('mapnik')
|
||||
plugin_env['LIBS'].append(env['ICU_LIB_NAME'])
|
||||
plugin_env['LIBS'].append('boost_system%s' % env['BOOST_APPEND'])
|
||||
plugin_env['LIBS'].append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
libraries = [env['PLUGINS']['ogr']['lib']]
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
cxxflags = []
|
||||
|
||||
if env['RUNTIME_LINK'] == 'static':
|
||||
cmd = 'gdal-config --dep-libs'
|
||||
plugin_env.ParseConfig(cmd)
|
||||
plugin_env['LIBS'].append('proj')
|
||||
libraries.append('proj')
|
||||
|
||||
if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
|
||||
boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
|
||||
if boost_version_from_header < 46:
|
||||
# avoid ubuntu issue with boost interprocess:
|
||||
# https://github.com/mapnik/mapnik/issues/1082
|
||||
plugin_env.Append(CXXFLAGS = '-fpermissive')
|
||||
cxxflags.Append('-fpermissive')
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../ogr', source=ogr_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
plugin_env.Append(CXXFLAGS=cxxflags)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'CXXFLAGS': cxxflags,
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -82,7 +82,7 @@ void ogr_datasource::init(mapnik::parameters const& params)
|
|||
|
||||
// initialize ogr formats
|
||||
OGRRegisterAll();
|
||||
|
||||
|
||||
boost::optional<std::string> file = params.get<std::string>("file");
|
||||
boost::optional<std::string> string = params.get<std::string>("string");
|
||||
if (! file && ! string)
|
||||
|
@ -525,7 +525,7 @@ featureset_ptr ogr_datasource::features_at_point(coord2d const& pt, double tol)
|
|||
|
||||
if (indexed_)
|
||||
{
|
||||
filter_at_point filter(pt);
|
||||
filter_at_point filter(pt, tol);
|
||||
|
||||
return featureset_ptr(new ogr_index_featureset<filter_at_point> (ctx,
|
||||
*layer,
|
||||
|
@ -535,13 +535,11 @@ featureset_ptr ogr_datasource::features_at_point(coord2d const& pt, double tol)
|
|||
}
|
||||
else
|
||||
{
|
||||
OGRPoint point;
|
||||
point.setX (pt.x);
|
||||
point.setY (pt.y);
|
||||
|
||||
mapnik::box2d<double> bbox(pt, pt);
|
||||
bbox.pad(tol);
|
||||
return featureset_ptr(new ogr_featureset (ctx,
|
||||
*layer,
|
||||
point,
|
||||
bbox,
|
||||
desc_.get_encoding()));
|
||||
}
|
||||
}
|
||||
|
|
|
@ -59,7 +59,8 @@ ogr_index_featureset<filterT>::ogr_index_featureset(mapnik::context_ptr const &
|
|||
layerdef_(layer.GetLayerDefn()),
|
||||
filter_(filter),
|
||||
tr_(new transcoder(encoding)),
|
||||
fidcolumn_(layer_.GetFIDColumn())
|
||||
fidcolumn_(layer_.GetFIDColumn()),
|
||||
feature_envelope_()
|
||||
{
|
||||
|
||||
boost::optional<mapnik::mapped_region_ptr> memory = mapnik::mapped_memory_cache::instance().find(index_file, true);
|
||||
|
@ -104,6 +105,9 @@ feature_ptr ogr_index_featureset<filterT>::next()
|
|||
OGRGeometry* geom=poFeature->GetGeometryRef();
|
||||
if (geom && !geom->IsEmpty())
|
||||
{
|
||||
geom->getEnvelope(&feature_envelope_);
|
||||
if (!filter_.pass(mapnik::box2d<double>(feature_envelope_.MinX,feature_envelope_.MinY,
|
||||
feature_envelope_.MaxX,feature_envelope_.MaxY))) continue;
|
||||
ogr_converter::convert_geometry (geom, feature);
|
||||
}
|
||||
else
|
||||
|
|
|
@ -50,6 +50,7 @@ private:
|
|||
std::vector<int>::iterator itr_;
|
||||
boost::scoped_ptr<mapnik::transcoder> tr_;
|
||||
const char* fidcolumn_;
|
||||
OGREnvelope feature_envelope_;
|
||||
};
|
||||
|
||||
#endif // OGR_INDEX_FEATURESET_HPP
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,38 +17,53 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'osm'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
osm_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
%(PLUGIN_NAME)s.cpp
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
osmparser.cpp
|
||||
osm.cpp
|
||||
osm_datasource.cpp
|
||||
osm_featureset.cpp
|
||||
dataset_deliverer.cpp
|
||||
basiccurl.cpp
|
||||
"""
|
||||
)
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries = [ 'xml2' ]
|
||||
libraries.append('curl')
|
||||
libraries.append('mapnik')
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../osm', source=osm_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,44 +17,57 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'postgis'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
postgis_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
postgis_datasource.cpp
|
||||
postgis_featureset.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
# clear out and rebuild libs
|
||||
plugin_env['LIBS'] = ['pq']
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
plugin_env['LIBS'].append('mapnik')
|
||||
plugin_env['LIBS'].append('boost_system%s' % env['BOOST_APPEND'])
|
||||
plugin_env['LIBS'].append(env['ICU_LIB_NAME'])
|
||||
libraries = ['pq']
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
if env['THREADING'] == 'multi':
|
||||
plugin_env['LIBS'].append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_thread%s' % env['BOOST_APPEND'])
|
||||
|
||||
if env['RUNTIME_LINK'] == 'static':
|
||||
#cmd = 'pg_config --libs'
|
||||
#plugin_env.ParseConfig(cmd)
|
||||
# pg_config does not seem to report correct deps of libpq
|
||||
# so resort to hardcoding for now
|
||||
plugin_env['LIBS'].extend(['ldap','pam','ssl','crypto','krb5'])
|
||||
libraries.extend(['ldap', 'pam', 'ssl', 'crypto', 'krb5'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../postgis', source=postgis_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,13 +1,29 @@
|
|||
#!/usr/bin/env python
|
||||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik 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
|
||||
#
|
||||
#
|
||||
|
||||
import os
|
||||
|
||||
PLUGIN_NAME = 'python'
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
install_dest = env['MAPNIK_INPUT_PLUGINS_DEST']
|
||||
PLUGIN_NAME = 'python'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
|
@ -17,26 +33,32 @@ plugin_sources = Split(
|
|||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
%(PLUGIN_NAME)s_utils.cpp
|
||||
""" % locals()
|
||||
)
|
||||
)
|
||||
|
||||
boost_system = 'boost_system%s' % env['BOOST_APPEND']
|
||||
libraries = ['mapnik',env['BOOST_PYTHON_LIB'],boost_system,env['ICU_LIB_NAME']]
|
||||
# Link Library to Dependencies
|
||||
libraries = []
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append(env['BOOST_PYTHON_LIB'])
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
python_cpppath = env['PYTHON_INCLUDES']
|
||||
allcpp_paths = env['CPPPATH']
|
||||
allcpp_paths.extend(python_cpppath)
|
||||
# NOTE: explicit linking to libpython is uneeded on most linux version if the
|
||||
# python plugin is used by a app in python using mapnik's python bindings
|
||||
# we explicitly link to libpython here so that this plugin
|
||||
# can be used from a pure C++ calling application or a different binding language
|
||||
if env['PLATFORM'] == 'Darwin' and env['FRAMEWORK_PYTHON']:
|
||||
if env['FRAMEWORK_SEARCH_PATH']:
|
||||
python_link_flag = '-F%s -framework Python -Z' % env['FRAMEWORK_SEARCH_PATH']
|
||||
if env['FRAMEWORK_SEARCH_PATH']:
|
||||
python_link_flag = '-F%s -framework Python -Z' % env['FRAMEWORK_SEARCH_PATH']
|
||||
else:
|
||||
link_prefix = env['PYTHON_SYS_PREFIX']
|
||||
if '.framework' in link_prefix:
|
||||
python_link_flag = '-F%s -framework Python -Z' % os.path.dirname(link_prefix.split('.')[0])
|
||||
elif '/System' in link_prefix:
|
||||
python_link_flag = '-F/System/Library/Frameworks/ -framework Python -Z'
|
||||
else:
|
||||
link_prefix = env['PYTHON_SYS_PREFIX']
|
||||
if '.framework' in link_prefix:
|
||||
python_link_flag = '-F%s -framework Python -Z' % os.path.dirname(link_prefix.split('.')[0])
|
||||
elif '/System' in link_prefix:
|
||||
python_link_flag = '-F/System/Library/Frameworks/ -framework Python -Z'
|
||||
else:
|
||||
python_link_flag = '-F/ -framework Python'
|
||||
python_link_flag = '-F/ -framework Python'
|
||||
else:
|
||||
# on linux the linkflags end up to early in the compile flags to work correctly
|
||||
python_link_flag = '-L%s' % env['PYTHON_SYS_PREFIX'] + os.path.sep + env['LIBDIR_SCHEMA']
|
||||
|
@ -48,33 +70,31 @@ if env['CUSTOM_LDFLAGS']:
|
|||
else:
|
||||
linkflags = python_link_flag
|
||||
|
||||
plugin_env.Append(CPPPATH = env['PYTHON_INCLUDES'])
|
||||
|
||||
TARGET = plugin_env.SharedLibrary(
|
||||
# the name of the target to build, eg 'sqlite.input'
|
||||
'../%s' % PLUGIN_NAME,
|
||||
# prefix - normally none used
|
||||
SHLIBPREFIX='',
|
||||
# extension, mapnik expects '.input'
|
||||
SHLIBSUFFIX='.input',
|
||||
# list of source files to compile
|
||||
source=plugin_sources,
|
||||
# libraries to link to
|
||||
LIBS=libraries,
|
||||
# any custom linkflags, eg. LDFLAGS
|
||||
# in this case CUSTOM_LDFLAGS comes
|
||||
# from Mapnik's main SConstruct file
|
||||
# and can be removed here if you do
|
||||
# not need it
|
||||
LINKFLAGS=linkflags
|
||||
)
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
CPPPATH=allcpp_paths,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=linkflags)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
# if 'uninstall' is not passed on the command line
|
||||
# then we actually create the install targets that
|
||||
# scons will install if 'install' is passed as an arg
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(install_dest, TARGET)
|
||||
env.Alias('install', install_dest)
|
||||
# if 'uninstall' is not passed on the command line
|
||||
# then we actually create the install targets that
|
||||
# scons will install if 'install' is passed as an arg
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
'CPPPATH': python_cpppath,
|
||||
'LINKFLAGS': linkflags.replace('-Z','').split(' '),
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,35 +17,49 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'raster'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
raster_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
raster_datasource.cpp
|
||||
raster_featureset.cpp
|
||||
raster_info.cpp
|
||||
"""
|
||||
)
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
%(PLUGIN_NAME)s_info.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
libraries = []
|
||||
# Link Library to Dependencies
|
||||
libraries.append('mapnik')
|
||||
libraries = []
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../raster', source=raster_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -191,7 +191,7 @@ featureset_ptr raster_datasource::features(query const& q) const
|
|||
|
||||
return boost::make_shared<raster_featureset<tiled_multi_file_policy> >(policy, extent_, q);
|
||||
}
|
||||
else if (width * height > (tile_size_ * tile_size_ << 2))
|
||||
else if (width * height > static_cast<int>(tile_size_ * tile_size_ << 2))
|
||||
{
|
||||
MAPNIK_LOG_DEBUG(raster) << "raster_datasource: Tiled policy";
|
||||
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,35 +17,48 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'rasterlite'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
rasterlite_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
rasterlite_datasource.cpp
|
||||
rasterlite_featureset.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
libraries = [env['PLUGINS']['rasterlite']['lib']]
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries.append('mapnik')
|
||||
libraries = [env['PLUGINS']['rasterlite']['lib']]
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../rasterlite', source=rasterlite_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
|
||||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2006 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,50 +17,70 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'shape'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
shape_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
dbfile.cpp
|
||||
shape_datasource.cpp
|
||||
shape_featureset.cpp
|
||||
shape_index_featureset.cpp
|
||||
shape_io.cpp
|
||||
shape_utils.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
libraries = []
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
%(PLUGIN_NAME)s_index_featureset.cpp
|
||||
%(PLUGIN_NAME)s_io.cpp
|
||||
%(PLUGIN_NAME)s_utils.cpp
|
||||
dbfile.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries.append('mapnik')
|
||||
libraries = []
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
cppdefines = []
|
||||
cxxflags = []
|
||||
|
||||
if env['SHAPE_MEMORY_MAPPED_FILE']:
|
||||
plugin_env.Append(CPPDEFINES = '-DSHAPE_MEMORY_MAPPED_FILE')
|
||||
cppdefines.append('-DSHAPE_MEMORY_MAPPED_FILE')
|
||||
|
||||
if env.get('BOOST_LIB_VERSION_FROM_HEADER'):
|
||||
boost_version_from_header = int(env['BOOST_LIB_VERSION_FROM_HEADER'].split('_')[1])
|
||||
if boost_version_from_header < 46:
|
||||
# avoid ubuntu issue with boost interprocess:
|
||||
# https://github.com/mapnik/mapnik/issues/1082
|
||||
plugin_env.Append(CXXFLAGS = '-fpermissive')
|
||||
cxxflags.append('-fpermissive')
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../shape', SHLIBSUFFIX='.input', source=shape_src, SHLIBPREFIX='', LIBS = libraries, LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
plugin_env.Append(CXXFLAGS=cxxflags)
|
||||
plugin_env.Append(CPPDEFINES=cppdefines)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
TARGET = plugin_env.SharedLibrary('../shape',
|
||||
SHLIBSUFFIX='.input',
|
||||
SHLIBPREFIX='',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=env['CUSTOM_LDFLAGS'])
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
'CXXFLAGS': cxxflags,
|
||||
'CPPDEFINES': cppdefines,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -50,6 +50,8 @@ dbf_file::dbf_file(std::string const& file_name)
|
|||
record_length_(0),
|
||||
#ifdef SHAPE_MEMORY_MAPPED_FILE
|
||||
file_(),
|
||||
#elif defined(_WINDOWS)
|
||||
file_(mapnik::utf8_to_utf16(file_name), std::ios::in | std::ios::binary),
|
||||
#else
|
||||
file_(file_name.c_str() ,std::ios::in | std::ios::binary),
|
||||
#endif
|
||||
|
|
|
@ -2,7 +2,7 @@
|
|||
*
|
||||
* This file is part of Mapnik (c++ mapping toolkit)
|
||||
*
|
||||
* Copyright (C) 2011 Artem Pavlenko
|
||||
* Copyright (C) 2013 Artem Pavlenko
|
||||
*
|
||||
* This library is free software; you can redistribute it and/or
|
||||
* modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -34,6 +34,7 @@
|
|||
// mapnik
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/global.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include <mapnik/boolean.hpp>
|
||||
#include <mapnik/util/conversions.hpp>
|
||||
#include <mapnik/geom_util.hpp>
|
||||
|
@ -76,18 +77,28 @@ shape_datasource::shape_datasource(const parameters ¶ms)
|
|||
shape_name_ = *file;
|
||||
|
||||
boost::algorithm::ireplace_last(shape_name_,".shp","");
|
||||
|
||||
#ifdef _WINDOWS
|
||||
if (!boost::filesystem::exists(mapnik::utf8_to_utf16(shape_name_) + L".shp"))
|
||||
#else
|
||||
if (!boost::filesystem::exists(shape_name_ + ".shp"))
|
||||
#endif
|
||||
{
|
||||
throw datasource_exception("Shape Plugin: shapefile '" + shape_name_ + ".shp' does not exist");
|
||||
}
|
||||
|
||||
#ifdef _WINDOWS
|
||||
if (boost::filesystem::is_directory(mapnik::utf8_to_utf16(shape_name_) + L".shp"))
|
||||
#else
|
||||
if (boost::filesystem::is_directory(shape_name_ + ".shp"))
|
||||
#endif
|
||||
{
|
||||
throw datasource_exception("Shape Plugin: shapefile '" + shape_name_ + ".shp' appears to be a directory not a file");
|
||||
}
|
||||
|
||||
#ifdef _WINDOWS
|
||||
if (!boost::filesystem::exists(mapnik::utf8_to_utf16(shape_name_) + L".dbf"))
|
||||
#else
|
||||
if (!boost::filesystem::exists(shape_name_ + ".dbf"))
|
||||
#endif
|
||||
{
|
||||
throw datasource_exception("Shape Plugin: shapefile '" + shape_name_ + ".dbf' does not exist");
|
||||
}
|
||||
|
|
|
@ -29,6 +29,7 @@
|
|||
|
||||
// mapnik
|
||||
#include <mapnik/global.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include <mapnik/box2d.hpp>
|
||||
#include <mapnik/mapped_memory_cache.hpp>
|
||||
#include <mapnik/noncopyable.hpp>
|
||||
|
@ -149,6 +150,8 @@ public:
|
|||
shape_file(std::string const& file_name) :
|
||||
#ifdef SHAPE_MEMORY_MAPPED_FILE
|
||||
file_()
|
||||
#elif defined (_WINDOWS)
|
||||
file_(mapnik::utf8_to_utf16(file_name), std::ios::in | std::ios::binary)
|
||||
#else
|
||||
file_(file_name.c_str(), std::ios::in | std::ios::binary)
|
||||
#endif
|
||||
|
|
|
@ -1,7 +1,7 @@
|
|||
#
|
||||
# This file is part of Mapnik (c++ mapping toolkit)
|
||||
#
|
||||
# Copyright (C) 2007 Artem Pavlenko, Jean-Francois Doyon
|
||||
# Copyright (C) 2013 Artem Pavlenko
|
||||
#
|
||||
# Mapnik is free software; you can redistribute it and/or
|
||||
# modify it under the terms of the GNU Lesser General Public
|
||||
|
@ -17,39 +17,54 @@
|
|||
# License along with this library; if not, write to the Free Software
|
||||
# Foundation, Inc., 51 Franklin St, Fifth Floor, Boston, MA 02110-1301 USA
|
||||
#
|
||||
#
|
||||
#
|
||||
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
prefix = env['PREFIX']
|
||||
PLUGIN_NAME = 'sqlite'
|
||||
|
||||
plugin_env = plugin_base.Clone()
|
||||
|
||||
sqlite_src = Split(
|
||||
plugin_sources = Split(
|
||||
"""
|
||||
sqlite_datasource.cpp
|
||||
sqlite_featureset.cpp
|
||||
"""
|
||||
)
|
||||
|
||||
libraries = [ 'sqlite3' ]
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
# Link Library to Dependencies
|
||||
libraries.append('mapnik')
|
||||
libraries = [ 'sqlite3' ]
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
libraries.append('boost_filesystem%s' % env['BOOST_APPEND'])
|
||||
|
||||
linkflags = env['CUSTOM_LDFLAGS']
|
||||
linkflags = []
|
||||
if env['SQLITE_LINKFLAGS']:
|
||||
linkflags.append(env['SQLITE_LINKFLAGS'])
|
||||
|
||||
input_plugin = plugin_env.SharedLibrary('../sqlite', source=sqlite_src, SHLIBPREFIX='', SHLIBSUFFIX='.input', LIBS=libraries, LINKFLAGS=linkflags)
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
libraries.append('mapnik')
|
||||
linkflags.append(env['CUSTOM_LDFLAGS'])
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(input_plugin, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
TARGET = plugin_env.SharedLibrary('../%s' % PLUGIN_NAME,
|
||||
SHLIBPREFIX='',
|
||||
SHLIBSUFFIX='.input',
|
||||
source=plugin_sources,
|
||||
LIBS=libraries,
|
||||
LINKFLAGS=(' ').join(linkflags))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], input_plugin)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(env['MAPNIK_INPUT_PLUGINS_DEST'], TARGET)
|
||||
env.Alias('install', env['MAPNIK_INPUT_PLUGINS_DEST'])
|
||||
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
'LINKFLAGS': linkflags,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -62,7 +62,6 @@ public:
|
|||
#endif
|
||||
const int rc = sqlite3_open_v2 (file_.c_str(), &db_, mode, 0);
|
||||
#else
|
||||
#warning "Mapnik's sqlite plugin is compiling against a version of sqlite older than 3.5.x which may make rendering slow..."
|
||||
const int rc = sqlite3_open (file_.c_str(), &db_);
|
||||
#endif
|
||||
if (rc != SQLITE_OK)
|
||||
|
@ -83,7 +82,6 @@ public:
|
|||
#if SQLITE_VERSION_NUMBER >= 3005000
|
||||
const int rc = sqlite3_open_v2 (file_.c_str(), &db_, flags, 0);
|
||||
#else
|
||||
#warning "Mapnik's sqlite plugin is compiling against a version of sqlite older than 3.5.x which may make rendering slow..."
|
||||
const int rc = sqlite3_open (file_.c_str(), &db_);
|
||||
#endif
|
||||
if (rc != SQLITE_OK)
|
||||
|
|
|
@ -90,7 +90,11 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
|
|||
else
|
||||
dataset_name_ = *file;
|
||||
|
||||
#ifdef _WINDOWS
|
||||
if ((dataset_name_.compare(":memory:") != 0) && (!boost::filesystem::exists(mapnik::utf8_to_utf16(dataset_name_))))
|
||||
#else
|
||||
if ((dataset_name_.compare(":memory:") != 0) && (!boost::filesystem::exists(dataset_name_)))
|
||||
#endif
|
||||
{
|
||||
throw datasource_exception("Sqlite Plugin: " + dataset_name_ + " does not exist");
|
||||
}
|
||||
|
@ -280,7 +284,11 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
|
|||
mapnik::progress_timer __stats2__(std::clog, "sqlite_datasource::init(use_spatial_index)");
|
||||
#endif
|
||||
|
||||
#ifdef _WINDOWS
|
||||
if (boost::filesystem::exists(mapnik::utf8_to_utf16(index_db)))
|
||||
#else
|
||||
if (boost::filesystem::exists(index_db))
|
||||
#endif
|
||||
{
|
||||
dataset_->execute("attach database '" + index_db + "' as " + index_table_);
|
||||
}
|
||||
|
@ -318,7 +326,11 @@ sqlite_datasource::sqlite_datasource(parameters const& params)
|
|||
{
|
||||
//extent_initialized_ = true;
|
||||
has_spatial_index_ = true;
|
||||
#ifdef _WINDOWS
|
||||
if (boost::filesystem::exists(mapnik::utf8_to_utf16(index_db)))
|
||||
#else
|
||||
if (boost::filesystem::exists(index_db))
|
||||
#endif
|
||||
{
|
||||
dataset_->execute("attach database '" + index_db + "' as " + index_table_);
|
||||
}
|
||||
|
@ -436,12 +448,20 @@ void sqlite_datasource::parse_attachdb(std::string const& attachdb) const
|
|||
// Normalize the filename and make it relative to dataset_name_
|
||||
if (filename.compare(":memory:") != 0)
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::path child_path(mapnik::utf8_to_utf16(filename));
|
||||
#else
|
||||
boost::filesystem::path child_path(filename);
|
||||
#endif
|
||||
|
||||
// It is a relative path. Fix it.
|
||||
if (! child_path.has_root_directory() && ! child_path.has_root_name())
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::path absolute_path(mapnik::utf8_to_utf16(dataset_name_));
|
||||
#else
|
||||
boost::filesystem::path absolute_path(dataset_name_);
|
||||
#endif
|
||||
|
||||
// support symlinks
|
||||
if (boost::filesystem::is_symlink(absolute_path))
|
||||
|
@ -619,9 +639,8 @@ featureset_ptr sqlite_datasource::features_at_point(coord2d const& pt, double to
|
|||
|
||||
if (dataset_)
|
||||
{
|
||||
// TODO - need tolerance
|
||||
mapnik::box2d<double> const e(pt.x, pt.y, pt.x, pt.y);
|
||||
|
||||
mapnik::box2d<double> e(pt.x, pt.y, pt.x, pt.y);
|
||||
e.pad(tol);
|
||||
std::ostringstream s;
|
||||
mapnik::context_ptr ctx = boost::make_shared<mapnik::context_type>();
|
||||
|
||||
|
|
|
@ -30,6 +30,7 @@
|
|||
|
||||
// mapnik
|
||||
#include <mapnik/debug.hpp>
|
||||
#include <mapnik/utils.hpp>
|
||||
#include <mapnik/datasource.hpp>
|
||||
#include <mapnik/params.hpp>
|
||||
#include <mapnik/geometry.hpp>
|
||||
|
@ -235,7 +236,11 @@ public:
|
|||
int flags;
|
||||
#endif
|
||||
|
||||
#ifdef _WINDOWS
|
||||
bool existed = boost::filesystem::exists(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
bool existed = boost::filesystem::exists(index_db);
|
||||
#endif
|
||||
boost::shared_ptr<sqlite_connection> ds = boost::make_shared<sqlite_connection>(index_db,flags);
|
||||
|
||||
bool one_success = false;
|
||||
|
@ -328,8 +333,12 @@ public:
|
|||
{
|
||||
try
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::remove(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
boost::filesystem::remove(index_db);
|
||||
}
|
||||
#endif
|
||||
}
|
||||
catch (...) {};
|
||||
}
|
||||
throw mapnik::datasource_exception(ex.what());
|
||||
|
@ -344,7 +353,11 @@ public:
|
|||
{
|
||||
try
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::remove(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
boost::filesystem::remove(index_db);
|
||||
#endif
|
||||
}
|
||||
catch (...) {};
|
||||
}
|
||||
|
@ -413,7 +426,13 @@ public:
|
|||
int flags;
|
||||
#endif
|
||||
|
||||
bool existed = boost::filesystem::exists(index_db);
|
||||
#ifdef _WINDOWS
|
||||
bool existed = boost::filesystem::exists(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
bool existed = boost::filesystem::exists(index_db);;
|
||||
#endif
|
||||
|
||||
|
||||
boost::shared_ptr<sqlite_connection> ds = boost::make_shared<sqlite_connection>(index_db,flags);
|
||||
|
||||
bool one_success = false;
|
||||
|
@ -460,7 +479,11 @@ public:
|
|||
{
|
||||
try
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::remove(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
boost::filesystem::remove(index_db);
|
||||
#endif
|
||||
}
|
||||
catch (...) {};
|
||||
}
|
||||
|
@ -476,7 +499,11 @@ public:
|
|||
{
|
||||
try
|
||||
{
|
||||
#ifdef _WINDOWS
|
||||
boost::filesystem::remove(mapnik::utf8_to_utf16(index_db));
|
||||
#else
|
||||
boost::filesystem::remove(index_db);
|
||||
#endif
|
||||
}
|
||||
catch (...) {};
|
||||
}
|
||||
|
|
|
@ -11,21 +11,17 @@
|
|||
|
||||
import os
|
||||
|
||||
# Give this plugin a name
|
||||
# here this happens to be the same as the directory
|
||||
PLUGIN_NAME = 'hello'
|
||||
|
||||
# Here we pull from the SCons environment exported from the main instance
|
||||
Import ('plugin_base')
|
||||
Import ('env')
|
||||
|
||||
# Give this plugin a name
|
||||
# here this happens to be the same as the directory
|
||||
PLUGIN_NAME = 'hello'
|
||||
|
||||
# the below install details are also pulled from the
|
||||
# main SConstruct file where configuration happens
|
||||
|
||||
# plugins can go anywhere, and be registered in custom locations by Mapnik
|
||||
# but the standard location is '/usr/local/lib/mapnik/input'
|
||||
install_dest = env['MAPNIK_INPUT_PLUGINS_DEST']
|
||||
|
||||
# clone the environment here
|
||||
# so that if we modify the env it in this file
|
||||
# those changes to not pollute other builds later on...
|
||||
|
@ -35,7 +31,7 @@ plugin_env = plugin_base.Clone()
|
|||
plugin_sources = Split(
|
||||
"""
|
||||
%(PLUGIN_NAME)s_datasource.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
%(PLUGIN_NAME)s_featureset.cpp
|
||||
""" % locals()
|
||||
)
|
||||
|
||||
|
@ -43,37 +39,54 @@ plugin_sources = Split(
|
|||
# directly link to
|
||||
libraries = [ '' ] # eg 'libfoo'
|
||||
|
||||
libraries.append('mapnik')
|
||||
libraries.append('boost_system%s' % env['BOOST_APPEND'])
|
||||
# link libicuuc, but ICU_LIB_NAME is used custom builds of icu can
|
||||
# have different library names like osx which offers /usr/lib/libicucore.dylib
|
||||
libraries.append(env['ICU_LIB_NAME'])
|
||||
|
||||
TARGET = plugin_env.SharedLibrary(
|
||||
# the name of the target to build, eg 'sqlite.input'
|
||||
'../%s' % PLUGIN_NAME,
|
||||
# prefix - normally none used
|
||||
SHLIBPREFIX='',
|
||||
# extension, mapnik expects '.input'
|
||||
SHLIBSUFFIX='.input',
|
||||
# list of source files to compile
|
||||
source=plugin_sources,
|
||||
# libraries to link to
|
||||
LIBS=libraries,
|
||||
# any custom linkflags, eg. LDFLAGS
|
||||
# in this case CUSTOM_LDFLAGS comes
|
||||
# from Mapnik's main SConstruct file
|
||||
# and can be removed here if you do
|
||||
# not need it
|
||||
LINKFLAGS=env.get('CUSTOM_LDFLAGS')
|
||||
)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
# this is valid if we are building an external plugin as shared library
|
||||
if env['PLUGIN_LINKING'] == 'shared':
|
||||
# plugins can go anywhere, and be registered in custom locations by Mapnik
|
||||
# but the standard location is '/usr/local/lib/mapnik/input'
|
||||
install_dest = env['MAPNIK_INPUT_PLUGINS_DEST']
|
||||
|
||||
# if 'uninstall' is not passed on the command line
|
||||
# then we actually create the install targets that
|
||||
# scons will install if 'install' is passed as an arg
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(install_dest, TARGET)
|
||||
env.Alias('install', install_dest)
|
||||
# only link mapnik if we are build an external shared object
|
||||
libraries.append('mapnik')
|
||||
|
||||
TARGET = plugin_env.SharedLibrary(
|
||||
# the name of the target to build, eg 'sqlite.input'
|
||||
'../%s' % PLUGIN_NAME,
|
||||
# prefix - normally none used
|
||||
SHLIBPREFIX='',
|
||||
# extension, mapnik expects '.input'
|
||||
SHLIBSUFFIX='.input',
|
||||
# list of source files to compile
|
||||
source=plugin_sources,
|
||||
# libraries to link to
|
||||
LIBS=libraries,
|
||||
# any custom linkflags, eg. LDFLAGS
|
||||
# in this case CUSTOM_LDFLAGS comes
|
||||
# from Mapnik's main SConstruct file
|
||||
# and can be removed here if you do
|
||||
# not need it
|
||||
LINKFLAGS=env.get('CUSTOM_LDFLAGS')
|
||||
)
|
||||
|
||||
# if the plugin links to libmapnik ensure it is built first
|
||||
Depends(TARGET, env.subst('../../../../src/%s' % env['MAPNIK_LIB_NAME']))
|
||||
|
||||
# if 'uninstall' is not passed on the command line
|
||||
# then we actually create the install targets that
|
||||
# scons will install if 'install' is passed as an arg
|
||||
if 'uninstall' not in COMMAND_LINE_TARGETS:
|
||||
env.Install(install_dest, TARGET)
|
||||
env.Alias('install', install_dest)
|
||||
|
||||
# Return the plugin building options to scons
|
||||
# This is used when statically linking the plugin with mapnik)
|
||||
plugin_obj = {
|
||||
'LIBS': libraries,
|
||||
'SOURCES': plugin_sources,
|
||||
}
|
||||
|
||||
Return('plugin_obj')
|
||||
|
|
|
@ -8,10 +8,12 @@ failures=$((failures+$?))
|
|||
|
||||
echo "*** Running C++ tests..."
|
||||
for FILE in tests/cpp_tests/*-bin; do
|
||||
${FILE};
|
||||
${FILE} -q;
|
||||
failures=$((failures+$?))
|
||||
done
|
||||
|
||||
echo
|
||||
|
||||
echo "*** Running python tests..."
|
||||
python tests/run_tests.py -q
|
||||
failures=$((failures+$?))
|
||||
|
|
|
@ -3,7 +3,7 @@
|
|||
This copyright and license do not apply to any other software
|
||||
with which this software may have been included.
|
||||
|
||||
Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
|
||||
Permission is hereby granted, free of charge, to any person obtaining
|
||||
a copy of this software and associated documentation files (the
|
||||
|
|
|
@ -1,4 +1,4 @@
|
|||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
|
||||
SCons - a software construction tool
|
||||
|
||||
|
@ -202,3 +202,4 @@ With plenty of help from the SCons Development team:
|
|||
Anthony Roach
|
||||
Terrel Shumway
|
||||
|
||||
|
||||
|
|
|
@ -76,7 +76,7 @@ way for wrapping up the functions.
|
|||
|
||||
"""
|
||||
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -97,7 +97,7 @@ way for wrapping up the functions.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Action.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Action.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -76,7 +76,7 @@ There are the following methods for internal use within this module:
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -97,7 +97,7 @@ There are the following methods for internal use within this module:
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Builder.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Builder.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import collections
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/CacheDir.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/CacheDir.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
__doc__ = """
|
||||
CacheDir support
|
|
@ -6,7 +6,7 @@ needed by most users.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +28,7 @@ needed by most users.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Debug.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Debug.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import os
|
||||
import sys
|
|
@ -10,7 +10,7 @@ from distutils.msvccompiler.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -33,7 +33,7 @@ from distutils.msvccompiler.
|
|||
#
|
||||
from __future__ import division
|
||||
|
||||
__revision__ = "src/engine/SCons/Defaults.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Defaults.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
|
||||
import os
|
|
@ -10,7 +10,7 @@ Environment
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -31,7 +31,7 @@ Environment
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Environment.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Environment.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
|
||||
import copy
|
||||
|
@ -2247,6 +2247,7 @@ class Base(SubstitutionEnvironment):
|
|||
install._UNIQUE_INSTALLED_FILES = SCons.Util.uniquer_hashables(install._INSTALLED_FILES)
|
||||
return install._UNIQUE_INSTALLED_FILES
|
||||
|
||||
|
||||
class OverrideEnvironment(Base):
|
||||
"""A proxy that overrides variables in a wrapped construction
|
||||
environment by returning values from an overrides dictionary in
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -28,7 +28,7 @@ and user errors in SCons.
|
|||
|
||||
"""
|
||||
|
||||
__revision__ = "src/engine/SCons/Errors.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Errors.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import SCons.Util
|
||||
|
|
@ -6,7 +6,7 @@ Nodes.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ Nodes.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Executor.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Executor.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import collections
|
||||
|
|
@ -7,7 +7,7 @@ stop, and wait on jobs.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -29,7 +29,7 @@ stop, and wait on jobs.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Job.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Job.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import SCons.compat
|
||||
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Memoize.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Memoize.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
__doc__ = """Memoizer
|
||||
|
|
@ -8,7 +8,7 @@ This creates a hash of global Aliases (dummy targets).
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -30,7 +30,7 @@ This creates a hash of global Aliases (dummy targets).
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Node/Alias.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import collections
|
||||
|
|
@ -11,7 +11,7 @@ that can be used by scripts or modules looking for the canonical default.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -32,7 +32,7 @@ that can be used by scripts or modules looking for the canonical default.
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/FS.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Node/FS.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import fnmatch
|
||||
import os
|
|
@ -5,7 +5,7 @@ Python nodes.
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -27,7 +27,7 @@ Python nodes.
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/Python.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Node/Python.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import SCons.Node
|
||||
|
|
@ -20,7 +20,7 @@ be able to depend on any other type of "thing."
|
|||
"""
|
||||
|
||||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -41,7 +41,7 @@ be able to depend on any other type of "thing."
|
|||
# OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
|
||||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Node/__init__.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
import collections
|
||||
import copy
|
|
@ -1,5 +1,5 @@
|
|||
#
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012 The SCons Foundation
|
||||
# Copyright (c) 2001, 2002, 2003, 2004, 2005, 2006, 2007, 2008, 2009, 2010, 2011, 2012, 2013 The SCons Foundation
|
||||
#
|
||||
# Permission is hereby granted, free of charge, to any person obtaining
|
||||
# a copy of this software and associated documentation files (the
|
||||
|
@ -21,7 +21,7 @@
|
|||
# WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
|
||||
#
|
||||
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py issue-2856:2676:d23b7a2f45e8 2012/08/05 15:38:28 garyo"
|
||||
__revision__ = "src/engine/SCons/Options/BoolOption.py 2013/03/03 09:48:35 garyo"
|
||||
|
||||
__doc__ = """Place-holder for the old SCons.Options module hierarchy
|
||||
|
Some files were not shown because too many files have changed in this diff Show more
Loading…
Reference in a new issue