| 56 | | |
| 57 | | mapnik::load_map(m,"/Users/artem/projects/openstreetmap/mapnik/openstreetmap_kleptog.xml"); |
| 58 | | |
| 59 | | m.zoomToBox(Envelope<double>(-762470.6985688356,4004842.088052442,-761928.349698612,4005328.834769584)); |
| 60 | | |
| 61 | | //Image32 buf(m.getWidth(),m.getHeight()); |
| 62 | | //agg_renderer<Image32> ren(m,buf); |
| 63 | | //ren.apply(); |
| 64 | | |
| 65 | | //save_to_file<ImageData32>(buf.data(),"demo.jpg","jpeg"); |
| 66 | | //save_to_file<ImageData32>(buf.data(),"demo.png","png"); |
| 67 | | //save_to_file<ImageData32>(buf.data(),"demo256.png","png256"); |
| 68 | | //std::cout << "Three maps have been rendered in the current directory:\n" |
| 69 | | // "- demo.jpg\n" |
| 70 | | // "- demo.png\n" |
| 71 | | // "- demo256.png\n" |
| 72 | | // "Have a look!\n"; |
| 73 | | |
| 74 | | // Cairo renderer |
| 75 | | |
| 76 | | // Pdf |
| 77 | | Cairo::RefPtr<Cairo::PdfSurface> pdf = Cairo::PdfSurface::create("mapnik.pdf",m.getWidth(),m.getHeight()); |
| 78 | | mapnik::cairo_renderer<Cairo::Surface> cairo1(m, pdf); |
| 79 | | cairo1.apply(); |
| 80 | | // Svg |
| 81 | | //Cairo::RefPtr<Cairo::SvgSurface> svg = Cairo::SvgSurface::create("demo.svg",m.getWidth(),m.getHeight()); |
| 82 | | //mapnik::cairo_renderer<Cairo::Surface> cairo2(m, svg); |
| 83 | | //cairo2.apply(); |
| 84 | | // Png |
| 85 | | //Cairo::RefPtr<Cairo::ImageSurface> image = Cairo::ImageSurface::create(Cairo::FORMAT_ARGB32,m.getWidth(),m.getHeight()); |
| 86 | | //mapnik::cairo_renderer<Cairo::Surface> cairo3(m, image); |
| 87 | | //cairo3.apply(); |
| 88 | | |
| 89 | | //std::string filename = "demo_cairo.png"; |
| 90 | | //image->write_to_png(filename); |
| 91 | | |
| 92 | | // Ps |
| 93 | | //Cairo::RefPtr<Cairo::PsSurface> ps = Cairo::PsSurface::create("demo.ps",m.getWidth(),m.getHeight()); |
| 94 | | //mapnik::cairo_renderer<Cairo::Surface> cairo4(m, ps); |
| 95 | | //cairo4.apply(); |
| 96 | | |
| | 55 | m.set_background(color_factory::from_string("white")); |
| | 56 | |
| | 57 | // create styles |
| | 58 | |
| | 59 | // Provinces (polygon) |
| | 60 | feature_type_style provpoly_style; |
| | 61 | |
| | 62 | rule_type provpoly_rule_on; |
| | 63 | provpoly_rule_on.set_filter(create_filter("[NAME_EN] = 'Ontario'")); |
| | 64 | provpoly_rule_on.append(polygon_symbolizer(Color(250, 190, 183))); |
| | 65 | provpoly_style.add_rule(provpoly_rule_on); |
| | 66 | |
| | 67 | rule_type provpoly_rule_qc; |
| | 68 | provpoly_rule_qc.set_filter(create_filter("[NAME_EN] = 'Quebec'")); |
| | 69 | provpoly_rule_qc.append(polygon_symbolizer(Color(217, 235, 203))); |
| | 70 | provpoly_style.add_rule(provpoly_rule_qc); |
| | 71 | |
| | 72 | m.insert_style("provinces",provpoly_style); |
| | 73 | |
| | 74 | // Provinces (polyline) |
| | 75 | feature_type_style provlines_style; |
| | 76 | |
| | 77 | stroke provlines_stk (Color(0,0,0),1.0); |
| | 78 | provlines_stk.add_dash(8, 4); |
| | 79 | provlines_stk.add_dash(2, 2); |
| | 80 | provlines_stk.add_dash(2, 2); |
| | 81 | |
| | 82 | rule_type provlines_rule; |
| | 83 | provlines_rule.append(line_symbolizer(provlines_stk)); |
| | 84 | provlines_style.add_rule(provlines_rule); |
| | 85 | |
| | 86 | m.insert_style("provlines",provlines_style); |
| | 87 | |
| | 88 | // Drainage |
| | 89 | feature_type_style qcdrain_style; |
| | 90 | |
| | 91 | rule_type qcdrain_rule; |
| | 92 | qcdrain_rule.set_filter(create_filter("[HYC] = 8")); |
| | 93 | qcdrain_rule.append(polygon_symbolizer(Color(153, 204, 255))); |
| | 94 | qcdrain_style.add_rule(qcdrain_rule); |
| | 95 | |
| | 96 | m.insert_style("drainage",qcdrain_style); |
| | 97 | |
| | 98 | // Roads 3 and 4 (The "grey" roads) |
| | 99 | feature_type_style roads34_style; |
| | 100 | rule_type roads34_rule; |
| | 101 | roads34_rule.set_filter(create_filter("[CLASS] = 3 or [CLASS] = 4")); |
| | 102 | stroke roads34_rule_stk(Color(171,158,137),2.0); |
| | 103 | roads34_rule_stk.set_line_cap(ROUND_CAP); |
| | 104 | roads34_rule_stk.set_line_join(ROUND_JOIN); |
| | 105 | roads34_rule.append(line_symbolizer(roads34_rule_stk)); |
| | 106 | roads34_style.add_rule(roads34_rule); |
| | 107 | |
| | 108 | m.insert_style("smallroads",roads34_style); |
| | 109 | |
| | 110 | |
| | 111 | // Roads 2 (The thin yellow ones) |
| | 112 | feature_type_style roads2_style_1; |
| | 113 | rule_type roads2_rule_1; |
| | 114 | roads2_rule_1.set_filter(create_filter("[CLASS] = 2")); |
| | 115 | stroke roads2_rule_stk_1(Color(171,158,137),4.0); |
| | 116 | roads2_rule_stk_1.set_line_cap(ROUND_CAP); |
| | 117 | roads2_rule_stk_1.set_line_join(ROUND_JOIN); |
| | 118 | roads2_rule_1.append(line_symbolizer(roads2_rule_stk_1)); |
| | 119 | roads2_style_1.add_rule(roads2_rule_1); |
| | 120 | |
| | 121 | m.insert_style("road-border", roads2_style_1); |
| | 122 | |
| | 123 | feature_type_style roads2_style_2; |
| | 124 | rule_type roads2_rule_2; |
| | 125 | roads2_rule_2.set_filter(create_filter("[CLASS] = 2")); |
| | 126 | stroke roads2_rule_stk_2(Color(255,250,115),2.0); |
| | 127 | roads2_rule_stk_2.set_line_cap(ROUND_CAP); |
| | 128 | roads2_rule_stk_2.set_line_join(ROUND_JOIN); |
| | 129 | roads2_rule_2.append(line_symbolizer(roads2_rule_stk_2)); |
| | 130 | roads2_style_2.add_rule(roads2_rule_2); |
| | 131 | |
| | 132 | m.insert_style("road-fill", roads2_style_2); |
| | 133 | |
| | 134 | // Roads 1 (The big orange ones, the highways) |
| | 135 | feature_type_style roads1_style_1; |
| | 136 | rule_type roads1_rule_1; |
| | 137 | roads1_rule_1.set_filter(create_filter("[CLASS] = 1")); |
| | 138 | stroke roads1_rule_stk_1(Color(188,149,28),7.0); |
| | 139 | roads1_rule_stk_1.set_line_cap(ROUND_CAP); |
| | 140 | roads1_rule_stk_1.set_line_join(ROUND_JOIN); |
| | 141 | roads1_rule_1.append(line_symbolizer(roads1_rule_stk_1)); |
| | 142 | roads1_style_1.add_rule(roads1_rule_1); |
| | 143 | m.insert_style("highway-border", roads1_style_1); |
| | 144 | |
| | 145 | feature_type_style roads1_style_2; |
| | 146 | rule_type roads1_rule_2; |
| | 147 | roads1_rule_2.set_filter(create_filter("[CLASS] = 1")); |
| | 148 | stroke roads1_rule_stk_2(Color(242,191,36),5.0); |
| | 149 | roads1_rule_stk_2.set_line_cap(ROUND_CAP); |
| | 150 | roads1_rule_stk_2.set_line_join(ROUND_JOIN); |
| | 151 | roads1_rule_2.append(line_symbolizer(roads1_rule_stk_2)); |
| | 152 | roads1_style_2.add_rule(roads1_rule_2); |
| | 153 | m.insert_style("highway-fill", roads1_style_2); |
| | 154 | |
| | 155 | // Populated Places |
| | 156 | |
| | 157 | feature_type_style popplaces_style; |
| | 158 | rule_type popplaces_rule; |
| | 159 | text_symbolizer popplaces_text_symbolizer("GEONAME","DejaVu Sans Book",10,Color(0,0,0)); |
| | 160 | popplaces_text_symbolizer.set_halo_fill(Color(255,255,200)); |
| | 161 | popplaces_text_symbolizer.set_halo_radius(1); |
| | 162 | popplaces_rule.append(popplaces_text_symbolizer); |
| | 163 | popplaces_style.add_rule(popplaces_rule); |
| | 164 | |
| | 165 | m.insert_style("popplaces",popplaces_style ); |
| | 166 | |
| | 167 | // Layers |
| | 168 | // Provincial polygons |
| | 169 | { |
| | 170 | parameters p; |
| | 171 | p["type"]="shape"; |
| | 172 | p["file"]="../data/boundaries"; |
| | 173 | |
| | 174 | Layer lyr("Provinces"); |
| | 175 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 176 | lyr.add_style("provinces"); |
| | 177 | m.addLayer(lyr); |
| | 178 | } |
| | 179 | |
| | 180 | // Drainage |
| | 181 | { |
| | 182 | parameters p; |
| | 183 | p["type"]="shape"; |
| | 184 | p["file"]="../data/qcdrainage"; |
| | 185 | Layer lyr("Quebec Hydrography"); |
| | 186 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 187 | lyr.add_style("drainage"); |
| | 188 | m.addLayer(lyr); |
| | 189 | } |
| | 190 | |
| | 191 | { |
| | 192 | parameters p; |
| | 193 | p["type"]="shape"; |
| | 194 | p["file"]="../data/ontdrainage"; |
| | 195 | |
| | 196 | Layer lyr("Ontario Hydrography"); |
| | 197 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 198 | lyr.add_style("drainage"); |
| | 199 | m.addLayer(lyr); |
| | 200 | } |
| | 201 | |
| | 202 | // Provincial boundaries |
| | 203 | { |
| | 204 | parameters p; |
| | 205 | p["type"]="shape"; |
| | 206 | p["file"]="../data/boundaries_l"; |
| | 207 | Layer lyr("Provincial borders"); |
| | 208 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 209 | lyr.add_style("provlines"); |
| | 210 | m.addLayer(lyr); |
| | 211 | } |
| | 212 | |
| | 213 | // Roads |
| | 214 | { |
| | 215 | parameters p; |
| | 216 | p["type"]="shape"; |
| | 217 | p["file"]="../data/roads"; |
| | 218 | Layer lyr("Roads"); |
| | 219 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 220 | lyr.add_style("smallroads"); |
| | 221 | lyr.add_style("road-border"); |
| | 222 | lyr.add_style("road-fill"); |
| | 223 | lyr.add_style("highway-border"); |
| | 224 | lyr.add_style("highway-fill"); |
| | 225 | |
| | 226 | m.addLayer(lyr); |
| | 227 | } |
| | 228 | // popplaces |
| | 229 | { |
| | 230 | parameters p; |
| | 231 | p["type"]="shape"; |
| | 232 | p["file"]="../data/popplaces"; |
| | 233 | p["encoding"] = "latin1"; |
| | 234 | Layer lyr("Populated Places"); |
| | 235 | lyr.set_datasource(datasource_cache::instance()->create(p)); |
| | 236 | lyr.add_style("popplaces"); |
| | 237 | m.addLayer(lyr); |
| | 238 | } |
| | 239 | |
| | 240 | m.zoomToBox(Envelope<double>(1405120.04127408,-247003.813399447, |
| | 241 | 1706357.31328276,-25098.593149577)); |
| | 242 | |
| | 243 | Image32 buf(m.getWidth(),m.getHeight()); |
| | 244 | agg_renderer<Image32> ren(m,buf); |
| | 245 | ren.apply(); |
| | 246 | |
| | 247 | save_to_file<ImageData32>(buf.data(),"demo.jpg","jpeg"); |
| | 248 | save_to_file<ImageData32>(buf.data(),"demo.png","png"); |
| | 249 | save_to_file<ImageData32>(buf.data(),"demo256.png","png256"); |
| | 250 | std::cout << "Three maps have been rendered in the current directory:\n" |
| | 251 | "- demo.jpg\n" |
| | 252 | "- demo.png\n" |
| | 253 | "- demo256.png\n" |
| | 254 | "Have a look!\n"; |