Subversion Repositories public

Rev

Rev 280 | Show entire file | Ignore whitespace | Details | Blame | Last modification | View Log | RSS feed

Rev 280 Rev 311
Line 974... Line 974...
974
	   {
974
	   {
975
	      cerr << "Warning file " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Layer with no source! Ingnoring!" << endl;
975
	      cerr << "Warning file " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Layer with no source! Ingnoring!" << endl;
976
	      return true;
976
	      return true;
977
	   }
977
	   }
978
 
978
 
979
	   Layer lyr(Lay->name.toAscii().data());
979
	   layer lyr(Lay->name.toAscii().data());
980
 
980
 
981
	   if (!Lay->title.isEmpty())
981
	   if (!Lay->title.isEmpty())
982
	      lyr.set_title(Lay->title.toAscii().data());
982
	      lyr.set_title(Lay->title.toAscii().data());
983
 
983
 
984
	   if (!Lay->abstract.isEmpty())
984
	   if (!Lay->abstract.isEmpty())
Line 1007... Line 1007...
1007
	   }
1007
	   }
1008
 
1008
 
1009
	   lyr.setActive(Lay->status);
1009
	   lyr.setActive(Lay->status);
1010
	   lyr.setQueryable(true);
1010
	   lyr.setQueryable(true);
1011
	   m.addLayer(lyr);
1011
	   m.addLayer(lyr);
1012
	   Envelope <double>le(lyr.envelope());
1012
	   box2d <double>le(lyr.envelope());
1013
	   setMaxExtent(le.minx(), le.miny(), le.maxx(), le.maxy());
1013
	   setMaxExtent(le.minx(), le.miny(), le.maxx(), le.maxy());
1014
	}
1014
	}
1015
	else if (qName.toLower() == QString("map"))
1015
	else if (qName.toLower() == QString("map"))
1016
	{
1016
	{
1017
	   Container = in_root;
1017
	   Container = in_root;
Line 1033... Line 1033...
1033
	      point_symbolizer psym;
1033
	      point_symbolizer psym;
1034
	      Rule->rl.append(psym);
1034
	      Rule->rl.append(psym);
1035
	   }
1035
	   }
1036
	   else
1036
	   else
1037
	   {
1037
	   {
1038
	      point_symbolizer ps(findIcon(PointSymbolizer->file).toAscii().data(), getTypeText(PointSymbolizer->type), PointSymbolizer->width, PointSymbolizer->height);
1038
//	      point_symbolizer ps(findIcon(PointSymbolizer->file).toAscii().data(), getTypeText(PointSymbolizer->type), PointSymbolizer->width, PointSymbolizer->height);
-
 
1039
	      point_symbolizer ps(parse_path(findIcon(PointSymbolizer->file).toAscii().data()));
1039
	      ps.set_allow_overlap (PointSymbolizer->allow_overlap);
1040
	      ps.set_allow_overlap (PointSymbolizer->allow_overlap);
1040
	      Rule->rl.append(ps);
1041
	      Rule->rl.append(ps);
1041
	   }
1042
	   }
1042
	}
1043
	}
1043
	else if (qName.toLower() == QString("linesymbolizer"))
1044
	else if (qName.toLower() == QString("linesymbolizer"))
Line 1120... Line 1121...
1120
 
1121
 
1121
	   if (TextSymbolizer->name.length() <= 0 || TextSymbolizer->face_name.length() <= 0 || TextSymbolizer->size <= 0)
1122
	   if (TextSymbolizer->name.length() <= 0 || TextSymbolizer->face_name.length() <= 0 || TextSymbolizer->size <= 0)
1122
	      cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Empty TEXTSYMBOLIZER found --> ignoring!" << endl;
1123
	      cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Empty TEXTSYMBOLIZER found --> ignoring!" << endl;
1123
	   else
1124
	   else
1124
	   {
1125
	   {
1125
	      text_symbolizer ts(TextSymbolizer->name.toAscii().data(), TextSymbolizer->face_name.toAscii().data(), TextSymbolizer->size, setColor(TextSymbolizer->fill));
1126
//	      text_symbolizer ts(TextSymbolizer->name.toAscii().data(), TextSymbolizer->face_name.toAscii().data(), TextSymbolizer->size, setColor(TextSymbolizer->fill));
-
 
1127
	      std::stringstream s;
-
 
1128
	      s << "[" << TextSymbolizer->name.toAscii().data() << "]";
-
 
1129
	      text_symbolizer ts(parse_expression(s.str()), TextSymbolizer->face_name.toAscii().data(), TextSymbolizer->size, setColor(TextSymbolizer->fill));
1126
 
1130
 
1127
	      if (TextSymbolizer->halo_radius != 0.0)
1131
	      if (TextSymbolizer->halo_radius != 0.0)
1128
		 ts.set_halo_radius((unsigned int)TextSymbolizer->halo_radius);
1132
		 ts.set_halo_radius((unsigned int)TextSymbolizer->halo_radius);
1129
 
1133
 
1130
	      if (TextSymbolizer->wrap_width != 0.0)
1134
	      if (TextSymbolizer->wrap_width != 0.0)
Line 1144... Line 1148...
1144
	      }
1148
	      }
1145
 
1149
 
1146
	      if (!TextSymbolizer->alignment.isEmpty())
1150
	      if (!TextSymbolizer->alignment.isEmpty())
1147
	      {
1151
	      {
1148
		 if (TextSymbolizer->alignment.toLower() == QString("top"))
1152
		 if (TextSymbolizer->alignment.toLower() == QString("top"))
1149
		    ts.set_vertical_alignment(mapnik::TOP);
1153
		    ts.set_vertical_alignment(mapnik::V_TOP);
1150
		 else if (TextSymbolizer->alignment.toLower() == QString("middle"))
1154
		 else if (TextSymbolizer->alignment.toLower() == QString("middle"))
1151
		    ts.set_vertical_alignment(mapnik::MIDDLE);
1155
		    ts.set_vertical_alignment(mapnik::V_MIDDLE);
1152
		 else if (TextSymbolizer->alignment.toLower() == QString("bottom"))
1156
		 else if (TextSymbolizer->alignment.toLower() == QString("bottom"))
1153
		    ts.set_vertical_alignment(mapnik::BOTTOM);
1157
		    ts.set_vertical_alignment(mapnik::V_BOTTOM);
1154
		 else
1158
		 else
1155
		    cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Unknown >>vertical placement<< \"" << TextSymbolizer->alignment.toAscii().data() << "\" --> ignoring!" << endl;
1159
		    cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Unknown >>vertical placement<< \"" << TextSymbolizer->alignment.toAscii().data() << "\" --> ignoring!" << endl;
1156
	      }
1160
	      }
1157
 
1161
 
1158
	      if (TextSymbolizer->dx != 0 || TextSymbolizer->dy != 0)
1162
	      if (TextSymbolizer->dx != 0 || TextSymbolizer->dy != 0)
Line 1173... Line 1177...
1173
 
1177
 
1174
	   if (PolygonPatternSymbolizer->file.length() <= 0)
1178
	   if (PolygonPatternSymbolizer->file.length() <= 0)
1175
	      cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Incomplete POLYGONPATTERNSYMBOLIZER --> ignoring!" << endl;
1179
	      cerr << "Error parsing " << XmlPath.toAscii().data() << ", line " << XmlLine << ": Incomplete POLYGONPATTERNSYMBOLIZER --> ignoring!" << endl;
1176
	   else
1180
	   else
1177
	   {
1181
	   {
1178
	      Rule->rl.append(polygon_pattern_symbolizer(findIcon(PolygonPatternSymbolizer->file).toAscii().data(),
1182
//	      Rule->rl.append(polygon_pattern_symbolizer(findIcon(PolygonPatternSymbolizer->file).toAscii().data(),
1179
						getTypeText(PolygonPatternSymbolizer->type),
1183
//						getTypeText(PolygonPatternSymbolizer->type),
1180
						PolygonPatternSymbolizer->width,
1184
//						PolygonPatternSymbolizer->width,
1181
						PolygonPatternSymbolizer->height));
1185
//						PolygonPatternSymbolizer->height));
-
 
1186
	      Rule->rl.append(polygon_pattern_symbolizer(parse_path(findIcon(PolygonPatternSymbolizer->file).toAscii().data())));
1182
	   }
1187
	   }
1183
	}
1188
	}
1184
	else if (qName.toLower() == QString("shieldsymbolizer"))
1189
	else if (qName.toLower() == QString("shieldsymbolizer"))
1185
	{
1190
	{
1186
	   Container = in_rule;
1191
	   Container = in_rule;
Line 1189... Line 1194...
1189
	   {
1194
	   {
1190
	      KMessageBox::error(0, i18n("Error parsing %1, line %2: Ending of SHIELDSYMBOLIZER without start, or outside of a RULE detected!").arg(XmlPath).arg(XmlLine));
1195
	      KMessageBox::error(0, i18n("Error parsing %1, line %2: Ending of SHIELDSYMBOLIZER without start, or outside of a RULE detected!").arg(XmlPath).arg(XmlLine));
1191
	      return false;
1196
	      return false;
1192
	   }
1197
	   }
1193
 
1198
 
1194
	   shield_symbolizer ss(ShieldSymbolizer->name.toAscii().data(),
1199
//	   shield_symbolizer ss(ShieldSymbolizer->name.toAscii().data(),
-
 
1200
//				ShieldSymbolizer->face_name.toAscii().data(),
-
 
1201
//				ShieldSymbolizer->size, setColor(ShieldSymbolizer->fill),
-
 
1202
//				findIcon(ShieldSymbolizer->file).toAscii().data(),
-
 
1203
//				getTypeText(ShieldSymbolizer->type),
-
 
1204
//				ShieldSymbolizer->width, ShieldSymbolizer->height);
-
 
1205
	   std::stringstream s;
-
 
1206
	   s << "[" << ShieldSymbolizer->name.toAscii().data() << "]";
-
 
1207
	   shield_symbolizer ss(parse_expression(s.str()),
1195
				ShieldSymbolizer->face_name.toAscii().data(),
1208
				ShieldSymbolizer->face_name.toAscii().data(),
1196
				ShieldSymbolizer->size, setColor(ShieldSymbolizer->fill),
1209
				ShieldSymbolizer->size, setColor(ShieldSymbolizer->fill),
1197
				findIcon(ShieldSymbolizer->file).toAscii().data(),
1210
				parse_path(findIcon(ShieldSymbolizer->file).toAscii().data()));
1198
				getTypeText(ShieldSymbolizer->type),
-
 
1199
				ShieldSymbolizer->width, ShieldSymbolizer->height);
-
 
1200
 
1211
 
1201
	   if (!ShieldSymbolizer->placement.isEmpty())
1212
	   if (!ShieldSymbolizer->placement.isEmpty())
1202
	      ss.set_label_placement((ShieldSymbolizer->placement.toLower() == QString("point")) ? mapnik::POINT_PLACEMENT : mapnik::LINE_PLACEMENT);
1213
	      ss.set_label_placement((ShieldSymbolizer->placement.toLower() == QString("point")) ? mapnik::POINT_PLACEMENT : mapnik::LINE_PLACEMENT);
1203
 
1214
 
1204
	   if (ShieldSymbolizer->dx != 0 || ShieldSymbolizer->dy != 0)
1215
	   if (ShieldSymbolizer->dx != 0 || ShieldSymbolizer->dy != 0)
Line 1217... Line 1228...
1217
	   {
1228
	   {
1218
	      KMessageBox::error(0, i18n("Error parsing %1, line %2: Ending of LINEPATTERNSYMBOLIZER without start, or outside of a RULE detected!").arg(XmlPath).arg(XmlLine));
1229
	      KMessageBox::error(0, i18n("Error parsing %1, line %2: Ending of LINEPATTERNSYMBOLIZER without start, or outside of a RULE detected!").arg(XmlPath).arg(XmlLine));
1219
	      return false;
1230
	      return false;
1220
	   }
1231
	   }
1221
 
1232
 
1222
	   Rule->rl.append(line_pattern_symbolizer(findIcon(LinePatternSymbolizer->file).toAscii().data(),
1233
//	   Rule->rl.append(line_pattern_symbolizer(findIcon(LinePatternSymbolizer->file).toAscii().data(),
1223
						getTypeText(LinePatternSymbolizer->type),
1234
//						getTypeText(LinePatternSymbolizer->type),
1224
						LinePatternSymbolizer->width,
1235
//						LinePatternSymbolizer->width,
1225
						LinePatternSymbolizer->height));
1236
//						LinePatternSymbolizer->height));
-
 
1237
	   Rule->rl.append(line_pattern_symbolizer(parse_path(findIcon(LinePatternSymbolizer->file).toAscii().data())));
1226
	}
1238
	}
1227
	else if (qName.toLower() == QString("filter") ||
1239
	else if (qName.toLower() == QString("filter") ||
1228
		 qName.toLower() == QString("maxscaledenominator") ||
1240
		 qName.toLower() == QString("maxscaledenominator") ||
1229
		 qName.toLower() == QString("minscaledenominator"))
1241
		 qName.toLower() == QString("minscaledenominator"))
1230
	   Container = in_rule;
1242
	   Container = in_rule;
Line 1287... Line 1299...
1287
	   if (Field == FLD_FILTER)
1299
	   if (Field == FLD_FILTER)
1288
	   {
1300
	   {
1289
	      Rule->filter = ch;
1301
	      Rule->filter = ch;
1290
 
1302
 
1291
	      if (!Rule->filter.isEmpty())
1303
	      if (!Rule->filter.isEmpty())
-
 
1304
	      {
-
 
1305
		 std::stringstream s;
-
 
1306
		 s << "[" << Rule->filter.toLatin1().data() << "] = 'latin1'";
-
 
1307
		 Rule->rl.set_filter(parse_expression(s.str()));
1292
		 Rule->rl.set_filter(create_filter(Rule->filter.toLatin1().data(), "latin1"));
1308
//		 Rule->rl.set_filter(create_filter(Rule->filter.toLatin1().data(), "latin1"));
-
 
1309
	      }
1293
	      else
1310
	      else
1294
		 cerr << "Warning in file " << XmlPath.toAscii().data() << " at line " << XmlLine << ": Ignoring empty filter!" << endl;
1311
		 cerr << "Warning in file " << XmlPath.toAscii().data() << " at line " << XmlLine << ": Ignoring empty filter!" << endl;
1295
	   }
1312
	   }
1296
	   else if (Field == FLD_MAXSCALE)
1313
	   else if (Field == FLD_MAXSCALE)
1297
	   {
1314
	   {
Line 1529... Line 1546...
1529
	   QFileInfo fileInfo = list.at(i);
1546
	   QFileInfo fileInfo = list.at(i);
1530
	   f = hv0 + fileInfo.fileName();
1547
	   f = hv0 + fileInfo.fileName();
1531
	   freetype_engine::register_font(f.toAscii().data());
1548
	   freetype_engine::register_font(f.toAscii().data());
1532
	}
1549
	}
1533
 
1550
 
1534
	m.setWidth(_width);
1551
	m.set_width(_width);
1535
	m.setHeight(_height);
1552
	m.set_height(_height);
1536
 
1553
 
1537
	try
1554
	try
1538
	{
1555
	{
1539
	   if (!ControlSet)	// Initialize the map?
1556
	   if (!ControlSet)	// Initialize the map?
1540
	   {
1557
	   {
Line 1560... Line 1577...
1560
	      pj.forward(plx, ply);
1577
	      pj.forward(plx, ply);
1561
	      pj.forward(prx, pry);
1578
	      pj.forward(prx, pry);
1562
	   }
1579
	   }
1563
 
1580
 
1564
	   // First we use Mapnik to create the map
1581
	   // First we use Mapnik to create the map
1565
	   m.zoomToBox(Envelope<double>(plx, ply, prx, pry));
1582
	   m.zoom_to_box(box2d<double>(plx, ply, prx, pry));
1566
 
1583
 
1567
	   // Here we render the map to an image buffer
1584
	   // Here we render the map to an image buffer
1568
	   Image32 buf(m.getWidth(), m.getHeight());
1585
	   image_32 buf(m.width(), m.height());
1569
	   agg_renderer<Image32> ren(m, buf);
1586
	   agg_renderer<image_32> ren(m, buf);
1570
	   ren.apply();
1587
	   ren.apply();
1571
 
1588
 
1572
	   // Put the image into a Qt object
1589
	   // Put the image into a Qt object
1573
	   QImage image((uchar*)buf.raw_data(), m.getWidth(), m.getHeight(), QImage::Format_ARGB32);
1590
	   QImage image((uchar*)buf.raw_data(), m.width(), m.height(), QImage::Format_ARGB32);
1574
	   pxmap = QPixmap::fromImage(image.rgbSwapped());
1591
	   pxmap = QPixmap::fromImage(image.rgbSwapped());
1575
	}
1592
	}
1576
 
1593
 
1577
	catch (const mapnik::config_error &ex)
1594
	catch (const mapnik::config_error &ex)
1578
	{
1595
	{
Line 1963... Line 1980...
1963
	ls->stroke_opacity = 0.0;
1980
	ls->stroke_opacity = 0.0;
1964
	ls->next = 0;
1981
	ls->next = 0;
1965
	return ls;
1982
	return ls;
1966
}
1983
}
1967
 
1984
 
1968
#endif // HAVE_MAPNIK
-
 
1969
 
1985
#endif // HAVE_MAPNIK
-
 
1986