Commit graph

1567 commits

Author SHA1 Message Date
Dane Springmeyer
568d3cbf41 don't use geom collection, instead diff geom per feature 2015-02-23 11:43:32 -08:00
Dane Springmeyer
20e7340699 fix compile of helloworld plugin 2015-02-23 10:36:48 -08:00
artemp
2984fb9594 revive geojson plugin 2015-02-23 19:07:26 +01:00
artemp
45a75fb876 Merge branch 'master' into mapnik-geometry 2015-02-23 10:06:43 +01:00
Dane Springmeyer
8919ae2f35 Merge pull request #2686 from rouault/gdal_input_dataset_rasterio
Gdal.input dataset rasterio improvements
2015-02-22 22:14:52 -08:00
artemp
7031099b76 Merge branch 'master' into mapnik-geometry 2015-02-20 17:03:46 +01:00
Dane Springmeyer
801a92c99f occi: defer symbol resolution till runtime for osx 2015-02-19 23:12:07 -08:00
Dane Springmeyer
8cf7172539 fix linking of occi plugin 2015-02-19 23:06:04 -08:00
artemp
1c3dbdd3ab postgis.input + use mapnik-geometry 2015-02-19 16:05:09 +01:00
artemp
9fed6fd571 shape.input - fix multi-polygon handling 2015-02-19 14:32:45 +01:00
artemp
33d45db318 c++ style - better syntax 2015-02-19 10:20:17 +01:00
Blake Thompson
5180168491 Merge branch 'master' into release/image_data_any 2015-02-18 23:03:51 -06:00
artemp
b49b8042c1 shape.input/agg - add polygon3 support 2015-02-18 18:12:47 +01:00
artemp
133f7d04ef agg_renderer - support multi_line_strings 2015-02-18 14:26:11 +01:00
artemp
8e34077aef more cleanups 2015-02-18 13:51:20 +01:00
artemp
604d7b08af use reserve to pre-allocate line_strings + cleanups 2015-02-18 13:48:05 +01:00
artemp
2e4e1f71b8 adapt to use mapnik::new_geometry::geometry (shape.input only) 2015-02-18 13:21:16 +01:00
Dane Springmeyer
a2dabb370d fix build+link of oracle plugin 2015-02-16 23:09:16 -08:00
Blake Thompson
b2c1c86d99 Merge branch 'master' into release/image_data_Any
Conflicts:
	benchmark/test_polygon_clipping.cpp
2015-02-16 14:37:01 -06:00
artemp
bb57ebd258 implement get_geometry_type() for 'large json' strategy
@springmeyer - we should talk re: validity of this approach. I know the baclground but still.
2015-02-12 15:50:13 +01:00
artemp
e8f397c41c instantiate geojson grammar using chr_iterator_type = char const* - via #2700 2015-02-12 11:51:11 +01:00
Dane Springmeyer
89a58c5879 Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any 2015-02-11 10:01:42 -08:00
Dane Springmeyer
7d2b34d654 finish fixing windows build - closes #2698 2015-02-10 19:02:32 -08:00
Dane Springmeyer
8608ea3308 only enable geojson memory mapped files if SHAPE_MEMORY_MAPPED_FILE defined (TODO: rename this define) - refs #2698 2015-02-10 18:50:27 -08:00
Dane Springmeyer
41ed56df14 Merge branch 'master' of github.com:mapnik/mapnik into vertex_adapter 2015-02-09 18:16:57 -08:00
Dane Springmeyer
578f8a7c29 report proj4 string in extra metadata for ogr plugin - refs #2650 2015-02-09 15:46:00 -08:00
artemp
e19fdad3a6 implement vertex interface in vertex_adapter and make mapnik::geometry_type immutable 2015-02-06 16:45:51 +01:00
Even Rouault
7c44b2412e gdal.input: take into account nodata_tolerance in optimized code path
Solves failures of https://travis-ci.org/mapnik/mapnik/jobs/49647112
on tiff-nodata-edge-rgba and tiff-nodata-tolerance tests
2015-02-06 00:41:57 +01:00
Even Rouault
efdca26f2d gdal.input: optimize nodata handling in RGB case
When the data type is Byte, instead of reading a first time
the red band to deduce the value of the alpha component of
the output image, read the RGB bands first.
2015-02-05 20:38:27 +01:00
Even Rouault
073bad21c0 gdal.input: use GDALDataset::RasterIO() to read RGB sources
Enabled when the R,G,B channels are bands 1, 2 and 3
And also read the alpha channel at the same time, if it is band 4
2015-02-05 20:33:52 +01:00
Blake Thompson
ffb34544e6 Merge branch 'master' into release/image_data_any 2015-02-04 15:46:54 -06:00
Blake Thompson
2b8bd59d82 A large set of updates:
* Added new gray data types adding those to the variants and updating all the code necessary for them
* Added basic SSE to the image compare method, (only for RGBA) must be enabled with the -DSSE_MATH flag this is not yet put into the build process in any location.
* Fixed the resulting image for some TIFF visual tests, most likely they were incorrect due to fixes in TIFF reader
* Added some MAPNIK_DECL where necessary to grid rendering.
* Added support for more data types in GDAL plugin with grayscale images.
* Added views for all the new gray data types
* Updated python bindings for new gray data types.

Ref #2681
2015-02-04 15:41:58 -06:00
artemp
eec661d263 geojson plugin
* use parse_geojson(Iterator start, Iterator end) signiture
* use Iterator = char const*
* remove unneeded I/O in 'initialise_index'
* use memory mapped file (currently #if/def)
2015-02-03 13:37:49 +01:00
Dane Springmeyer
71e7faed0d Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any
Conflicts:
	tests/python_tests/image_test.py
	tests/python_tests/image_tiff_test.py
	tests/visual_tests/images/tiff-opaque-edge-raster2-600-400-1.0-agg-reference.png
	tests/visual_tests/images/tiff-opaque-edge-raster2-600-400-2.0-agg-reference.png
2015-02-03 00:05:15 -08:00
Dane Springmeyer
192f62ecbf turn off default debug prints 2015-02-02 22:57:16 -08:00
Dane Springmeyer
5551cae0be cache GDALDataset object for re-use 2015-02-02 22:50:17 -08:00
artemp
89e516b493 unicode string grammar via boost/libs/spirit/example/qi/json/json/parser/grammar.hpp
update json based grammars
2015-02-02 11:22:54 +01:00
artemp
e3c96666c4 json - make feature_collection_grammar "on-feature" callback based 2015-01-29 12:33:18 +01:00
Dane Springmeyer
4b3f69e851 #2651 is fixed, remove workaround in postgis plugin 2015-01-28 18:18:09 -08:00
artemp
0d62e0f83c link to Oracle client library (libclntsh) to avoid missing symbols - ref #2659 2015-01-28 13:07:03 +01:00
Dane Springmeyer
1753d0ab47 require boost >= 1.56 for geojson/topojson plugins 2015-01-27 22:20:03 -08:00
Dane Springmeyer
d94f5a0cee get pgraster tests passing again + update expected images - refs #2639 2015-01-26 22:14:38 -08:00
Dane Springmeyer
48982c0619 Merge branch 'master' of github.com:mapnik/mapnik into release/image_data_any
Conflicts:
	tests/python_tests/image_tiff_test.py
2015-01-26 20:09:00 -08:00
artemp
2a50372d25 use correct grammar instantiation 2015-01-26 12:51:34 +01:00
artemp
a1c562c6fc cleanup 2015-01-26 12:51:10 +01:00
artemp
cc47bfd7fa extract attributes schema + remove std::cerr 2015-01-26 11:09:06 +01:00
artemp
2a3af1eb40 move boost.geometry <-- mapnik::box2d<double> into separate header for better modularity and code re-use 2015-01-26 10:37:09 +01:00
artemp
1263bc9c2e merge large geojson plug-in into geojson.input 2015-01-26 10:19:18 +01:00
artemp
44905ffc43 geojson.input - use adapted box2d<double> as box_type + make spatial index compatible with large_geojson 2015-01-26 09:42:06 +01:00
artemp
d45b9db86e remove unused include directives 2015-01-26 09:41:20 +01:00
Blake Thompson
31a0caf2e4 Merge branch 'master' into release/image_data_any 2015-01-25 14:09:29 -06:00
artemp
7f0e77d172 Merge branch 'master' into large-geojson 2015-01-23 18:12:33 +01:00
Dane Springmeyer
ec111c8a27 add extra metadata to lyr desc + use for srid/keyfield in postgis - closes #2650 2015-01-22 18:44:56 -08:00
Dane Springmeyer
faddf1a615 fix compile of rasterlite plugin 2015-01-22 15:59:01 -08:00
Dane Springmeyer
4a1f4a9b5e Use geometry_table_ rather than table_ for SRID lookup
- this will result in a faster query in the case that
   the user provides an explicit geometry_table option
2015-01-22 15:55:30 -08:00
Blake Thompson
51172c8fdf Move image_data.hpp to image.hpp and renamed most everything from image_data to image alone. This might lead to the need to clean up some variables that are currently named image through out the code at some time, but I think in the long term is much better as image is a better name for the base class. 2015-01-22 11:39:37 -06:00
artemp
58f770bf85 support BOOST_VERSION < 105600 2015-01-22 16:34:28 +01:00
artemp
e42d0deb61 correct types usage 2015-01-22 16:23:44 +01:00
artemp
2b82157127 cleanup 2015-01-22 16:21:01 +01:00
artemp
669d369e30 Merge branch 'master' into large-geojson 2015-01-22 16:12:14 +01:00
Blake Thompson
e01ce5b7d6 Changed image_data_gray* to image_gray* Ref #2633. 2015-01-21 21:08:04 -06:00
Blake Thompson
22a384ef33 Moved image_data_rgba8 to image_rgba8. Ref #2633 2015-01-21 20:31:02 -06:00
Blake Thompson
0f388ed68f Changed the name of image_data_any to image_any. Moved header file for image_data_any to image_any. Ref #2633 2015-01-21 19:40:12 -06:00
Dane Springmeyer
d6175adb1a Update README.md 2015-01-21 14:28:12 -08:00
artemp
9ba25cefe4 large_geojson - use 'C' style I/O for performance 2015-01-20 11:30:27 +01:00
artemp
85cacfe378 use vector<char> as a buffer 2015-01-20 10:36:34 +01:00
artemp
bfe1d63ea0 debug : print total extent 2015-01-19 22:06:24 +01:00
artemp
1f693b8fa2 larger_geojson - store {offset, size} in spatial index and remove multi_pass requirement
TODO: try std::fread instead of ifstream, use std::vector<uint8_t> instead of std::string
2015-01-19 18:10:59 +01:00
artemp
f50a34d1b8 use boost::spirit::iterator_policies::first_owner in multi_pass 2015-01-16 17:54:04 +01:00
artemp
da02dc40c2 sort index array by offsets 2015-01-16 17:19:59 +01:00
artemp
0c280b5066 reduce verbosity 2015-01-16 16:41:38 +01:00
artemp
788fd8c80b large_geojson.input - initial implementation 2015-01-16 16:22:46 +01:00
Blake Thompson
4184f75011 Moved premultiply and demultiply out of image_32 and other parts of the code. The image_data object is now responsible for keeping track of its own premultiplied_alpha status. Created a new utility method in image_util to preform premultiplication.
Added visitor pattern to several different methods as well to prepare for image_data_any including compositing.

Ref #2633
2015-01-14 12:42:30 -06:00
Dane Springmeyer
248c8a79c2 enable rasterlite error again, accidentally disabled in 62dbfea 2015-01-09 16:13:57 -08:00
Dane Springmeyer
62dbfeaa28 fix rasterlite plugin + add visual test - closes #2630 2015-01-09 16:13:04 -08:00
Dane Springmeyer
ac04512bb5 fix rasterlite linking when deps are static libs 2015-01-09 15:37:45 -08:00
artemp
5361d21beb move mapnik::noncopyable to mapnik::util::noncopyable where it belongs 2015-01-07 13:11:09 +01:00
artemp
18554ec0b1 remove static_visitor usage and rely on automatic result type deduction
(NOTE: expression_evaluator requires  ```using result_type = T1;``` )

Conflicts:
	src/image.cpp
2015-01-07 11:39:06 +01:00
artemp
ce291a553b I don't see enough performance gain to justify this - reverting for now
Revert "shape.input - sqeeze a bit more performance by reinterpret casting bytes array to point {double,double}"

This reverts commit 2f8426a019.
2014-12-18 18:44:04 +01:00
artemp
2f8426a019 shape.input - sqeeze a bit more performance by reinterpret casting bytes array to point {double,double}
avoiding one std::vector memory allocation - NOTE: this works because coordinates are stored in Double: Signed 64-bit IEEE double-precision floating point number (8 bytes) with little endian byte order - ref #2151
2014-12-18 11:57:52 +01:00
artemp
4f93b7c879 shape.input - avoid expensive hit_test and instead use relatively cheap orientation test to distinguish
between inner and outter rings (Polygon/NultiPolygon) -- ref #2151  https://github.com/mapbox/unpacker/issues/324

```txt
A polygon consists of one or more rings. A ring is a connected sequence of four or more
points that form a closed, non-self-intersecting loop. A polygon may contain multiple
outer rings. The order of vertices or orientation for a ring indicates which side of the ring
is the interior of the polygon. The neighborhood to the right of an observer walking along
the ring in vertex order is the neighborhood inside the polygon. Vertices of rings defining
holes in polygons are in a counterclockwise direction. Vertices for a single, ringed
polygon are, therefore, always in clockwise order. The rings of a polygon are referred to
as its parts.
```
2014-12-18 11:23:38 +01:00
artemp
6130b7f40d set nodata for single band raster (got missed in spaghetti code) 2014-12-17 14:23:42 +01:00
artemp
a59d634ffc nodata value can be floating point 2014-12-17 14:22:30 +01:00
artemp
5adbd85439 explicit std::move 2014-12-17 11:05:13 +01:00
artemp
1dfad4b10b raster.input - attempt getting bounding box from image_reader 2014-12-10 12:54:35 +01:00
Dane Springmeyer
cf4f775855 Merge branch 'master' of github.com:mapnik/mapnik into image_data_any 2014-12-09 10:31:19 -05:00
Dane Springmeyer
5504692a43 remove duplicate include 2014-12-09 10:30:55 -05:00
Rafa de la Torre
af4c2620aa Ignore overviews with 0 scale in pgraster
refs #2551

Postgis raster_columns view is returning NULL values for raster
overviews with large scale factors. That issue in postgis is described
in http://trac.osgeo.org/postgis/ticket/3006

This causes two main problems:

  - The first overview with scale = NULL is wrongly chosen for rendering
    always

  - The messed up scaling factor causes the render symbolizer to spent
    an insane amount of CPU and memory to render a messed up tiles.

The patch in postgis is expected to be released with the new version, a
few months from now.

Conflicts:
	plugins/input/pgraster/pgraster_datasource.cpp
2014-12-04 12:29:16 -05:00
Rafa de la Torre
6cb8b6e14b Ignore overviews with 0 scale in pgraster
refs #2551

Postgis raster_columns view is returning NULL values for raster
overviews with large scale factors. That issue in postgis is described
in http://trac.osgeo.org/postgis/ticket/3006

This causes two main problems:

  - The first overview with scale = NULL is wrongly chosen for rendering
    always

  - The messed up scaling factor causes the render symbolizer to spent
    an insane amount of CPU and memory to render a messed up tiles.

The patch in postgis is expected to be released with the new version, a
few months from now.

Conflicts:
	plugins/input/pgraster/pgraster_datasource.cpp
2014-12-04 11:09:44 -05:00
artemp
38da080f82 make concrete image_data type names more expressive and explicit about color channels/depth:
image_data_32 -> image_data_rgba8
image_data_8  -> image_data_gray8
image_data_16 -> image_data_gray16
image_data_float32  -> image_data_gray32f

NOTE: currently image_data_gray16::pixel_type = std::int16_t (signed 16 bit int) to match GDAL
should we support unsigned types?
2014-12-04 11:02:42 +01:00
artemp
de7a268333 read single band as int16 then agg_scale and colorize in gray16 color space, output rgb8 (aka image_data_32)
NOTE: proof-of-concept needed re-factoring/duplicate code removal
2014-12-03 18:19:44 +01:00
artemp
6fc8002dec use new image_reader API 2014-12-03 10:58:05 +01:00
Dane Springmeyer
46215c0f35 fix compile of pgraster plugin 2014-12-03 00:35:34 -05:00
artemp
6fec43bf9e gdal - read single band as image_data_float32
(scaling/compositing FIXME)
2014-11-28 12:51:23 +01:00
artemp
bf9c99e3d3 initial image_data_any implentation (work-in-progress) 2014-11-26 12:22:36 +01:00
artemp
33c1d21b7f use four letter abriviations to determine datatypes (https://www.sqlite.org/datatype3.html) 2014-11-25 11:09:42 +01:00
Artem Pavlenko
db4b74e8bb Merge pull request #2580 from StevenLooman/master
Tests and fix for SQLite datasource missing column
2014-11-24 12:51:55 +01:00
artemp
ee9481cb38 feature_collection_grammar : allow passing start_id at parse time - #2582 2014-11-24 12:26:11 +01:00
Dane Springmeyer
62d5cf7f16 fix error message in geojson plugin 2014-11-21 19:57:24 -08:00
Steven Looman
07a07c6268 Default to string type when column type could not be determined. Refs #2579 2014-11-20 18:48:31 +01:00
artemp
333965b588 update copyright year 2014-11-20 15:25:50 +01:00
Dane Springmeyer
437d486bbd fix building with PLUGIN_LINKING=static 2014-11-11 14:42:53 -08:00
Dane Springmeyer
4a2735fe91 c++ style: use reinterpret_cast rather than c style casts 2014-11-10 16:53:58 -08:00
Robert Coup
76d5bdae8c Merge pull request #2556 from stephend/master
Throw datasource_exception on GDAL RasterIO() failures
2014-11-05 18:21:13 +13:00
Dane Springmeyer
a65987af31 geojson plugin: fix compile against boost 1.57 2014-11-04 11:41:23 -05:00
Stephen Davis
824c99f565 throw datasource_exception on GDAL RasterIO failures 2014-11-03 11:24:38 +13:00
Dane Springmeyer
f34ac45b86 remove unneeded osm files - refs #2547 2014-10-27 08:56:58 -07:00
Jérémy Lal
87f9481621 Add missing argument to mapnik::raster call 2014-10-24 14:58:16 +02:00
Dane Springmeyer
15a2acf0d5 silence warnings in pgraster plugin - refs #2356 2014-10-22 15:33:25 -07:00
Dane Springmeyer
ca3078938c simplify and install mapnik wkt and json libs 2014-10-22 00:09:22 -07:00
Dane Springmeyer
aae4a20ec9 fix various -Wunused-parameter warnings 2014-10-21 20:23:17 -07:00
Dane Springmeyer
d25f0c316a silence more warnings 2014-10-21 17:44:47 -07:00
Dane Springmeyer
87192bfcb7 silence more boost warnings 2014-10-21 16:57:44 -07:00
Dane Springmeyer
83588937b9 silence boost warnings 2014-10-21 16:37:27 -07:00
Dane Springmeyer
18183aed2a fix a few -Wunused-parameter warnings 2014-10-20 22:28:40 -07:00
Dane Springmeyer
dac7170616 break out topojson parsing grammar 2014-10-15 18:59:39 -07:00
Dane Springmeyer
bdb1f900eb sync code between geojson and topojson rtree impl 2014-10-15 18:51:53 -07:00
Dane Springmeyer
4e8125d2ad use c file io wrapper in geojson/topojson plugins 2014-10-15 11:36:57 -07:00
artemp
2e4c5b3ee0 use finer control over rtree instantiation 2014-10-15 15:15:31 +01:00
Dane Springmeyer
1c80cfe44f fix geojson plugin linking #2535 2014-10-14 20:26:13 -07:00
Jiri Drbalek
959451af5d sqlite plugin - disable shared cache for sqlite prior to 3.7.15 2014-10-13 13:07:21 +00:00
Dane Springmeyer
44bc5b59d6 break out wkt/json grammars into separate libraries 2014-10-13 01:06:36 -07:00
Jiri Drbalek
b6438a80d1 fix multiple attach to the same sqlite database 2014-10-01 14:02:38 +00:00
Dane Springmeyer
4cbc139689 remove boost::format usage 2014-09-30 18:35:07 -07:00
Dane Springmeyer
c53bcd99a6 csv plugin: only attempt to parse ascii as numbers - closes #2450 2014-09-30 16:30:45 -07:00
Jochen Topf
da2c0a6949 Use std uint8_t instead of boost::uint8_t
Broke compilation
2014-09-30 15:58:29 +02:00
Dane Springmeyer
41b0e0e16b remove scoped_array include 2014-09-29 19:43:00 -07:00
Dane Springmeyer
5e250e0dd9 avoid boost stdint usage 2014-09-29 19:42:34 -07:00
Dane Springmeyer
ecdb12ac07 speed up topojson parsing - closes #2397 2014-09-04 20:26:52 -07:00
Dane Springmeyer
7d5d02e031 Merge branch 'master' of github.com:mapnik/mapnik into 3x-msvs 2014-09-04 09:22:53 -07:00
artemp
72e2f4446f re-implement mapnik::value deriving from value_base and update across core
fix mapnik::value conversions in topojson plugin
2014-09-04 17:10:13 +01:00
Dane Springmeyer
d577ef8719 Merge branch 'master' of https://github.com/mapnik/mapnik into 3x-msvs 2014-08-29 18:56:43 -07:00
Dane Springmeyer
6074e87bbb include optional - fix msvs compile - refs #2396 2014-08-28 19:29:07 -07:00
Dane Springmeyer
8faa358067 Merge pull request #2400 from mapnik/single-pass-json
Drop multi_pass iterator
2014-08-28 19:12:04 -07:00
artemp
ecfaec1027 rename ctrans.hpp to view_transform.hpp 2014-08-28 10:29:04 +01:00
artemp
de22d5900c rename CoordTransform to view_transform to better reflect its purpose and be consistent 2014-08-28 10:17:15 +01:00
Dane Springmeyer
f6a7bddca3 Merge pull request #2394 from strk/master-pgis-simplify-20th
Bring postgis simplification factor back to 1/20 of a pixel
2014-08-26 21:25:24 -07:00
Dane Springmeyer
cc970dea1c remove unused statistics member 2014-08-26 18:36:01 -07:00
Dane Springmeyer
616896c6ee remove spirit::multi_pass - refs #2397 2014-08-26 16:22:12 -07:00
Sandro Santilli
0d098a0467 Bring postgis simplification factor back to 1/20 of a pixel
This was the value in 2.2.x and was accidentally changed as part
of a completely unrelated commit, see:
http://github.com/mapnik/mapnik/issues/1639#issuecomment-53388951
2014-08-26 13:03:22 +02:00
Dane Springmeyer
3e1ab9beab fix gdal compile with msvs 2013 - closes #2257 2014-08-25 17:50:45 -07:00
Dane Springmeyer
225810e3ee ogr: also accept 'inline' arg like geojson/topojson/csv plugins 2014-08-25 11:59:32 -07:00
Dane Springmeyer
7cb907e13f avoid warning from boost geometry
Conflicts:
	plugins/input/geojson/geojson_datasource.hpp
2014-08-24 16:00:27 -07:00
artemp
a4cd4821a0 ohh evil #ifdef/#endif - fix compiling with boost < 1.56 2014-08-21 12:21:47 +01:00
artemp
6dee6c1c86 fix typo :) 2014-08-21 11:40:42 +01:00
artemp
455168c6af topojson - use bulk-loading packing algorithm for rtree creation
(http://www.boost.org/doc/libs/1_56_0/libs/geometry/doc/html/geometry/spatial_indexes/introduction.html)
use unique_ptr where appropriate
2014-08-21 11:14:33 +01:00
Sandro Santilli
01b56c3606 Add mention of CartoDB support in pgraster input plugin code 2014-08-20 17:31:41 +02:00
artemp
fd7682aab2 c++ pedantic 2014-08-20 16:11:27 +01:00
artemp
e4b3a46e3e fix geojson plugin, even better name is geometry_index (to avoid confusion) 2014-08-20 16:08:41 +01:00
artemp
2d50a2dccc topojson plugin : fix spatial index population, rename 'count' to 'index' 2014-08-20 16:00:12 +01:00
artemp
1e4368e97a fix compilation with boost < 1.56 2014-08-20 09:42:28 +01:00
Dane Springmeyer
9020b8c6df adapt geojson+topojson plugins to boost 1.56 - refs #2367 2014-08-19 14:48:21 -07:00
Dane Springmeyer
7c1f9b1490 fix compile with older OGR 2014-08-18 21:33:37 -07:00
Dane Springmeyer
a4c926ac8a don't throw for OGR layers with no features - refs #2260 #2352 #2354
Conflicts:
	tests/python_tests/ogr_test.py
2014-08-15 19:49:33 -07:00
artemp
1d02eb0d1d Merge branch 'master' into custom-variant-2 2014-08-13 09:06:58 +01:00
Dane Springmeyer
6ec3905fc5 fix redefinition warnings + dodge a compile error due to clashing toupper in python + clib by using iosfwd - closes #2355 2014-08-12 23:52:31 -07:00
Dane Springmeyer
7da05accc0 Merge branch 'master' of github.com:mapnik/mapnik into custom-variant-2 2014-08-12 23:19:26 -07:00
Joel Brown
c517b20237 add ogr plugin error handling to master/3.x 2014-08-12 23:09:42 -07:00
Dane Springmeyer
44844f7bd0 postgis: disable NOTICES by default - refs #2296 2014-08-12 20:30:34 -07:00
Dane Springmeyer
e4c7e2419c make sure pgraster is rebuilt if headers change inside the postgis plugin dir 2014-08-12 20:29:51 -07:00
Dane Springmeyer
e03448ecb9 port pg_raster plugin to c++11/recent 3.x changes 2014-08-12 15:14:25 -07:00
Dane Springmeyer
4e12b999f0 pull in pgraster plugin by @strk from 2.3.x to master/3.x - refs #2329 #1660 2014-08-12 15:03:51 -07:00
artemp
6136a32092 Merge branch 'master' into custom-variant-2 2014-08-12 19:44:37 +01:00
Dane Springmeyer
c604e925f5 apply #2350 to master/3.x too 2014-08-12 11:44:34 -07:00
Dane Springmeyer
a13fa6720a csv: parse true/false as boolean in csv plugin - closes #1540 2014-08-12 11:16:05 -07:00
artemp
fb2dd283c0 fix DEBUG=yes compilation 2014-08-12 19:10:32 +01:00
Dane Springmeyer
c55a3c3130 csv plugin: support conversion to boolean types - closes #1540 2014-08-12 10:00:37 -07:00
artemp
f57f3a7f83 ammend topojson_grammar and remove last boost::variant usage 2014-08-12 16:16:17 +01:00
artemp
95cea92a4a convert all boost::variant to util::variant
apart from topojson (TODO)
2014-08-12 13:40:45 +01:00
artemp
e315922b70 Merge branch 'master' into custom-variant-2
Conflicts:
	include/mapnik/value.hpp
2014-08-11 11:53:59 +01:00
artemp
43b8069698 topojson - revert to using boost::variant for mapnik::topojson::geometry (TODO) 2014-08-11 11:51:19 +01:00
Dane Springmeyer
d61efc0b5a -fvisibility=hidden fixes on osx with -flto 2014-08-09 13:44:42 -07:00
artemp
ade32abcd8 mapnik::util::variant in mapnik::value 2014-08-08 12:13:49 +01:00
Dane Springmeyer
d27b45553a use emplace/emplace_back over insert/push_back - refs #2336 2014-08-05 15:19:37 -07:00
Dane Springmeyer
05f49f9cac visual tests - keep default debug severity levels 2014-08-04 19:18:38 -07:00
artemp
3b707d1c79 opps - remove unused itarators decl 2014-07-30 16:41:10 +01:00
artemp
eee750e074 c++11 - range based for loop (tidy) 2014-07-30 16:39:49 +01:00
artemp
61c05bfb45 re-use feature_collection_grammar 2014-07-30 11:28:23 +01:00
artemp
3f5344ca82 geojson - make feature_collection_grammar not dependend on mapnik::context 2014-07-30 11:01:54 +01:00
Dane Springmeyer
8feedd94cd rename mapnik::boolean to mapnik::boolean_type - closes #1899 2014-07-28 19:46:49 -07:00
Dane Springmeyer
914b4c2e8b support for inline topojson (in memory string) - closes #2058 2014-07-28 19:26:35 -07:00
Dane Springmeyer
9f9f981731 Static const topojson grammar for top speed - refs #2320 2014-07-28 19:17:07 -07:00
Dane Springmeyer
5fc2e01531 fix geojson plugin by avoiding static const grammar for now 2014-07-28 18:44:56 -07:00
Dane Springmeyer
14d9127bb7 Merge pull request #2305 from strk/master-readonly
Ensure read-only transactions
2014-07-28 18:00:59 -07:00
Dane Springmeyer
d55a0010dc also move feature_collection_grammar to impl file 2014-07-28 16:51:24 -07:00
Dane Springmeyer
7f0029eb0b implement inline (in-memory string) support for GeoJSON plugin - refs #2058 2014-07-28 16:16:10 -07:00
Dane Springmeyer
c5be70ff65 refactor spirit grammars 2014-07-24 14:31:59 -07:00
Dane Springmeyer
11b0816d2a sqlite plugin: use mapnik::geometry_container alias 2014-07-24 12:08:16 -07:00
Dane Springmeyer
d1336568c5 workaround old GDAL bug regarding rgba images and alpha reporting - closes #2310 2014-07-22 14:33:59 -07:00
Sandro Santilli
25c237fdd9 Ensure read-only transactions
Closes #2142
2014-07-16 11:04:39 +02:00
Dane Springmeyer
383aa8c41a Merge pull request #2294 from Vanuan/patch-1
OSM plugin: area=yes is a polygon
2014-07-14 19:41:38 -07:00
artemp
04facd3542 mode range ``for loops`` 2014-07-08 17:02:22 +01:00
artemp
fe215a684e c++11 style : replace (almost) all typedef with type alias's 2014-07-07 18:23:15 +01:00
John Yani
5acc303a87 OSM plugin: area=yes is a polygon
Why this line is not here yet?
2014-07-05 17:56:22 +03:00
artemp
0702679bb0 don't call *params.get<std::string>("type"), instead use static datasource::name()
(FIXME: consider removing redundant 'name' in feature_layer_descriptor)
2014-06-26 10:51:24 +01:00
artemp
b197cbcdb7 tidy up 2014-06-25 09:01:20 +01:00
Dane Springmeyer
b237a604dd fix #2283 2014-06-24 17:51:28 -07:00
Sandro Santilli
4c525e0e25 Makefile tweaks for helloworld template plugin
- Do not force use of clang++ to build the plugin (broken on recent debian
   and derivates: https://bugs.debian.org/643959)
 - Do not force clean on install
 - Use -fPIC to build objects (or g++ complains)
2014-06-16 09:52:26 -07:00
Dane Springmeyer
d5ac946706 remove libcurl dependency
Conflicts:
	plugins/input/osm/dataset_deliverer.cpp
	plugins/input/osm/osm.cpp
	plugins/input/osm/osm_datasource.cpp
	plugins/input/osm/test.cpp
2014-06-16 09:52:26 -07:00
artemp
3ded23fbab move make_unique out of std namespace and allow building with c++14 compilers
( -std=c++1y )
2014-06-12 15:14:05 +01:00
Dane Springmeyer
d0b357cab7 scons: support MAPNIK_NAME option to customize libmapnik name for custom packaging 2014-06-09 13:55:56 -07:00
Dane Springmeyer
a600a1fb91 improvements to GDAL 2.x handling - refs #2259 amends cbdd112223 2014-06-02 20:25:55 -07:00
Dane Springmeyer
dcbedc007a support for GDAL >= 2.0 in ogr plugin - refs #2259 2014-06-02 20:25:48 -07:00
artemp
22aa3f4aef create shape_io object per featureset to allow datasource sharing 2014-05-30 15:37:44 +01:00
artemp
1cb03bac2f mark is_open as const 2014-05-30 15:37:23 +01:00
artemp
2812735dfd c++ style 2014-05-30 10:15:29 +01:00
Dane Springmeyer
e300a41dca variables now available as postgis datasource tokens 2014-05-13 20:47:22 -07:00
artemp
99bbb10290 c++11 : use int types from <cstdint> 2014-05-06 18:06:47 +01:00
Dane Springmeyer
ba17b9e374 add TODO comments for grammars that are not stateless - refs #2231 2014-04-30 11:04:26 -07:00
Dane Springmeyer
97a45f21bb all static grammar usage const + xml_tree cleanups 2014-04-30 10:42:05 -07:00
Dane Springmeyer
8c1e69fdb8 static grammars
- construct on first use
 - allows for faster map loading and unloading of xml loading tree
 - modified expression and transform grammars to not take args/not crash
 - simplifies interfaces, allows fast parsing from python without passing grammar instance
2014-04-30 00:11:27 -07:00
Dane Springmeyer
9e9747ffad Merge branch 'master' of github.com:mapnik/mapnik into expr-v2
Conflicts:
	src/agg/process_building_symbolizer.cpp
	src/cairo_context.cpp
	src/cairo_renderer.cpp
	src/grid/process_building_symbolizer.cpp
	src/grid/process_line_pattern_symbolizer.cpp
	src/grid/process_text_symbolizer.cpp
	tests/python_tests/images/support/marker-text-line-scale-factor-0.899.png
	tests/python_tests/images/support/marker-text-line-scale-factor-1.5.png
	tests/python_tests/images/support/marker-text-line-scale-factor-1.png
	tests/python_tests/images/support/marker-text-line-scale-factor-10.png
	tests/python_tests/images/support/marker-text-line-scale-factor-100.png
	tests/python_tests/images/support/marker-text-line-scale-factor-2.png
	tests/python_tests/images/support/marker-text-line-scale-factor-5.png
	tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png
	tests/visual_tests/test.py
2014-04-24 21:44:28 -07:00
Dane Springmeyer
39737c5f1d Merge branch '2.3.x' of github.com:mapnik/mapnik
Conflicts:
	.travis.yml
	CHANGELOG.md
	bindings/python/build.py
	include/mapnik/feature_style_processor_context.hpp
	include/mapnik/feature_style_processor_impl.hpp
	include/mapnik/json/feature_collection_grammar.hpp
	include/mapnik/json/feature_collection_parser.hpp
	include/mapnik/json/feature_generator_grammar.hpp
	include/mapnik/json/feature_parser.hpp
	include/mapnik/json/geojson_generator.hpp
	include/mapnik/json/geometry_generator_grammar.hpp
	include/mapnik/json/geometry_parser.hpp
	plugins/input/gdal/gdal_featureset.cpp
	plugins/input/geojson/geojson_datasource.cpp
	plugins/input/occi/occi_featureset.cpp
	plugins/input/osm/osm_featureset.cpp
	plugins/input/postgis/build.py
	plugins/input/postgis/connection.hpp
	src/agg/agg_renderer.cpp
	src/build.py
	src/cairo_context.cpp
	src/datasource_cache.cpp
	src/grid/process_line_symbolizer.cpp
	src/grid/process_polygon_pattern_symbolizer.cpp
	src/grid/process_polygon_symbolizer.cpp
	src/grid/process_text_symbolizer.cpp
	src/json/feature_grammar.cpp
	tests/cpp_tests/fontset_runtime_test.cpp
	tests/visual_tests/images/collision-600-400-1.0-agg-reference.png
	tests/visual_tests/images/image-filters-multi-blur-512-512-1.0-agg-reference.png
	tests/visual_tests/images/image-filters-multi-blur-512-512-2.0-agg-reference.png
	tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-1.0-agg-reference.png
	tests/visual_tests/images/image-filters-multi-blur-inflate-512-512-2.0-agg-reference.png
	tests/visual_tests/images/lines-1-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-1-600-600-1.0-agg-reference.png
	tests/visual_tests/images/lines-1-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-2-200-200-1.0-agg-reference.png
	tests/visual_tests/images/lines-2-400-400-1.0-cairo-reference.png
	tests/visual_tests/images/lines-2-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-2-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-2-800-800-2.0-agg-reference.png
	tests/visual_tests/images/lines-3-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-3-600-600-1.0-agg-reference.png
	tests/visual_tests/images/lines-3-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-200-200-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-200-200-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-400-400-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-400-400-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-600-600-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-5-800-800-1.0-agg-reference.png
	tests/visual_tests/images/lines-5-800-800-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-200-200-1.0-agg-reference.png
	tests/visual_tests/images/lines-6-200-200-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-400-400-1.0-agg-reference.png
	tests/visual_tests/images/lines-6-600-600-1.0-agg-reference.png
	tests/visual_tests/images/lines-6-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-6-800-800-1.0-agg-reference.png
	tests/visual_tests/images/lines-6-800-800-2.0-agg-reference.png
	tests/visual_tests/images/lines-shield-600-600-2.0-agg-reference.png
	tests/visual_tests/images/lines-shield-600-600-2.0-cairo-reference.png
	tests/visual_tests/images/shield-on-polygon-600-400-1.0-agg-reference.png
	tests/visual_tests/images/shield-on-polygon-600-400-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-490-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-495-100-2.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-497-100-1.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-497-100-2.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-498-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-499-100-1.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-499-100-2.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-500-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-501-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-502-100-1.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-502-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-505-100-2.0-cairo-reference.png
	tests/visual_tests/images/shieldsymbolizer-1-510-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-490-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-495-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-497-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-498-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-499-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-500-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-501-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-502-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-505-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-3-510-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-490-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-495-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-497-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-498-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-499-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-500-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-501-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-502-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-505-100-2.0-agg-reference.png
	tests/visual_tests/images/shieldsymbolizer-4-510-100-2.0-agg-reference.png
	tests/visual_tests/test.py
2014-04-24 14:50:55 -07:00
Dane Springmeyer
e8ee02877d fix OGR plugin error reporting 2014-04-22 15:31:19 -07:00
Dane Springmeyer
02d4e7fd06 postgis geometry type detection - fall through to detecting type on individual geometries if the geometry_columns only reports 'geometry' - refs mapbox/tilemill/#2099 2014-04-22 15:31:06 -07:00
Dane Springmeyer
ecbba52bc0 add code comment about curl [skip ci] 2014-04-09 09:44:43 -04:00
Dane Springmeyer
1dd481f8f7 fallback if pkg-config fails for libcurl or libpq 2014-04-09 09:40:40 -04:00
Dane Springmeyer
f1dd07fd64 fix static linking of the osm plugin against libcurl 2014-04-08 23:15:33 -04:00
Dane Springmeyer
7351879e6f Merge pull request #2193 from strk/2.3.x-no-terminate-pgis-dtor
Do not throw in postgis_datasource destruction if backend is down
2014-04-04 18:20:59 -07:00
Dane Springmeyer
55ba8d38ae Merge pull request #2182 from strk/2.3.x-all-async
Have all queries use the async interface
2014-04-03 23:59:11 -07:00
Dane Springmeyer
ce1ff9902e better linking for postgis.input using pkg-config 2014-04-02 13:26:33 -07:00
Sandro Santilli
32680434fe Do not throw in postgis_datasource destruction if backend is down
... and persist_connections is true!
Closes #2191
2014-03-26 15:39:53 +01:00
Sandro Santilli
9d04d9fef9 Do not throw in postgis_datasource destruction if backend is down
... and persist_connections is true!
Closes #2191
2014-03-26 15:35:55 +01:00
Dane Springmeyer
6c4ea66509 postgis: use max float for no-op bbox token - closes #2158 2014-03-12 13:31:45 -07:00
Dane Springmeyer
551718df59 postgis: use max float for no-op bbox token - closes #2158 2014-03-12 13:31:14 -07:00
Dane Springmeyer
c9e3248cec more auto_ptr usage to avoid bare geometry pointers 2014-03-12 13:11:51 -07:00
Sandro Santilli
bf3500d757 Have all queries use the async interface 2014-03-11 11:10:41 +01:00
Dane Springmeyer
6433d9482e Merge branch 'master' of github.com:mapnik/mapnik into expr-v2
Conflicts:
	include/mapnik/symbolizer.hpp
	src/agg/agg_renderer.cpp
	src/agg/process_line_pattern_symbolizer.cpp
	src/agg/process_line_symbolizer.cpp
	src/agg/process_polygon_pattern_symbolizer.cpp
	src/agg/process_polygon_symbolizer.cpp
	src/cairo_renderer.cpp
	src/feature_type_style.cpp
	src/grid/process_line_pattern_symbolizer.cpp
	src/grid/process_line_symbolizer.cpp
	src/grid/process_markers_symbolizer.cpp
	src/grid/process_polygon_pattern_symbolizer.cpp
	src/grid/process_polygon_symbolizer.cpp
2014-03-10 00:05:56 -07:00
Sandro Santilli
ca9b0fccab Do not attempt to PQclear a null PQresult* 2014-03-09 21:07:34 -07:00
Dane Springmeyer
b1e9aa2140 Merge pull request #2176 from strk/2.3.x-segfault-on-execute
Do not attempt to PQclear a null PQresult*
2014-03-09 21:04:48 -07:00
Sandro Santilli
749118cdee Make sure status() returns a message also on bad connection
Closes #2173.
2014-03-09 21:03:44 -07:00
Sandro Santilli
d36c39d9be Make sure status() returns a message also on bad connection
Closes #2173.
2014-03-06 10:18:21 +01:00
Sandro Santilli
9a1996620e Do not attempt to PQclear a null PQresult* 2014-03-06 10:04:10 +01:00
Dane Springmeyer
871b17f5d9 fix postgis plugin linking when statically linking on linux - refs mapnik/mapnik-packaging#123 2014-02-27 14:40:14 -08:00
Dane Springmeyer
0fbcc12678 fix static linking of gdal/ogr plugins on linux - refs mapnik/mapnik-packaging#123 2014-02-27 14:40:09 -08:00
Dane Springmeyer
f2021971f0 fix postgis plugin linking when statically linking on linux - refs mapnik/mapnik-packaging#123 2014-02-27 14:23:57 -08:00
Dane Springmeyer
6f14228e30 fix static linking of gdal/ogr plugins on linux - refs mapnik/mapnik-packaging#123 2014-02-27 14:02:24 -08:00
artemp
ecc5acbdb9 attempt to handle multi-polygons in shape.input 2014-02-24 15:20:06 +00:00
Dane Springmeyer
bcde6ae631 Merge branch 'master' of github.com:mapnik/mapnik into expr-v2 2014-02-09 13:27:24 -08:00
Dane Springmeyer
538af2515d fix rendering of multiple styles with OGR plugin - refs #2048 and mapbox/tilemill#2202 2014-01-31 19:13:24 -08:00
Dane Springmeyer
b3e6ea48b0 fix rendering of multiple styles with OGR plugin - refs #2048 and mapbox/tilemill#2202 2014-01-31 19:12:31 -08:00
Dane Springmeyer
f286363ad0 more consistent memset/memcpy usage 2014-01-28 15:05:10 -08:00
Dane Springmeyer
a98de6a348 Merge branch 'master' of github.com:mapnik/mapnik into expr-v2
Conflicts:
	include/mapnik/expression_grammar_impl.hpp
	src/expression.cpp
2014-01-27 13:56:36 -08:00
Dane Springmeyer
84166882d9 minimum boost version is 1.47 - remove obsolete code handling older versions 2014-01-27 13:19:21 -08:00
Dane Springmeyer
777e067770 remove workaround for boost less than 1.46 since 1.47 is now the min needed - refs #1082 2014-01-27 12:24:20 -08:00
Dane Springmeyer
d82d9d382f fix compile with BOOST_SPIRIT_NO_PREDEFINED_TERMINALS 2014-01-26 16:06:32 -08:00
Dane Springmeyer
63ea37b4c2 further no terminal port 2014-01-26 14:49:03 -08:00
Dane Springmeyer
49aadae244 Merge branch 'master' of github.com:mapnik/mapnik into expr-v2
Conflicts:
	tests/visual_tests/test.py
2014-01-17 20:04:09 -08:00
Dane Springmeyer
77da5d919c further gdal nodata handling improvements - refs #2023
Conflicts:
	plugins/input/gdal/gdal_featureset.cpp
2014-01-17 19:46:35 -08:00
Dane Springmeyer
8faf5511f1 further gdal nodata handling improvements - refs #2023 2014-01-17 19:13:53 -08:00