mapnik 0.2.0

Sign up to get free protection for your applications and to get access to all the features.
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
+ }