mapnik 0.2.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (173) hide show
  1. data/.autotest +35 -0
  2. data/.yardopts +1 -0
  3. data/Gemfile +14 -0
  4. data/LICENSE +19 -0
  5. data/Manifest.txt +172 -0
  6. data/README.rdoc +107 -0
  7. data/Rakefile +43 -0
  8. data/demo/data/COPYRIGHT.txt +3 -0
  9. data/demo/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.dbf +0 -0
  10. data/demo/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.prj +1 -0
  11. data/demo/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.shp +0 -0
  12. data/demo/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.shx +0 -0
  13. data/demo/data/boundaries.dbf +0 -0
  14. data/demo/data/boundaries.prj +1 -0
  15. data/demo/data/boundaries.sbx +0 -0
  16. data/demo/data/boundaries.shp +0 -0
  17. data/demo/data/boundaries.shx +0 -0
  18. data/demo/data/boundaries_l.dbf +0 -0
  19. data/demo/data/boundaries_l.prj +1 -0
  20. data/demo/data/boundaries_l.sbx +0 -0
  21. data/demo/data/boundaries_l.shp +0 -0
  22. data/demo/data/boundaries_l.shx +0 -0
  23. data/demo/data/ontdrainage.dbf +0 -0
  24. data/demo/data/ontdrainage.prj +1 -0
  25. data/demo/data/ontdrainage.sbx +0 -0
  26. data/demo/data/ontdrainage.shp +0 -0
  27. data/demo/data/ontdrainage.shx +0 -0
  28. data/demo/data/popplaces.dbf +0 -0
  29. data/demo/data/popplaces.prj +1 -0
  30. data/demo/data/popplaces.sbx +0 -0
  31. data/demo/data/popplaces.shp +0 -0
  32. data/demo/data/popplaces.shx +0 -0
  33. data/demo/data/qcdrainage.dbf +0 -0
  34. data/demo/data/qcdrainage.prj +1 -0
  35. data/demo/data/qcdrainage.sbx +0 -0
  36. data/demo/data/qcdrainage.shp +0 -0
  37. data/demo/data/qcdrainage.shx +0 -0
  38. data/demo/data/roads.dbf +0 -0
  39. data/demo/data/roads.prj +1 -0
  40. data/demo/data/roads.sbx +0 -0
  41. data/demo/data/roads.shp +0 -0
  42. data/demo/data/roads.shx +0 -0
  43. data/demo/data/test/charplacement.dbf +0 -0
  44. data/demo/data/test/charplacement.shp +0 -0
  45. data/demo/data/test/charplacement.shx +0 -0
  46. data/demo/data/test/displacement.dbf +0 -0
  47. data/demo/data/test/displacement.shp +0 -0
  48. data/demo/data/test/displacement.shx +0 -0
  49. data/demo/data/test/overlap.dbf +0 -0
  50. data/demo/data/test/overlap.shp +0 -0
  51. data/demo/data/test/overlap.shx +0 -0
  52. data/demo/data/test/raw/charplacement.gfs +25 -0
  53. data/demo/data/test/raw/charplacement.gml +99 -0
  54. data/demo/data/test/raw/charplacement.xsd +36 -0
  55. data/demo/data/test/raw/displacement.gfs +25 -0
  56. data/demo/data/test/raw/displacement.gml +173 -0
  57. data/demo/data/test/raw/displacement.xsd +36 -0
  58. data/demo/data/test/raw/overlap.gfs +25 -0
  59. data/demo/data/test/raw/overlap.gml +127 -0
  60. data/demo/data/test/raw/overlap.xsd +36 -0
  61. data/demo/data/test/raw/textspacing.gfs +25 -0
  62. data/demo/data/test/raw/textspacing.gml +117 -0
  63. data/demo/data/test/raw/textspacing.xsd +36 -0
  64. data/demo/data/test/readme.txt +3 -0
  65. data/demo/data/test/regenerate.sh +20 -0
  66. data/demo/data/test/textspacing.dbf +0 -0
  67. data/demo/data/test/textspacing.shp +0 -0
  68. data/demo/data/test/textspacing.shx +0 -0
  69. data/demo/rundemo.rb +145 -0
  70. data/demo/sinatra/demo.rb +31 -0
  71. data/demo/sinatra/public/css/demo_map.css +7 -0
  72. data/demo/sinatra/public/index.html +13 -0
  73. data/demo/sinatra/public/javascripts/demo_map.js +42 -0
  74. data/ext/ruby_mapnik/_mapnik.cpp +52 -0
  75. data/ext/ruby_mapnik/_mapnik.h +65 -0
  76. data/ext/ruby_mapnik/_mapnik_color.rb.cpp +179 -0
  77. data/ext/ruby_mapnik/_mapnik_color.rb.h +32 -0
  78. data/ext/ruby_mapnik/_mapnik_coord.rb.cpp +145 -0
  79. data/ext/ruby_mapnik/_mapnik_coord.rb.h +32 -0
  80. data/ext/ruby_mapnik/_mapnik_datasource.rb.cpp +170 -0
  81. data/ext/ruby_mapnik/_mapnik_datasource.rb.h +32 -0
  82. data/ext/ruby_mapnik/_mapnik_datasource_cache.rb.cpp +87 -0
  83. data/ext/ruby_mapnik/_mapnik_datasource_cache.rb.h +32 -0
  84. data/ext/ruby_mapnik/_mapnik_envelope.rb.cpp +220 -0
  85. data/ext/ruby_mapnik/_mapnik_envelope.rb.h +32 -0
  86. data/ext/ruby_mapnik/_mapnik_expression.rb.cpp +91 -0
  87. data/ext/ruby_mapnik/_mapnik_expression.rb.h +32 -0
  88. data/ext/ruby_mapnik/_mapnik_feature.rb.cpp +93 -0
  89. data/ext/ruby_mapnik/_mapnik_feature.rb.h +32 -0
  90. data/ext/ruby_mapnik/_mapnik_font_engine.rb.cpp +71 -0
  91. data/ext/ruby_mapnik/_mapnik_font_engine.rb.h +32 -0
  92. data/ext/ruby_mapnik/_mapnik_layer.rb.cpp +208 -0
  93. data/ext/ruby_mapnik/_mapnik_layer.rb.h +32 -0
  94. data/ext/ruby_mapnik/_mapnik_line_pattern_symbolizer.rb.cpp +71 -0
  95. data/ext/ruby_mapnik/_mapnik_line_pattern_symbolizer.rb.h +32 -0
  96. data/ext/ruby_mapnik/_mapnik_line_symbolizer.rb.cpp +43 -0
  97. data/ext/ruby_mapnik/_mapnik_line_symbolizer.rb.h +32 -0
  98. data/ext/ruby_mapnik/_mapnik_map.rb.cpp +489 -0
  99. data/ext/ruby_mapnik/_mapnik_map.rb.h +32 -0
  100. data/ext/ruby_mapnik/_mapnik_markers_symbolizer.rb.cpp +140 -0
  101. data/ext/ruby_mapnik/_mapnik_markers_symbolizer.rb.h +32 -0
  102. data/ext/ruby_mapnik/_mapnik_point_symbolizer.rb.cpp +150 -0
  103. data/ext/ruby_mapnik/_mapnik_point_symbolizer.rb.h +32 -0
  104. data/ext/ruby_mapnik/_mapnik_polygon_pattern_symbolizer.rb.cpp +93 -0
  105. data/ext/ruby_mapnik/_mapnik_polygon_pattern_symbolizer.rb.h +32 -0
  106. data/ext/ruby_mapnik/_mapnik_polygon_symbolizer.rb.cpp +89 -0
  107. data/ext/ruby_mapnik/_mapnik_polygon_symbolizer.rb.h +32 -0
  108. data/ext/ruby_mapnik/_mapnik_projection.rb.cpp +100 -0
  109. data/ext/ruby_mapnik/_mapnik_projection.rb.h +32 -0
  110. data/ext/ruby_mapnik/_mapnik_raster_colorizer.rb.cpp +162 -0
  111. data/ext/ruby_mapnik/_mapnik_raster_colorizer.rb.h +32 -0
  112. data/ext/ruby_mapnik/_mapnik_raster_symbolizer.rb.cpp +87 -0
  113. data/ext/ruby_mapnik/_mapnik_raster_symbolizer.rb.h +32 -0
  114. data/ext/ruby_mapnik/_mapnik_rule.rb.cpp +69 -0
  115. data/ext/ruby_mapnik/_mapnik_rule.rb.h +32 -0
  116. data/ext/ruby_mapnik/_mapnik_shield_symbolizer.rb.cpp +86 -0
  117. data/ext/ruby_mapnik/_mapnik_shield_symbolizer.rb.h +32 -0
  118. data/ext/ruby_mapnik/_mapnik_stroke.rb.cpp +188 -0
  119. data/ext/ruby_mapnik/_mapnik_stroke.rb.h +32 -0
  120. data/ext/ruby_mapnik/_mapnik_style.rb.cpp +76 -0
  121. data/ext/ruby_mapnik/_mapnik_style.rb.h +32 -0
  122. data/ext/ruby_mapnik/_mapnik_symbolizer.rb.cpp +75 -0
  123. data/ext/ruby_mapnik/_mapnik_symbolizer.rb.h +32 -0
  124. data/ext/ruby_mapnik/_mapnik_text_symbolizer.rb.cpp +471 -0
  125. data/ext/ruby_mapnik/_mapnik_text_symbolizer.rb.h +32 -0
  126. data/ext/ruby_mapnik/extconf.rb +80 -0
  127. data/ext/ruby_mapnik/ruby_mapnik.cpp +32 -0
  128. data/lib/mapnik.rb +1 -0
  129. data/lib/ruby_mapnik.rb +48 -0
  130. data/lib/ruby_mapnik/mapnik/font_engine.rb +35 -0
  131. data/lib/ruby_mapnik/mapnik/layer.rb +68 -0
  132. data/lib/ruby_mapnik/mapnik/map.rb +166 -0
  133. data/lib/ruby_mapnik/mapnik/projection.rb +44 -0
  134. data/lib/ruby_mapnik/mapnik/raster_colorizer.rb +55 -0
  135. data/lib/ruby_mapnik/mapnik/rule.rb +104 -0
  136. data/lib/ruby_mapnik/mapnik/stroke.rb +56 -0
  137. data/lib/ruby_mapnik/mapnik/style.rb +64 -0
  138. data/lib/ruby_mapnik/mapnik/tile.rb +93 -0
  139. data/script/console +2 -0
  140. data/test/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.dbf +0 -0
  141. data/test/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.prj +1 -0
  142. data/test/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.shp +0 -0
  143. data/test/data/TM_WORLD_BORDERS_SIMPL_0.3_MOD.shx +0 -0
  144. data/test/data/test_map.xml +15 -0
  145. data/test/test_helper.rb +29 -0
  146. data/test/test_line_pattern_symbolizer.rb +26 -0
  147. data/test/test_mapnik_color.rb +66 -0
  148. data/test/test_mapnik_coord.rb +92 -0
  149. data/test/test_mapnik_datasource.rb +49 -0
  150. data/test/test_mapnik_envelope.rb +232 -0
  151. data/test/test_mapnik_expression.rb +19 -0
  152. data/test/test_mapnik_feature.rb +29 -0
  153. data/test/test_mapnik_font_engine.rb +13 -0
  154. data/test/test_mapnik_layer.rb +121 -0
  155. data/test/test_mapnik_line_symbolizer.rb +25 -0
  156. data/test/test_mapnik_map.rb +211 -0
  157. data/test/test_mapnik_markers_symbolizer.rb +46 -0
  158. data/test/test_mapnik_point_symbolizer.rb +53 -0
  159. data/test/test_mapnik_polygon_symbolizer.rb +44 -0
  160. data/test/test_mapnik_projection.rb +46 -0
  161. data/test/test_mapnik_raster_colorizer.rb +56 -0
  162. data/test/test_mapnik_raster_symbolizer.rb +45 -0
  163. data/test/test_mapnik_rule.rb +45 -0
  164. data/test/test_mapnik_shield_symbolizer.rb +156 -0
  165. data/test/test_mapnik_stroke.rb +94 -0
  166. data/test/test_mapnik_style.rb +28 -0
  167. data/test/test_mapnik_symbolizer.rb +9 -0
  168. data/test/test_mapnik_text_symbolizer.rb +208 -0
  169. data/test/test_polygon_pattern_symbolizer.rb +34 -0
  170. data/test/test_ruby_mapnik.rb +34 -0
  171. data/yard/lib/yard/parser/generic_parser.rb +72 -0
  172. data/yard/lib/yard_generic.rb +18 -0
  173. metadata +333 -0
@@ -0,0 +1,32 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #ifndef PIKA2_MAPNIK_LAYER
23
+ #define PIKA2_MAPNIK_LAYER
24
+
25
+ namespace Rice
26
+ {
27
+ class Module;
28
+ }
29
+
30
+ void register_layer(Rice::Module rb_mapnik);
31
+
32
+ #endif
@@ -0,0 +1,71 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #include "_mapnik_line_pattern_symbolizer.rb.h"
23
+
24
+ // Rice
25
+ #include <rice/Data_Type.hpp>
26
+ #include <rice/Constructor.hpp>
27
+ #include <rice/Class.hpp>
28
+
29
+ // Mapnik
30
+ #include <mapnik/parse_path.hpp>
31
+ #include <mapnik/line_pattern_symbolizer.hpp>
32
+
33
+ const std::string get_filename(mapnik::line_pattern_symbolizer const& t) {
34
+ return mapnik::path_processor_type::to_string(*t.get_filename());
35
+ }
36
+
37
+ void set_filename(mapnik::line_pattern_symbolizer & t, std::string const& file_expr) {
38
+ t.set_filename(mapnik::parse_path(file_expr));
39
+ }
40
+
41
+ void register_line_pattern_symbolizer(Rice::Module rb_mapnik){
42
+ /*
43
+ @@Module_var rb_mapnik = Mapnik
44
+ */
45
+ Rice::Data_Type< mapnik::line_pattern_symbolizer > rb_cline_pattern_symbolizer = Rice::define_class_under< mapnik::line_pattern_symbolizer >(rb_mapnik, "LinePatternSymbolizer");
46
+
47
+ /*
48
+ * Document-method: new
49
+ * call-seq:
50
+ * new(expression)
51
+ * @param [Mapnik::Expression]
52
+ * @return [Mapnik::LinePatternSymbolizer] a new line symbolzier object
53
+ */
54
+ rb_cline_pattern_symbolizer.define_constructor(Rice::Constructor< mapnik::line_pattern_symbolizer, mapnik::path_expression_ptr>());
55
+
56
+ /*
57
+ * Document-method: filename
58
+ * @return [Mapnik::PathExpression]
59
+ */
60
+ rb_cline_pattern_symbolizer.define_method("filename", &get_filename);
61
+
62
+ /*
63
+ * Document-method: filename=
64
+ * call-seq:
65
+ * filename=(new_filename)
66
+ * @param [Mapnik::PathExpression]
67
+ * @return [nil]
68
+ */
69
+ rb_cline_pattern_symbolizer.define_method("filename=", &set_filename);
70
+
71
+ }
@@ -0,0 +1,32 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #ifndef PIKA2_MAPNIK_LINE_PATTERN_SYMBOLIZER
23
+ #define PIKA2_MAPNIK_LINE_PATTERN_SYMBOLIZER
24
+
25
+ namespace Rice
26
+ {
27
+ class Module;
28
+ }
29
+
30
+ void register_line_pattern_symbolizer(Rice::Module rb_mapnik);
31
+
32
+ #endif
@@ -0,0 +1,43 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #include "_mapnik_line_symbolizer.rb.h"
23
+
24
+ // Rice
25
+ #include <rice/Data_Type.hpp>
26
+ #include <rice/Constructor.hpp>
27
+ #include <rice/Class.hpp>
28
+ #include <rice/Enum.hpp>
29
+
30
+ // Mapnik
31
+ #include <mapnik/line_symbolizer.hpp>
32
+
33
+ void register_line_symbolizer(Rice::Module rb_mapnik){
34
+ /*
35
+ @@Module_var rb_mapnik = Mapnik
36
+ */
37
+ Rice::Data_Type< mapnik::line_symbolizer > rb_cline_symbolizer = Rice::define_class_under< mapnik::line_symbolizer >(rb_mapnik, "LineSymbolizer");
38
+ rb_cline_symbolizer.define_constructor(Rice::Constructor< mapnik::line_symbolizer >());
39
+
40
+ rb_cline_symbolizer.define_method("stroke", &mapnik::line_symbolizer::get_stroke);
41
+ rb_cline_symbolizer.define_method("stroke=", &mapnik::line_symbolizer::set_stroke, Rice::Arg("new_stroke"));
42
+
43
+ }
@@ -0,0 +1,32 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #ifndef PIKA2_MAPNIK_LINE_SYMBOLIZER
23
+ #define PIKA2_MAPNIK_LINE_SYMBOLIZER
24
+
25
+ namespace Rice
26
+ {
27
+ class Module;
28
+ }
29
+
30
+ void register_line_symbolizer(Rice::Module rb_mapnik);
31
+
32
+ #endif
@@ -0,0 +1,489 @@
1
+ /*****************************************************************************
2
+ Copyright (C) 2011 Elliot Laster
3
+
4
+ Permission is hereby granted, free of charge, to any person obtaining a copy of
5
+ this software and associated documentation files (the ‘Software’), to deal in
6
+ the Software without restriction, including without limitation the rights to
7
+ use, copy, modify, merge, publish, distribute, sublicense, and/or sell copies
8
+ of the Software, and to permit persons to whom the Software is furnished to do
9
+ so, subject to the following conditions:
10
+
11
+ The above copyright notice and this permission notice shall be included in all
12
+ copies or substantial portions of the Software.
13
+
14
+ THE SOFTWARE IS PROVIDED ‘AS IS’, WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
15
+ IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
16
+ FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
17
+ AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
18
+ LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
19
+ OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
20
+ SOFTWARE.
21
+ *****************************************************************************/
22
+ #include "_mapnik_map.rb.h"
23
+
24
+ // Rice
25
+ #include <rice/Data_Type.hpp>
26
+ #include <rice/Constructor.hpp>
27
+ #include <rice/Class.hpp>
28
+ #include <rice/Hash.hpp>
29
+ #include <rice/Array.hpp>
30
+
31
+ // Mapnik
32
+ #include <mapnik/map.hpp>
33
+ #include <mapnik/version.hpp>
34
+ #include <mapnik/feature_type_style.hpp>
35
+ #include <mapnik/agg_renderer.hpp>
36
+ #include <mapnik/graphics.hpp>
37
+ #ifdef HAVE_CAIRO
38
+ #if MAPNIK_VERSION >= 200200
39
+ #include <mapnik/cairo_context.hpp>
40
+ #endif
41
+ #include <mapnik/cairo_renderer.hpp>
42
+ #endif
43
+ #include <mapnik/image_util.hpp>
44
+ #include <mapnik/load_map.hpp>
45
+ #include <mapnik/save_map.hpp>
46
+
47
+ #include <boost/optional.hpp>
48
+
49
+ // Seems like one could metaprogram these two away...
50
+ template<>
51
+ Rice::Object to_ruby<boost::optional<mapnik::color> >(boost::optional<mapnik::color> const & x){
52
+ if(x)
53
+ {
54
+ return to_ruby<mapnik::color>(x.get());
55
+ } else{
56
+ return Rice::Object();
57
+ }
58
+ }
59
+
60
+ template<>
61
+ Rice::Object to_ruby<boost::optional<mapnik::box2d<double> > >(boost::optional<mapnik::box2d<double> > const & x){
62
+ if(x)
63
+ {
64
+ return to_ruby<mapnik::box2d<double> >(x.get());
65
+ } else{
66
+ return Rice::Object();
67
+ }
68
+ }
69
+
70
+ template<>
71
+ Rice::Object to_ruby<std::map<std::string,mapnik::feature_type_style> >(std::map<std::string,mapnik::feature_type_style> const & x){
72
+ Rice::Hash h;
73
+ std::map<std::string,mapnik::feature_type_style>::const_iterator end = x.end();
74
+ for (std::map<std::string,mapnik::feature_type_style>::const_iterator it = x.begin(); it != end; ++it){
75
+ h[to_ruby<std::string>(it->first)] = to_ruby<mapnik::feature_type_style>(it->second);
76
+ }
77
+ return h;
78
+ }
79
+
80
+ template<>
81
+ Rice::Object to_ruby<std::vector<mapnik::layer> >(std::vector<mapnik::layer> const & x)
82
+ {
83
+ return Rice::Array(x.begin(), x.end());
84
+ }
85
+
86
+ std::map<std::string,mapnik::feature_type_style> & (mapnik::Map::*_map_styles_)() = &mapnik::Map::styles;
87
+ std::vector<mapnik::layer> & (mapnik::Map::*_map_layers_)() = &mapnik::Map::layers;
88
+ boost::optional<mapnik::box2d<double> > const& (mapnik::Map::*maximum_extent_const)() const = &mapnik::Map::maximum_extent;
89
+
90
+ namespace {
91
+
92
+ void render_map_to_file_with_format(const mapnik::Map& map, const std::string& filename, const std::string& format){
93
+ if (format == "pdf" || format == "svg" || format =="ps") {
94
+ #if defined(HAVE_CAIRO)
95
+ mapnik::save_to_cairo_file(map,filename,format);
96
+ #else
97
+ throw mapnik::ImageWriterException("Cairo backend not available, cannot write to format: " + format);
98
+ #endif
99
+ } else {
100
+ mapnik::image_32 image(map.width(),map.height());
101
+ mapnik::agg_renderer<mapnik::image_32> ren(map,image,1.0,0,0);
102
+ ren.apply();
103
+ mapnik::save_to_file(image,filename, format);
104
+ }
105
+ }
106
+
107
+ void render_map_to_file(const mapnik::Map& map, const std::string& filename){
108
+ render_map_to_file_with_format(map, filename, mapnik::guess_type(filename));
109
+ }
110
+
111
+ std::string render_map_to_string(const mapnik::Map& map, std::string const& format){
112
+ mapnik::image_32 image(map.width(),map.height());
113
+ mapnik::agg_renderer<mapnik::image_32> ren(map,image,1.0,0,0);
114
+ ren.apply();
115
+ return mapnik::save_to_string(image,format);
116
+ }
117
+
118
+ std::string map_to_string(const mapnik::Map& map){
119
+ return mapnik::save_map_to_string(map);
120
+ }
121
+
122
+ #if defined(HAVE_CAIRO)
123
+
124
+ // TODO: These are temporarily boosted from the ruby cairo gem...
125
+ cairo_surface_t * rb_cairo_surface_from_ruby_object (VALUE obj) {
126
+ cairo_surface_t *surface;
127
+ // if (!rb_cairo__is_kind_of (obj, rb_cCairo_Surface))
128
+ // {
129
+ // rb_raise (rb_eTypeError, "not a cairo surface");
130
+ // }
131
+ Data_Get_Struct (obj, cairo_surface_t, surface);
132
+ // if (!surface)
133
+ // rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
134
+ return surface;
135
+ }
136
+
137
+ cairo_t * rb_cairo_context_from_ruby_object (VALUE obj) {
138
+ cairo_t *context;
139
+ // if (!rb_cairo__is_kind_of (obj, rb_cCairo_Surface))
140
+ // {
141
+ // rb_raise (rb_eTypeError, "not a cairo surface");
142
+ // }
143
+ Data_Get_Struct (obj, cairo_t, context);
144
+ // if (!surface)
145
+ // rb_cairo_check_status (CAIRO_STATUS_NULL_POINTER);
146
+ return context;
147
+ }
148
+
149
+ void render_to_cairo_surface(mapnik::Map const & map, Rice::Object rb_surface, unsigned offset_x = 0, unsigned offset_y = 0){
150
+ using namespace mapnik;
151
+ cairo_surface_t * surface = rb_cairo_surface_from_ruby_object(rb_surface);
152
+ #if MAPNIK_VERSION >= 200200
153
+ mapnik::cairo_surface_ptr surface_ref(cairo_surface_reference(surface), mapnik::cairo_surface_closer());
154
+ double scale_factor = 1.0;
155
+ mapnik::cairo_renderer<mapnik::cairo_surface_ptr> ren(map, surface_ref, scale_factor, offset_x, offset_y);
156
+ #else
157
+ Cairo::RefPtr<Cairo::Surface> s(new Cairo::Surface(surface));
158
+ mapnik::cairo_renderer<Cairo::Surface> ren(map,s,offset_x, offset_y);
159
+ #endif
160
+ ren.apply();
161
+ }
162
+
163
+ void render_to_cairo_context(mapnik::Map const & map, Rice::Object rb_context, unsigned offset_x = 0, unsigned offset_y = 0){
164
+ cairo_t * context = rb_cairo_context_from_ruby_object(rb_context);
165
+ #if MAPNIK_VERSION >= 200200
166
+ mapnik::cairo_ptr context_ref(context, mapnik::cairo_closer());
167
+ double scale_factor = 1.0;
168
+ mapnik::cairo_renderer<mapnik::cairo_ptr> ren(map, context_ref, scale_factor, offset_x, offset_y);
169
+ #else
170
+ Cairo::RefPtr<Cairo::Context> c(new Cairo::Context(context));
171
+ mapnik::cairo_renderer<Cairo::Context> ren(map, c, offset_x, offset_y);
172
+ ren.apply();
173
+ #endif
174
+ }
175
+ #endif
176
+
177
+ void initialize_map(Rice::Object self){
178
+ DATA_PTR(self.value()) = new mapnik::Map();
179
+ if(rb_block_given_p()) {
180
+ rb_yield(self);
181
+ }
182
+ }
183
+
184
+ }
185
+
186
+ void register_map(Rice::Module rb_mapnik){
187
+ /*
188
+ @@Module_var rb_mapnik = Mapnik
189
+ Document-class: Mapnik::Map
190
+
191
+ Maps are exactly what they sound like: the reason you are using mapnik. Maps
192
+ have layers, which wrap a datasource, and styles, which contain instructions
193
+ on how to render those layers.
194
+
195
+ Maps can be rendered to basic image formats (jpg, png), as well as to cairo
196
+ surfaces and contexts, if mapnik has been compiled with cairo support, and if
197
+ the rcairo gem is installed.
198
+
199
+ */
200
+ Rice::Data_Type< mapnik::Map > rb_cmap = Rice::define_class_under< mapnik::Map >(rb_mapnik, "Map");
201
+
202
+ /*
203
+ * Document-method: new
204
+ * Instantiates a new map object. The map is yielded if a block is given.
205
+ * @return [Mapnik::Map] a new map object
206
+ * @yield [map] the new map object
207
+
208
+ */
209
+ rb_cmap.define_constructor(Rice::Constructor< mapnik::Map >());
210
+
211
+ /*
212
+ * Dont-Document-method: __load_map_string__
213
+ */
214
+ rb_cmap.define_singleton_method("__load_map_string__", &mapnik::load_map_string);
215
+
216
+ /*
217
+ * Dont-Document-method: __load_map__
218
+ */
219
+ rb_cmap.define_singleton_method("__load_map__", &mapnik::load_map);
220
+
221
+ /*
222
+ * Dont-document-method: initialize
223
+ */
224
+ rb_cmap.define_method("initialize", &initialize_map);
225
+
226
+ /*
227
+ * Document-method: background
228
+ * @return [Mapnik::Color]
229
+ */
230
+ rb_cmap.define_method("background", &mapnik::Map::background);
231
+
232
+ /*
233
+ * Document-method: background=
234
+ * call-seq:
235
+ * background=(color)
236
+ * @param [Mapnik::Color]
237
+ * @return [nil]
238
+ */
239
+ rb_cmap.define_method("background=", &mapnik::Map::set_background);
240
+
241
+ /*
242
+ * Document-method: base_path
243
+ * @return [String] The path all relative paths will be resolved with
244
+ */
245
+ rb_cmap.define_method("base_path", &mapnik::Map::base_path);
246
+
247
+ /*
248
+ * Document-method: base_path=
249
+ * call-seq:
250
+ * base_path=(path)
251
+ * @param [String]
252
+ * @return [nil]
253
+ */
254
+ rb_cmap.define_method("base_path=", &mapnik::Map::set_base_path);
255
+
256
+ /*
257
+ * Document-method: buffer_size
258
+ * @return [Integer]
259
+ */
260
+ rb_cmap.define_method("buffer_size", &mapnik::Map::buffer_size);
261
+
262
+ /*
263
+ * Document-method: buffer_size=
264
+ * call-seq:
265
+ * buffer_size=(size)
266
+ * @param [Integer]
267
+ * @return [nil]
268
+ */
269
+ rb_cmap.define_method("buffer_size=", &mapnik::Map::set_buffer_size);
270
+
271
+ /*
272
+ * Document-method: height
273
+ * The height of the rendered image in pixels.
274
+ * @return [Integer]
275
+ */
276
+ rb_cmap.define_method("height", &mapnik::Map::height);
277
+
278
+ /*
279
+ * Document-method: height=
280
+ * call-seq:
281
+ * height=(height_in_pixels)
282
+ * Sets the height of the rendered image.
283
+ * @param [Integer] height_in_pixels
284
+ * @return [nil]
285
+ */
286
+ rb_cmap.define_method("height=", &mapnik::Map::set_height);
287
+
288
+ /*
289
+ * Document-method: maximum_extent
290
+ * @return [Mapnik::Envelope]
291
+ */
292
+ rb_cmap.define_method("maximum_extent", maximum_extent_const);
293
+
294
+ /*
295
+ * Document-method: maximum_extent=
296
+ * call-seq:
297
+ * maximum_extent=(new_extent)
298
+ * @param [Mapnik::Envelope] new_extent
299
+ * @return [nil]
300
+ */
301
+ rb_cmap.define_method("maximum_extent=", &mapnik::Map::set_maximum_extent, Rice::Arg("new_extent"));
302
+
303
+ /*
304
+ * Document-method: srs
305
+ * The spatial reference system string for the map. It does not need to match
306
+ * the srs of any of the layers.
307
+ * @return [String]
308
+ */
309
+ rb_cmap.define_method("srs", &mapnik::Map::srs);
310
+
311
+ /*
312
+ * Document-method: srs=
313
+ * call-seq:
314
+ * srs=(new_srs)
315
+ * Sets the spatial reference system that will be used to render the map. All
316
+ * layers will have thier data reprojected to this srs behind the scenes.
317
+ *
318
+ * @param [String]
319
+ * @return [nil]
320
+ */
321
+ rb_cmap.define_method("srs=", &mapnik::Map::set_srs);
322
+
323
+ /*
324
+ * Document-method: width
325
+ * The width of the image in pixels.
326
+ * @return [Integer]
327
+ */
328
+ rb_cmap.define_method("width", &mapnik::Map::width);
329
+
330
+ /*
331
+ * Document-method: width=
332
+ * call-seq:
333
+ * width=(new_width)
334
+ * Sets the width of the image.
335
+ * @param [Integer] new_width in pixels
336
+ * @return [nil]
337
+ */
338
+ rb_cmap.define_method("width=", &mapnik::Map::set_width);
339
+
340
+ /*
341
+ * Document-method: envelope
342
+ * @return [Mapnik::Envelope]
343
+ */
344
+ rb_cmap.define_method("envelope", &mapnik::Map::get_current_extent);
345
+
346
+ /*
347
+ * Document-method: buffered_envelope
348
+ * @return [Mapnik::Envelope]
349
+ * The envelope plus any buffer set in buffer_size
350
+ */
351
+ rb_cmap.define_method("buffered_envelope", &mapnik::Map::get_buffered_extent);
352
+
353
+ /*
354
+ * Document-method: pan
355
+ * call-seq:
356
+ * pan(x, y)
357
+ * @param [Integer] x
358
+ * @param [Integer] y
359
+ * @return [nil]
360
+ */
361
+ rb_cmap.define_method("pan", &mapnik::Map::pan);
362
+
363
+ /*
364
+ * Document-method: zoom
365
+ * call-seq:
366
+ * zoom(zoom_factor)
367
+ * @param [Integer] zoom_factor
368
+ * @return [nil]
369
+ */
370
+ rb_cmap.define_method("zoom", &mapnik::Map::zoom);
371
+
372
+ /*
373
+ * Document-method: zoom_all
374
+ * Zooms the map so that all of the envelopes of the layers are visible.
375
+ * @return [nil]
376
+ */
377
+ rb_cmap.define_method("zoom_all", &mapnik::Map::zoom_all);
378
+
379
+ /*
380
+ * Document-method: zoom_to_box
381
+ * call-seq:
382
+ * zoom_to_box(envelope)
383
+ * Zooms the map such that the envelope provided is all that will be rendered.
384
+ * The height and width of the map will stay the same, but the content will be
385
+ * zoomed.
386
+ * @param [Mapnik::Envelope] envelope
387
+ * @return [nil]
388
+ */
389
+ rb_cmap.define_method("zoom_to_box", &mapnik::Map::zoom_to_box, Rice::Arg("envelope"));
390
+
391
+ /*
392
+ * Document-method: resize
393
+ * call-seq:
394
+ * resize(new_width, new_height)
395
+ * Resizes the height and width of the map in one step.
396
+ * @param [Integer] new_width in pixels
397
+ * @param [Integer] new_height in pixels
398
+ * @return [nil]
399
+ */
400
+ rb_cmap.define_method("resize", &mapnik::Map::resize);
401
+
402
+ /*
403
+ * Document-method: scale
404
+ * @return [Float]
405
+ */
406
+ rb_cmap.define_method("scale", &mapnik::Map::scale);
407
+
408
+ /*
409
+ * Dont-Document-method: __styles__
410
+ */
411
+ rb_cmap.define_method("__styles__", _map_styles_);
412
+
413
+ /*
414
+ * Dont-Document-method: __insert_style__
415
+ */
416
+ rb_cmap.define_method("__insert_style__", &mapnik::Map::insert_style);
417
+
418
+ /*
419
+ * Dont-Document-method: __remove_style__
420
+ */
421
+ rb_cmap.define_method("__remove_style__", &mapnik::Map::remove_style);
422
+
423
+ /*
424
+ * Dont-Document-method: __layers__
425
+ */
426
+ rb_cmap.define_method("__layers__", _map_layers_);
427
+
428
+ /*
429
+ * Dont-Document-method: __add_layer__
430
+ */
431
+ rb_cmap.define_method("__add_layer__", &mapnik::Map::addLayer);
432
+
433
+ /*
434
+ * Dont-Document-method: __remove_layer__
435
+ */
436
+ rb_cmap.define_method("__remove_layer__", &mapnik::Map::removeLayer);
437
+
438
+ /*
439
+ * Dont-Document-method: __render_to_file__
440
+ */
441
+ rb_cmap.define_method("__render_to_file__", &render_map_to_file);
442
+
443
+ /*
444
+ * Dont-Document-method: __render_to_file_with_format__
445
+ */
446
+ rb_cmap.define_method("__render_to_file_with_format__", &render_map_to_file_with_format);
447
+
448
+ /*
449
+ * Document-method: to_xml
450
+ * @return [String]
451
+ * An XML representation of the map that can be loaded via the from_xml method, or by other mapnik implementations
452
+ */
453
+ rb_cmap.define_method("to_xml", &map_to_string);
454
+
455
+ /*
456
+ * Document-method: render_to_string
457
+ * call-seq:
458
+ * render_to_string(file_format)
459
+ * @param [String] file_format One of 'png', 'jpg' or 'tiff'
460
+ * @return [String] A string of the data for the image
461
+ */
462
+ rb_cmap.define_method("render_to_string", &render_map_to_string);
463
+
464
+ #if defined(HAVE_CAIRO)
465
+
466
+ /*
467
+ * Document-method: render_to_cairo_surface
468
+ * call-seq:
469
+ * render_to_cairo_surface(cairo_surface)
470
+ * @param [Cairo::Surface]
471
+ * @return [nil]
472
+ * Only available if Ruby-Mapnik was compiled with Cairo support and the
473
+ * Ruby Cairo gem is available
474
+ */
475
+ rb_cmap.define_method("render_to_cairo_surface", &render_to_cairo_surface);
476
+
477
+ /*
478
+ * Document-method: render_to_cairo_context
479
+ * call-seq:
480
+ * render_to_cairo_context(cairo_context)
481
+ * @param [Cairo::Context]
482
+ * @return [nil]
483
+ * Only available if Ruby-Mapnik was compiled with Cairo support and the
484
+ * Ruby Cairo gem is available
485
+ */
486
+ rb_cmap.define_method("render_to_cairo_context", &render_to_cairo_context);
487
+ #endif
488
+
489
+ }