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: