| 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"; |