Karten in Berichte
Zum erzeugen eines solchen Berichtes wird ein Bild Steuerelement in Kombination mit einer C# Funktion verwendet. C# Kenntnisse sind hierbei von Vorteil. Sollten Sie Probleme haben wenden Sie sich bitte an unsere Hotline oder einen C# Entwickler.
Wählen Sie dann beim Bildsteuerelement bei "Größe" immer den Wert "ZOOM". Dadurch wird das Seitenverhältnis des Bildes beibehalten und das Bild der Grösse des Steuerelements eingepasst. Wird dies nicht gemacht dann erscheint das Objekt nicht in der Mitte des Bildes.
Beispiel Druckvorschau eines Berichts mit einer MapServer Karte

Sie benötigen dazu eine URL die die Karte erzeugt.
Erzeugen sie zuerst eine Script Funktion, in dem Sie oben auf den Script-Knopf klicken.

Im Script Code Fenster sehen sie folgenden Code:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XSystem;
using Mum.Geo.ReportDesigner;
namespace Report
{
public class MyReportPlugIn : ReportPlugIn
{
public MyReportPlugIn(IReportApiHost host) : base(host)
{
//
}
public string MyFunction()
{
return "Test";
}
//HIER NEUEN CODE EINFUEGEN
}
}
Fügen Sie nun am Ende, aber vor den letzten zwei geschweiften Klammern eine neue Funktion zur Erzeugung der Karte ein.
Hier ein Beispiel Code für eine solche Funktion
public string CreateMapUrl ()
{
//100 = Breite des Bildauschnittes in Meter
//50 = Höhe des Bildauschnittes in Meter
string bbox = this.Report.Record.CreateMapBoundingBoxFromCenter("A.GEOM", 100, 50, "EPSG:31467");
if (bbox.Length>0)
{
var url = "https://topowiki.mum.de/mapserver/mapserv.exe" +
"?map=C:\\inetpub\\wwwroot\\MapEdit_2019R1\\MumGeoData\\MapServer\\alkisdemo.map" +
"&REQUEST=GetMap" +
"&SERVICE=WMS" +
"&VERSION=1.3.0" +
"&FORMAT=image/png" +
"&Layers=ax_weg_tbl,ax_flurstueck_tbl,v_grenzpunkt,ax_flurstueck_l,ax_flurstueck_a,ax_gebaeude_l,ax_gebaeude_a,ax_gebaeude_tbl_m,ax_lagbezmithnr_tbl,ax_lagbezohnehnr_tbl" +
"&CRS=EPSG:31467" +
"&BBOX=" + bbox +
"&Width=1000" +
"&Height=500" +
"&TRANSPARENT=TRUE" +
"&Styles=";
return url;
}
else
{
return "";
}
}
Im Code Editor gibt es eine Option Example Code hier stehen diverse Code Beispiele, unter anderem auch CreateMapUrl, diesen Beispiel Code können Sie kopieren und anpassen.
Am ende sollte es so aussehen:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using XSystem;
using Mum.Geo.ReportDesigner;
namespace Report
{
public class MyReportPlugIn : ReportPlugIn
{
public MyReportPlugIn(IReportApiHost host) : base(host)
{
//
}
public string MyFunction()
{
return "Test";
}
public string CreateMapUrl ()
{
//100 = Breite des Bildauschnittes in Meter
//50 = Höhe des Bildauschnittes in Meter
//ESPG Code der Datenbank/Karte
string bbox = this.Report.Record.CreateMapBoundingBoxFromCenter("A.GEOM", 100, 50, "EPSG:31467");
if (bbox.Length>0)
{
var url = "https://topowiki.mum.de/mapserver/mapserv.exe" +
"?map=C:\\inetpub\\wwwroot\\MapEdit_2019R1\\MumGeoData\\MapServer\\alkisdemo.map" +
"&REQUEST=GetMap" +
"&SERVICE=WMS" +
"&VERSION=1.3.0" +
"&FORMAT=image/png" +
"&Layers=ax_weg_tbl,ax_flurstueck_tbl,v_grenzpunkt,ax_flurstueck_l,ax_flurstueck_a,ax_gebaeude_l,ax_gebaeude_a,ax_gebaeude_tbl_m,ax_lagbezmithnr_tbl,ax_lagbezohnehnr_tbl" +
"&CRS=EPSG:31467" +
"&BBOX=" + bbox +
"&Width=1000" +
"&Height=500" +
"&TRANSPARENT=TRUE" +
"&Styles=";
return url;
}
else
{
return "";
}
}
}
}
Nun können wahlweise die Parameter der Funktion "CreateMapBoundingBoxFromCenter" angepasst werden.
Es muss der Name der GEOM-Spalte: A.GEOM angegeben werden,
die Spalte GEOM muss im SQL des Berichts vorhanden sein.
Die Spalte muss nicht in den Bericht eingefügt werden.
Nach dem definieren der C# Funktion fügen sie ein Bild Steuerelement in ihren Bericht ein. Statt einer URL geben sie einen Platzhalter für die gerade eben erzeugte Funktion an. In diesem Fall:
{Fun.CreateMapUrl()}

Wählen Sie dann beim Bildsteuerelement bei "Größe" den Wert "ZOOM". Dadurch wird das Seitenverhältnis des Bildes beibehalten und das Bild der Grösse des Steuerelements eingepasst. Wird dies nicht gemacht dann erscheint das Objekt nicht in der Mitte des Bildes.
Am einfachsten lesen Sie die Breite/Höhe Werte des Bild Steuerelementes aus dem Berichtsdesigner und setzen Sie diese Werte als Meter Werte ein. Wenn Ihnen bei der Anzeige nun das Bild zu klein/gross ist multiplizieren/dividieren Sie einfach diese Werte um einen Faktor.
Ein Bericht mit vielen Karten kann unter Umständen sehr sehr lange dauern. Das kann daran liegen das MapGuide/MapServer lange braucht um diese zu erzeugen. Des weiteren werden solche Berichte auch sehr gross wenn sie viele Bilder haben und dadurch dauert das Erzeugen und Herunterladen sehr lange. Am besten die Anzahl der Datensätze mit LIMIT / Rownum beschränken damit der Endanwender nicht tausende von Karten erzeugt und damit den Server lahm legt.
Wenn die URL sehr lange ist kann es sein das der Aufruf fehlschlägt.
Sie können dann mit dem Commando POST ein HTTP POST erzwingen.
siehe POST unter "Bilder in Berichten".