Monday 29 April 2013

Publizieren nach Mapserver/MapGuide - Vorsicht Spassbremse


Publiziert man eine Karte aus Map nach MapGuide/AIMS kann es passieren, dass im Web-Projekt pro Layer ein Spatial-Filter gesetzt wird, der sich sehr nachteilig auf die Performance auswirkt.
 
Das Problem hatte ich nach einiger Suche schon vor einiger Zeit entdeckt und mir ein kleines PHP Script geschrieben, dass in einem Web-Projekt die Spatial Filter entfernt. Leider hatte ich das bei einem kürzlich publizierten Projekt mit schlechter Kartenperformance schon wieder vergessen. Daher hatte ich begonnen, die Ursache zu suchen : liegt es an den verwendeten Symbolen, an der Vielzahl der Klassen je Layer oder an etwas anderem? Mit AIMS 2013 kann man je Karte einen einfachen Performancebericht erstellen. Nachdem ich entsprechend einige Tests durchgeführt hatte fiel mir dann aber doch noch auf, dass bei den Layern der Spatial Filter gesetzt war. Kaum waren diese entfernt, hatte sich die Kartenperformance wesentlich verbessert. Die Performanceberichte zeigen dies deutlich:
 
Karte 5 Layer:
- mit einem Spatial Filter je Layer : Kartenaufbau ca 2.5 sec


 
- ohne Spatial Filter je Layer: Kartenaufbau ca. 0.01 sec

 
Der Layerfilter stammt aus dem Darstellungsmodell. Wann genau der Layerfilter mit übergeben wird habe ich nicht weiter untersucht. Er sollte z.B. nicht mit übertragen werden, wenn man die Option "Auf Ansichtsfenster begrenzen" im Darstellungsmodell nicht verwendet. Jedenfalls empfiehlt es sich, nach dem Publizieren im Layer-Editor in Studio zu schauen, ob die Layer einen Spatial Filter haben oder nicht:
 

 
Die Performanceeinbusse kommt zu Stande, da jede Layer- Abfrage in Oracle nun zwei Spatial Filter enthält - einen aus der Layerdefinition und den zweiten aus den Koordinaten für die neue Karte. Der Filter aus der Layerdefinition ist wohl in den meisten Fällen nicht gewollt.
 
Per Script kann ich die unerwünschten Spatial Filter entfernen und die anderen Filter beibehalten:

No comments:

Post a Comment