Speed issue in GetObservation interpretation
Hi,
I'm trying to visualize 8607 points of a four campaigns of the
Meet Mee Mechelen in a map browser. I'm indexing the visualization by an attribute of the observations so I need to get the full description for each observation. to do that, I create this request:
http://www.ogc3.uab.cat/cgi-bin/CitSci/MiraMon.cgi??VERSION=2.0.0&SERVICE=SOS&REQUEST=GetObservation&featureOfInterest=http://www.opengis.uab.cat/meet-mee-mechelen/featureOfInterest/&SRSNAME=EPSG:4326&BBOX=50.84927863623046,4.0856201982421965,51.20427436376952,4.8340638017578215
The result is a 35Mbyte long file due to the lengthy description of each observation: this is a simple of the first observation response
<om:OM_Observation gml:id="meet-mee-mechelen_1_13">
<om:type xlink:href="http://www.opengis.net/def/observationType/OGC-OM/2.0/OM_ComplexObservation"/>
<om:phenomenonTime>
<gml:TimeInstant gml:id="phenomenonTime_meet-mee-mechelen_1_1">
<gml:timePosition>2017-11-19 17:20:00+01</gml:timePosition>
</gml:TimeInstant>
</om:phenomenonTime>
<om:resultTime xlink:href="#phenomenonTime_meet-mee-mechelen_1_1"/>
<om:procedure xlink:href="http://www.opengis.uab.cat/meet-mee-mechelen/procedure/5"/>
<om:observedProperty xlink:href="http://www.opengis.uab.cat/meet-mee-mechelen/observedProperty"/>
<om:featureOfInterest xlink:href="http://www.opengis.uab.cat/meet-mee-mechelen/featureOfInterest/1"/>
<om:result xsi:type="swe:DataRecordPropertyType">
<swe:DataRecord>
<swe:field name="CAMPAIGN">
<swe:Text definition="http://www.opengis.uab.cat/meet-mee-mechelen/field/">
<swe:value>Oct-Nov2017</swe:value>
</swe:Text>
</swe:field>
<swe:field name="time_first">
<swe:Text definition="http://www.opengis.uab.cat/meet-mee-mechelen/field/">
<swe:value>2017-11-06 08:00:10+01</swe:value>
</swe:Text>
</swe:field>
<swe:field name="bc_aggr">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/bc_aggr">
<swe:uom code="?"/>
<swe:value> 3155</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="bc_aggr_mi">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/bc_aggr_mi">
<swe:uom code="?"/>
<swe:value> 80</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="bc_aggr_ma">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/bc_aggr_ma">
<swe:uom code="?"/>
<swe:value>16413</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="bc_aggr_st">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/bc_aggr_st">
<swe:uom code="?"/>
<swe:value> 3398</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="number_of_">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/number_of_">
<swe:uom code="?"/>
<swe:value>25</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="number_o_1">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/number_o_1">
<swe:uom code="?"/>
<swe:value>13</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="mean_numbe">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/mean_numbe">
<swe:uom code="?"/>
<swe:value> 8</swe:value>
</swe:Quantity>
</swe:field>
<swe:field name="uncertaint">
<swe:Quantity definition="http://www.opengis.uab.cat/meet-mee-mechelen/variable/uncertaint">
<swe:uom code="?"/>
<swe:value>0.50</swe:value>
</swe:Quantity>
</swe:field>
</swe:DataRecord>
</om:result>
</om:OM_Observation>
</sos:observationData>
My surprise is that requesting and interpreting this "file" takes an incredibly long amount of time. We have analyzed and this is our preliiminary conclusion:
- 2190 ms the creating the file and the client receives it
- 15000ms are spend by the AJAX library to transform it into and XML DOM
- 200000ms are invested by the JavaScript code to explore he DOM and create a JavaScript data structure that is identical to a GeoJSON file.
We are know trying to optimize the code to make it faster but I doubt we are able to make it much more efficient.
This lives us with the following alternatives:
- Force GetObservation include a JSON representation of the properties in the <om:result >
- Force a full JSON encoding for the GetObservation. I have not found a parameter in the KVP syntax to do so
- Move to WFS and GeoJSON response.
- Move processing to server side (Andy Cobley's suggestion)
What I should do?
--
JoanMaso - 21 Feb 2019