Sunday, 14 April 2013

Map - Report mit Karte

Hier die Beschreibung, wie man in einen Map-Bericht eine Karte auf Grundlage von GeoRest einbinden kann.  Vorteil gegenüber der WMS Lösung (beschrieben hier)
– das Objekt kann in der Darstellung hervorgehoben werden.

Voraussetzungen:

   - GeoRest Extension installiert und konfiguriert (siehe auch hier)
   - MapGuide Karte mit zum Bericht passenden Layer(n)

Zunächst die Konfiguration der GeoRest Erweiterung:

   - im CONF Ordner neues Verzeichnis anlegen
   - im Verzeichnis neue "restcfg.xml" erzeugen


<RestConfig>
 <Data>
  <Resource uripart="eos_flaeche_karte">
   <Source type="MapGuide">                               
    <FeatureSource>Library://AV6_UEP/Data/Topobase_1.FeatureSource  
    </FeatureSource>                                 
    <FeatureClass>WT_AV_TEST6_LESEN:LM_V_DSP_SO_SURFACE_ELE 
    </FeatureClass>
    <ServerIp>10.99.20.152</ServerIp>    
    <ServerPort >2821</ServerPort>
   </Source>
   <Representation renderer="PNG8" pattern=".png">                                 
    <MapDefinition>Library://AV6_UEP/Vorgabe.MapDefinition 
    </MapDefinition>                                                       
    <SelectionLayer>Einzelobjekt_Flaechenelement 
    </SelectionLayer>
    <DefaultZoomFactor>15</DefaultZoomFactor>                              
   </Representation>                      
  </Resource>            
 </Data>
</RestConfig>


<Resource uripart="eos_flaeche_karte"> - Adressbestandteil der URL zum Aufruf der GeoRest die die Karte erzeugt
<FeatureSource> - Topobase Datenverbindung
<FeatureClass> - Schema:Featureklasse, für die der Report erzeugt wird und ein Kartenobjekt eingebunden werden soll
..
<MapDefinition> - Kartendefinition für die Kartenerstellung
<SelectionLayer> - Layername für die Markierung des Objektes
<DefaultZoomFactor> - Wert kann auch später noch über URL Parameter überschrieben werden,


Konfiguration des Reports in AIA

1.  Berichtdesigner öffnen
2.  Neuen Bericht für die Featureklasse erstellen, die in der "restcfg.xml" konfiguriert wurde 
3.  Abschnitt "Detail-Körper" im Designer auswählen und Steuerlement "Bild" hinzufügen
4.  Im Menü "Hinzufügen >> Funktion >> Verwalten" eine neue Funktion hinzufügen
(im Beispiel:. georest_karte_eo_flaeche)
5.  VB.Net Script einfügen, URL Adresse anpassen:

Dim eoflaeche_fid as String
Dim URL as String


eoflaeche_fid = (Me.Record.LngValue("Fid")).ToString()

URL = "http://<<mapguide>>/rest/data/eo_flaeche_karte"
URL +=  "/.png?SETVIEWSCALE=500"
URL += "&SETDISPLAYWIDTH=800&SETDISPLAYHEIGHT=800&"
URL += "filter_1_AND_EQUAL_FID="
URL +=  eoflaeche_fid

georest_karte_eo_flaeche = URL

6.  Steuerlement "Bild" auswählen und in den Eigenschaften bei "PictureFile" den Verweis auf die ebene erstellte Funktion einbinden:

{fun.Georest_karte_eo_flaeche}




7.  Für die Kontrolle, ob die URL korrekt ist, Textelement hinzufügen und bei "Content" wie oben auf die VB.NET Funktion verweisen:



Erläuterungen zum Script:

Der Platzhalter <<mapguide>> muss im Script oben mit der korrekten URL zum MapGuide Server ersetzt werden.

Über die URL wird die GeoRest Anwendung aufgerufen und ein Kartenbild zurückgeliefert. Der URL Bestandteil " eo_flaeche_karte" entspricht der Einstellung aus der "restcfg.xml" von oben.

Übergeben wird hier die FID des Objektes, zu dem der Bericht erstellt wird. Über den Filter wird das Objekt gefunden:

URL += "filter_1_AND_EQUAL_FID="
URL +=  eoflaeche_fid

Zusätzlich werden weitere URL Parameter übergeben um die Bildgrösse und den Massstab festzulegen:

URL +=  "/.png?SETVIEWSCALE=500"
URL += "&SETDISPLAYWIDTH=800&SETDISPLAYHEIGHT=800&"

Zu beachten ist, dass beim Einbinden in den Bericht die Karte nicht mehr massstabsgetreu ist.

Zu den einzelnen zulässigen URL Parametern der GeoRest Extension und zu den Einzelheiten des Filters siehe hier

Den Bericht zum Formular hinzufügen und aufrufen:




Keine Anzeige der Makierung - was könnte das Problem sein?
- Layer mit den Features hat Filter oder Themen und nicht alle Features werden dargestellt. Es wird dann beim Aufruf über GeoRest zwar eine Karte erzeugt, da das Feature gemäss Layereinstellungen nicht dargestellt wird fehlt auch die Hervorhebung.
- Layername in Studio (im Layerordner) geändert (wegen Leerzeichen und Umlauten) aber den Layernamen nicht auch in der Kartendefinition entsprechend angepasst

Fehlermeldung - bezüglich GeometryExtent
- genaue Meldung liegt mir nicht mehr vor. Ursache war, dass aus dem Formular eine FID an die GeoRest Anwendung übergeben wurde, die es in der Featureklasse nicht gab bzw. das Objekt dort keine Geometrie hat. Man muss bei komplexeren Datenmodellen darauf achten, dass die FID aus dem Formular (oder welche ID mach auch übergibt) auch zur Featureklasse für die Kartendarstellung passt.




No comments:

Post a Comment