[Geoserver-devel] Adding a multidimensional extension to WMTS (as a GeoServer community module, with integrations with GWC own WMTS).

Hi,
I’m currently working on a extension/profile of WMTS (and eventually WMS) that allows
clients to better interact with a dataset having multiple dimensions, eventually scattered,
eventually correlated, providing tools to discover where the pockets of data are in
a large potential ND space.
The extension is written down as a spec of sorts, but it’s not a OGC spec, if you are curious
you can read it here:
http://demo.geo-solutions.it/share/wmts-multidim/wmts_multidim_geosolutions.html

Now, given this is nothing official I want to keep it in a community module.
And given it’s about deep understanding of the dimensions structure, and requires custom fast
data access to get all the min/max/histograms, I want to keep it
in GeoServer, where all the tools to recognize layer types and query dimensions are
available.

Now, what I need to do in order to add support for the extension is:

  • Add support for dimensions in the WMTS caps document. Dimensions are a native concept in WMTS, but they are limited to a full enumeration of possible values (you can read more about it in the doc above).
  • Add extra operations to the protocol (typical of a profile), by declaring them in the caps document and then having a way to dispatch them when invoked
  • (Optional) Add REST extension to WMTS… ok, this can be done directly in GWC, just not sure right now if it will fit. If added, the caps document will need to contain URL templates for the new operations, too

For the first, I would suggest to extend TileLayer with a method to discover the dimensions:

getDimensions() → Map<String, Dimension>

where Dimension would be a bean reporting the WMTS description of a dimension, that is, providing name, title, abstract, default value and list of values.
Given the limited usefulness of the full enumeration approach against large domains, I’m inclined to just return the list of values as a List, if one has troubles keeping it in memory, the caps document is toast anyways, but I’m open to other alternatives, like a closeable iterator of sorts (we have one in GeoServer, but it’s not available in GWC).

The default implementation would just return an empty map, the GeoServerTileLayer would look for a TileDimensionProvider interface returning such map, with no default implementation (to keep things easy for the moment), and the community module would provide an implementation of it.

In order to extend the protocol instead, I’d propose to have a WMTSExtension interface in GWC following the same spirit as
the GeoServer extended capabilities providers, but with the extra ability to dispatch a request, something like:

interface WMTSExtension {

/* --------- Pretty much as the geoserver own extended caps providers here -------- */

String getSchemaLocations(String schemaBaseURL);

void registerNamespaces(NamespaceSupport namespaces);

public abstract void encodeExtendedOperations(
org.geoserver.ExtendedCapabilitiesProvider.Translator tx, WCSInfo wcs,
GetCapabilitiesType request) throws IOException;

/**

  • Interface for clients to encode XML.
    */
    public interface Translator {

/**

  • Starts an element creating the opening tag.
  • @param element The name of the element.
    */
    void start(String element);

/**

  • Starts an element with attributes, creating the opening tag.
  • @param element The name of the element.
  • @param attributes The attributes of the element.
    */
    void start(String element, Attributes attributes);

/**

  • Creates a text node within an element.
  • @param text The character text.
    */
    void chars(String text);

/**

  • Ends an element creating a closing tag.
  • @param element
    */
    void end(String element);
    }

/** ------------- Dispatching the extra requests here, working like a GWC Service object -------------------- **/

public Conveyor getConveyor(HttpServletRequest request, HttpServletResponse response)
throws GeoWebCacheException, OWSException;

public void handleRequest(Conveyor conv) throws OWSException;

}

If there are no objections I’ll turn this into a GWC proposal next week.
Now, the only thing I’m a bit concerned about is Kevin’s availability and ability to type… Kevin, if you can use any voice

communication we can setup a voice meeting, chat about this, and I’ll transcribe your feedback for everybody else
to read.

Cheers
Andrea

==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313

fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.


+1 to create the GeoServer community module.

Kind regards,
Ben.

On 30/05/16 22:25, Andrea Aime wrote:

Hi,
I'm currently working on a extension/profile of WMTS (and eventually WMS)
that allows
clients to better interact with a dataset having multiple dimensions,
eventually scattered,
eventually correlated, providing tools to discover where the pockets of
data are in
a large potential ND space.
The extension is written down as a spec of sorts, but it's not a OGC spec,
if you are curious
you can read it here:
http://demo.geo-solutions.it/share/wmts-multidim/wmts_multidim_geosolutions.html

Now, given this is nothing official I want to keep it in a community
module.
And given it's about deep understanding of the dimensions structure, and
requires custom fast
data access to get all the min/max/histograms, I want to keep it
in GeoServer, where all the tools to recognize layer types and query
dimensions are
available.

Now, what I need to do in order to add support for the extension is:

   - Add support for dimensions in the WMTS caps document. Dimensions are a
   native concept in WMTS, but they are limited to a full enumeration of
   possible values (you can read more about it in the doc above).
   - Add extra operations to the protocol (typical of a profile), by
   declaring them in the caps document and then having a way to dispatch them
   when invoked
   - (Optional) Add REST extension to WMTS... ok, this can be done directly
   in GWC, just not sure right now if it will fit. If added, the caps document
   will need to contain URL templates for the new operations, too

For the first, I would suggest to extend TileLayer with a method to
discover the dimensions:

getDimensions() -> Map<String, Dimension>

where Dimension would be a bean reporting the WMTS description of a
dimension, that is, providing name, title, abstract, default value and list
of values.
Given the limited usefulness of the full enumeration approach against large
domains, I'm inclined to just return the list of values as a List<String>,
if one has troubles keeping it in memory, the caps document is toast
anyways, but I'm open to other alternatives, like a closeable iterator of
sorts (we have one in GeoServer, but it's not available in GWC).

The default implementation would just return an empty map, the
GeoServerTileLayer would look for a TileDimensionProvider interface
returning such map, with no default implementation (to keep things easy for
the moment), and the community module would provide an implementation of it.

In order to extend the protocol instead, I'd propose to have
a WMTSExtension interface in GWC following the same spirit as
the GeoServer extended capabilities providers
<https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/ExtendedCapabilitiesProvider.java&gt;,
but with the extra ability to dispatch a request, something like:

interface WMTSExtension {

     /* --------- Pretty much as the geoserver own extended caps providers
here -------- */

     String getSchemaLocations(String schemaBaseURL);

    void registerNamespaces(NamespaceSupport namespaces);

    public abstract void encodeExtendedOperations(
            org.geoserver.ExtendedCapabilitiesProvider.Translator tx,
WCSInfo wcs,
            GetCapabilitiesType request) throws IOException;

/**
     * Interface for clients to encode XML.
     */
    public interface Translator {

        /**
         * Starts an element creating the opening tag.
         *
         * @param element The name of the element.
         */
        void start(String element);

        /**
         * Starts an element with attributes, creating the opening tag.
         *
         * @param element The name of the element.
         * @param attributes The attributes of the element.
         */
        void start(String element, Attributes attributes);

        /**
         * Creates a text node within an element.
         *
         * @param text The character text.
         */
        void chars(String text);

        /**
         * Ends an element creating a closing tag.
         *
         * @param element
         */
        void end(String element);
    }

    /** ------------- Dispatching the extra requests here, working like a
GWC Service object -------------------- **/

    public Conveyor getConveyor(HttpServletRequest request,
HttpServletResponse response)
            throws GeoWebCacheException, OWSException;

    public void handleRequest(Conveyor conv) throws OWSException;

}

If there are no objections I'll turn this into a GWC proposal next week.
Now, the only thing I'm a bit concerned about is Kevin's availability and
ability to type.... Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I'll
transcribe your feedback for everybody else
to read.

Cheers
Andrea

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e

_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Ben Caradoc-Davies <ben@anonymised.com>
Director
Transient Software Limited <http://transient.nz/&gt;
New Zealand

Hi Ben,
thanks for the +1 for the community module.

I got no feedback on the proposed changes to the GWC WMTS module… shall I just
go ahead and write a proposal there? I also re-iterate my availability for a voice meeting:

If there are no objections I’ll turn this into a GWC proposal next week.
Now, the only thing I’m a bit concerned about is Kevin’s availability and
ability to type… Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I’ll
transcribe your feedback for everybody else
to read.

There is a reasonable window around 9-10 am Vancouver time that still overlaps with
my normal office hours:
http://www.timeanddate.com/worldclock/meetingtime.html?iso=20160608&p1=215&p2=256

Cheers
Andrea

···

On Mon, May 30, 2016 at 9:45 PM, Ben Caradoc-Davies <ben@anonymised.com> wrote:

+1 to create the GeoServer community module.

Kind regards,
Ben.

On 30/05/16 22:25, Andrea Aime wrote:

Hi,
I’m currently working on a extension/profile of WMTS (and eventually WMS)
that allows
clients to better interact with a dataset having multiple dimensions,
eventually scattered,
eventually correlated, providing tools to discover where the pockets of
data are in
a large potential ND space.
The extension is written down as a spec of sorts, but it’s not a OGC spec,
if you are curious
you can read it here:
http://demo.geo-solutions.it/share/wmts-multidim/wmts_multidim_geosolutions.html

Now, given this is nothing official I want to keep it in a community
module.
And given it’s about deep understanding of the dimensions structure, and
requires custom fast
data access to get all the min/max/histograms, I want to keep it
in GeoServer, where all the tools to recognize layer types and query
dimensions are
available.

Now, what I need to do in order to add support for the extension is:

  • Add support for dimensions in the WMTS caps document. Dimensions are a
    native concept in WMTS, but they are limited to a full enumeration of
    possible values (you can read more about it in the doc above).
  • Add extra operations to the protocol (typical of a profile), by
    declaring them in the caps document and then having a way to dispatch them
    when invoked
  • (Optional) Add REST extension to WMTS… ok, this can be done directly
    in GWC, just not sure right now if it will fit. If added, the caps document
    will need to contain URL templates for the new operations, too

For the first, I would suggest to extend TileLayer with a method to
discover the dimensions:

getDimensions() → Map<String, Dimension>

where Dimension would be a bean reporting the WMTS description of a
dimension, that is, providing name, title, abstract, default value and list
of values.
Given the limited usefulness of the full enumeration approach against large
domains, I’m inclined to just return the list of values as a List,
if one has troubles keeping it in memory, the caps document is toast
anyways, but I’m open to other alternatives, like a closeable iterator of
sorts (we have one in GeoServer, but it’s not available in GWC).

The default implementation would just return an empty map, the
GeoServerTileLayer would look for a TileDimensionProvider interface
returning such map, with no default implementation (to keep things easy for
the moment), and the community module would provide an implementation of it.

In order to extend the protocol instead, I’d propose to have
a WMTSExtension interface in GWC following the same spirit as
the GeoServer extended capabilities providers
<https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/ExtendedCapabilitiesProvider.java>,

but with the extra ability to dispatch a request, something like:

interface WMTSExtension {

/* --------- Pretty much as the geoserver own extended caps providers
here -------- */

String getSchemaLocations(String schemaBaseURL);

void registerNamespaces(NamespaceSupport namespaces);

public abstract void encodeExtendedOperations(
org.geoserver.ExtendedCapabilitiesProvider.Translator tx,
WCSInfo wcs,
GetCapabilitiesType request) throws IOException;

/**

  • Interface for clients to encode XML.
    */
    public interface Translator {

/**

  • Starts an element creating the opening tag.
  • @param element The name of the element.
    */
    void start(String element);

/**

  • Starts an element with attributes, creating the opening tag.
  • @param element The name of the element.
  • @param attributes The attributes of the element.
    */
    void start(String element, Attributes attributes);

/**

  • Creates a text node within an element.
  • @param text The character text.
    */
    void chars(String text);

/**

  • Ends an element creating a closing tag.
  • @param element
    */
    void end(String element);
    }

/** ------------- Dispatching the extra requests here, working like a
GWC Service object -------------------- **/

public Conveyor getConveyor(HttpServletRequest request,
HttpServletResponse response)
throws GeoWebCacheException, OWSException;

public void handleRequest(Conveyor conv) throws OWSException;

}

If there are no objections I’ll turn this into a GWC proposal next week.
Now, the only thing I’m a bit concerned about is Kevin’s availability and
ability to type… Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I’ll
transcribe your feedback for everybody else
to read.

Cheers
Andrea


What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e


Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Ben Caradoc-Davies <ben@anonymised.com>
Director
Transient Software Limited <http://transient.nz/>
New Zealand

==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313

fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.


On Tue, Jun 7, 2016 at 7:00 AM, Andrea Aime <andrea.aime@anonymised.com>
wrote:

Hi Ben,
thanks for the +1 for the community module.

I got no feedback on the proposed changes to the GWC WMTS module... shall
I just
go ahead and write a proposal there? I also re-iterate my availability for
a voice meeting:

Sorry for the slow turnaround, looking at it right now. At a first glance
it looks ok but doing a more in depth review FWIW

Gab

If there are no objections I'll turn this into a GWC proposal next week.

Now, the only thing I'm a bit concerned about is Kevin's availability and
ability to type.... Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I'll
transcribe your feedback for everybody else
to read.

There is a reasonable window around 9-10 am Vancouver time that still
overlaps with
my normal office hours:

http://www.timeanddate.com/worldclock/meetingtime.html?iso=20160608&p1=215&p2=256

Cheers
Andrea

On Mon, May 30, 2016 at 9:45 PM, Ben Caradoc-Davies <ben@anonymised.com>
wrote:

+1 to create the GeoServer community module.

Kind regards,
Ben.

On 30/05/16 22:25, Andrea Aime wrote:

Hi,
I'm currently working on a extension/profile of WMTS (and eventually WMS)
that allows
clients to better interact with a dataset having multiple dimensions,
eventually scattered,
eventually correlated, providing tools to discover where the pockets of
data are in
a large potential ND space.
The extension is written down as a spec of sorts, but it's not a OGC
spec,
if you are curious
you can read it here:

http://demo.geo-solutions.it/share/wmts-multidim/wmts_multidim_geosolutions.html

Now, given this is nothing official I want to keep it in a community
module.
And given it's about deep understanding of the dimensions structure, and
requires custom fast
data access to get all the min/max/histograms, I want to keep it
in GeoServer, where all the tools to recognize layer types and query
dimensions are
available.

Now, what I need to do in order to add support for the extension is:

   - Add support for dimensions in the WMTS caps document. Dimensions
are a
   native concept in WMTS, but they are limited to a full enumeration of
   possible values (you can read more about it in the doc above).
   - Add extra operations to the protocol (typical of a profile), by
   declaring them in the caps document and then having a way to dispatch
them
   when invoked
   - (Optional) Add REST extension to WMTS... ok, this can be done
directly
   in GWC, just not sure right now if it will fit. If added, the caps
document
   will need to contain URL templates for the new operations, too

For the first, I would suggest to extend TileLayer with a method to
discover the dimensions:

getDimensions() -> Map<String, Dimension>

where Dimension would be a bean reporting the WMTS description of a
dimension, that is, providing name, title, abstract, default value and
list
of values.
Given the limited usefulness of the full enumeration approach against
large
domains, I'm inclined to just return the list of values as a
List<String>,
if one has troubles keeping it in memory, the caps document is toast
anyways, but I'm open to other alternatives, like a closeable iterator of
sorts (we have one in GeoServer, but it's not available in GWC).

The default implementation would just return an empty map, the
GeoServerTileLayer would look for a TileDimensionProvider interface
returning such map, with no default implementation (to keep things easy
for
the moment), and the community module would provide an implementation of
it.

In order to extend the protocol instead, I'd propose to have
a WMTSExtension interface in GWC following the same spirit as
the GeoServer extended capabilities providers
<
https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/ExtendedCapabilitiesProvider.java
>,

but with the extra ability to dispatch a request, something like:

interface WMTSExtension {

     /* --------- Pretty much as the geoserver own extended caps
providers
here -------- */

     String getSchemaLocations(String schemaBaseURL);

    void registerNamespaces(NamespaceSupport namespaces);

    public abstract void encodeExtendedOperations(
            org.geoserver.ExtendedCapabilitiesProvider.Translator tx,
WCSInfo wcs,
            GetCapabilitiesType request) throws IOException;

/**
     * Interface for clients to encode XML.
     */
    public interface Translator {

        /**
         * Starts an element creating the opening tag.
         *
         * @param element The name of the element.
         */
        void start(String element);

        /**
         * Starts an element with attributes, creating the opening tag.
         *
         * @param element The name of the element.
         * @param attributes The attributes of the element.
         */
        void start(String element, Attributes attributes);

        /**
         * Creates a text node within an element.
         *
         * @param text The character text.
         */
        void chars(String text);

        /**
         * Ends an element creating a closing tag.
         *
         * @param element
         */
        void end(String element);
    }

    /** ------------- Dispatching the extra requests here, working like
a
GWC Service object -------------------- **/

    public Conveyor getConveyor(HttpServletRequest request,
HttpServletResponse response)
            throws GeoWebCacheException, OWSException;

    public void handleRequest(Conveyor conv) throws OWSException;

}

If there are no objections I'll turn this into a GWC proposal next week.
Now, the only thing I'm a bit concerned about is Kevin's availability and
ability to type.... Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I'll
transcribe your feedback for everybody else
to read.

Cheers
Andrea

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and
traffic
patterns at an interface-level. Reveals which users, apps, and protocols
are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports.
https://ad.doubleclick.net/ddm/clk/305295220;132659582;e

_______________________________________________
Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel

--
Ben Caradoc-Davies <ben@anonymised.com>
Director
Transient Software Limited <http://transient.nz/&gt;
New Zealand

--

GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------

------------------------------------------------------------------------------
What NetFlow Analyzer can do for you? Monitors network bandwidth and
traffic
patterns at an interface-level. Reveals which users, apps, and protocols
are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e
_______________________________________________
Geowebcache-devel mailing list
Geowebcache-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geowebcache-devel

--

Gabriel Roldán
Software Developer | Boundless <http://boundlessgeo.com/&gt;
groldan@anonymised.com
@boundlessgeo <http://twitter.com/boundlessgeo/&gt;

ok, here’s my 2 cents.

Having almost no experience with multidimensional datasets myself I can barely speak of the approach (in regard to the protocol extension), though in general it looks totally sensible.

···
  • Ranges: wonder if it’d make sense to have an open/closed boundes/unbounded range syntax (check Guava’s Range javadocs for a possible syntax as reference [1])
  • Will an open source client be provided as well? e.g. an OL3 extension?
  • Implementation wise, have you considered writing a separate WMTS service instead of extending the rather dumb GWC one? (especially when it comes to XML encoding, it still uses ad-hoc string building instead of any actual XML API).
    Also, the “protocol extension profile” approach can work, but wonder if you would have more freedom by defining it as separate service, lets say DWMTS of sorts. In any case I’d advise not to care about GWC public service API as much as possible and restrict development to a GeoServer plugin where it is actually possible to implement this (by means of GeoServerTileLayer/LayerInfo introspection?). I’m mentioning this cause perhaps during the initial definition of the extension it may seem pretty solid for the specific use cases at hand, but as a protocol extension is might need further validation against other unforeseen cases. And probably a separate service would give you more freedom to experiment and evolve without having to worry about non official WMTS versions (you can’t just version it 1.0.something). In any case, the point is whatever the approach (1.0 extension profile or new service), I feel it’d be easier (in terms of flexibility and freedom) for you if you could just avoid the whole WMTSExtesion thing and focus on doing your business confined to a Geoserver plugin?

Sorry I only have questions though.

Cheers,
Gabriel

[1] <https://google.github.io/guava/releases/17.0/api/docs/com/google/common/collect/Range.html>

On Thu, Jun 9, 2016 at 10:17 AM, Gabriel Roldan <groldan@anonymised.com> wrote:

On Tue, Jun 7, 2016 at 7:00 AM, Andrea Aime <andrea.aime@anonymised.com68…> wrote:

Hi Ben,
thanks for the +1 for the community module.

I got no feedback on the proposed changes to the GWC WMTS module… shall I just
go ahead and write a proposal there? I also re-iterate my availability for a voice meeting:

Sorry for the slow turnaround, looking at it right now. At a first glance it looks ok but doing a more in depth review FWIW

Gab

If there are no objections I’ll turn this into a GWC proposal next week.
Now, the only thing I’m a bit concerned about is Kevin’s availability and
ability to type… Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I’ll
transcribe your feedback for everybody else
to read.

There is a reasonable window around 9-10 am Vancouver time that still overlaps with
my normal office hours:
http://www.timeanddate.com/worldclock/meetingtime.html?iso=20160608&p1=215&p2=256

Cheers

Andrea


What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e


Geowebcache-devel mailing list
Geowebcache-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geowebcache-devel

Gabriel Roldán
Software Developer | Boundless
groldan@anonymised.com
@boundlessgeo

On Mon, May 30, 2016 at 9:45 PM, Ben Caradoc-Davies <ben@anonymised.com> wrote:

+1 to create the GeoServer community module.

Kind regards,
Ben.

On 30/05/16 22:25, Andrea Aime wrote:

Hi,
I’m currently working on a extension/profile of WMTS (and eventually WMS)
that allows
clients to better interact with a dataset having multiple dimensions,
eventually scattered,
eventually correlated, providing tools to discover where the pockets of
data are in
a large potential ND space.
The extension is written down as a spec of sorts, but it’s not a OGC spec,
if you are curious
you can read it here:
http://demo.geo-solutions.it/share/wmts-multidim/wmts_multidim_geosolutions.html

Now, given this is nothing official I want to keep it in a community
module.
And given it’s about deep understanding of the dimensions structure, and
requires custom fast
data access to get all the min/max/histograms, I want to keep it
in GeoServer, where all the tools to recognize layer types and query
dimensions are
available.

Now, what I need to do in order to add support for the extension is:

  • Add support for dimensions in the WMTS caps document. Dimensions are a
    native concept in WMTS, but they are limited to a full enumeration of
    possible values (you can read more about it in the doc above).
  • Add extra operations to the protocol (typical of a profile), by
    declaring them in the caps document and then having a way to dispatch them
    when invoked
  • (Optional) Add REST extension to WMTS… ok, this can be done directly
    in GWC, just not sure right now if it will fit. If added, the caps document
    will need to contain URL templates for the new operations, too

For the first, I would suggest to extend TileLayer with a method to
discover the dimensions:

getDimensions() → Map<String, Dimension>

where Dimension would be a bean reporting the WMTS description of a
dimension, that is, providing name, title, abstract, default value and list
of values.
Given the limited usefulness of the full enumeration approach against large
domains, I’m inclined to just return the list of values as a List,
if one has troubles keeping it in memory, the caps document is toast
anyways, but I’m open to other alternatives, like a closeable iterator of
sorts (we have one in GeoServer, but it’s not available in GWC).

The default implementation would just return an empty map, the
GeoServerTileLayer would look for a TileDimensionProvider interface
returning such map, with no default implementation (to keep things easy for
the moment), and the community module would provide an implementation of it.

In order to extend the protocol instead, I’d propose to have
a WMTSExtension interface in GWC following the same spirit as
the GeoServer extended capabilities providers
<https://github.com/geoserver/geoserver/blob/master/src/main/src/main/java/org/geoserver/ExtendedCapabilitiesProvider.java>,

but with the extra ability to dispatch a request, something like:

interface WMTSExtension {

/* --------- Pretty much as the geoserver own extended caps providers
here -------- */

String getSchemaLocations(String schemaBaseURL);

void registerNamespaces(NamespaceSupport namespaces);

public abstract void encodeExtendedOperations(
org.geoserver.ExtendedCapabilitiesProvider.Translator tx,
WCSInfo wcs,
GetCapabilitiesType request) throws IOException;

/**

  • Interface for clients to encode XML.
    */
    public interface Translator {

/**

  • Starts an element creating the opening tag.
  • @param element The name of the element.
    */
    void start(String element);

/**

  • Starts an element with attributes, creating the opening tag.
  • @param element The name of the element.
  • @param attributes The attributes of the element.
    */
    void start(String element, Attributes attributes);

/**

  • Creates a text node within an element.
  • @param text The character text.
    */
    void chars(String text);

/**

  • Ends an element creating a closing tag.
  • @param element
    */
    void end(String element);
    }

/** ------------- Dispatching the extra requests here, working like a
GWC Service object -------------------- **/

public Conveyor getConveyor(HttpServletRequest request,
HttpServletResponse response)
throws GeoWebCacheException, OWSException;

public void handleRequest(Conveyor conv) throws OWSException;

}

If there are no objections I’ll turn this into a GWC proposal next week.
Now, the only thing I’m a bit concerned about is Kevin’s availability and
ability to type… Kevin, if you can use any voice
communication we can setup a voice meeting, chat about this, and I’ll
transcribe your feedback for everybody else
to read.

Cheers
Andrea


What NetFlow Analyzer can do for you? Monitors network bandwidth and traffic
patterns at an interface-level. Reveals which users, apps, and protocols are
consuming the most bandwidth. Provides multi-vendor support for NetFlow,
J-Flow, sFlow and other flows. Make informed decisions using capacity
planning reports. https://ad.doubleclick.net/ddm/clk/305295220;132659582;e


Geoserver-devel mailing list
Geoserver-devel@lists.sourceforge.net
https://lists.sourceforge.net/lists/listinfo/geoserver-devel


Ben Caradoc-Davies <ben@anonymised.com>
Director
Transient Software Limited <http://transient.nz/>
New Zealand

==
GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime

@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313

fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

AVVERTENZE AI SENSI DEL D.Lgs. 196/2003

Le informazioni contenute in questo messaggio di posta elettronica e/o nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il loro utilizzo è consentito esclusivamente al destinatario del messaggio, per le finalità indicate nel messaggio stesso. Qualora riceviate questo messaggio senza esserne il destinatario, Vi preghiamo cortesemente di darcene notizia via e-mail e di procedere alla distruzione del messaggio stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso, divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od utilizzarlo per finalità diverse, costituisce comportamento contrario ai principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for the attention and use of the named addressee(s) and may be confidential or proprietary in nature or covered by the provisions of privacy act (Legislative Decree June, 30 2003, no.196 - Italy’s New Data Protection Code).Any use not in accord with its purpose, any disclosure, reproduction, copying, distribution, or either dissemination, either whole or partial, is strictly forbidden except previous formal approval of the named addressee(s). If you are not the intended recipient, please contact immediately the sender by telephone, fax or e-mail and delete the information in this message that has been received in error. The sender does not give any warranty or accept liability as the content, accuracy or completeness of sent messages and accepts no responsibility for changes made after they were sent or for other risks which arise as a result of e-mail transmission, viruses, etc.


Gabriel Roldán
Software Developer | Boundless
groldan@anonymised.com
@boundlessgeo

On Tue, Jun 14, 2016 at 3:30 PM, Gabriel Roldan <groldan@anonymised.com>
wrote:

ok, here's my 2 cents.

Having almost no experience with multidimensional datasets myself I can
barely speak of the approach (in regard to the protocol extension), though
in general it looks totally sensible.

- Ranges: wonder if it'd make sense to have an open/closed
boundes/unbounded range syntax (check Guava's Range javadocs for a possible
syntax as reference [1])

I did consider this, but turned it out as the range syntax already in use
in WMS does not have such an option, and the subsequent
best practice documents do not seem to complain about the lack of it.

- Will an open source client be provided as well? e.g. an OL3 extension?

It's not yet certain if we are going to write a client at all, another
group might be building it.
If we build a demo I don't see a problem in releasing it, but I don't think
it's going to be a OL3 extension (it would be a good idea, I just don't
think we'll have the time to go there).

- Implementation wise, have you considered writing a separate WMTS service
instead of extending the rather dumb GWC one? (especially when it comes to
XML encoding, it still uses ad-hoc string building instead of any actual
XML API).

Yes, I went back and forth a number of times on the idea, but I don't like
the outlook for the future and the amount of code duplication.
For example, we might consider adding WMTS REST support too along with it
(still out on the drawing board), but there is definitely no time to work
it twice.
Long story short, if we work in a fork, nothing of the improvements we
might make is going to come back to core in the short term, and might
eventually be lost.
I prefer instead to work and add extension points allowing to add more
operations also in the future.

Cheers
Andrea

--

GeoServer Professional Services from the experts! Visit
http://goo.gl/it488V for more information.

Ing. Andrea Aime
@geowolf
Technical Lead

GeoSolutions S.A.S.
Via di Montramito 3/A
55054 Massarosa (LU)
phone: +39 0584 962313
fax: +39 0584 1660272
mob: +39 339 8844549

http://www.geo-solutions.it
http://twitter.com/geosolutions_it

*AVVERTENZE AI SENSI DEL D.Lgs. 196/2003*

Le informazioni contenute in questo messaggio di posta elettronica e/o
nel/i file/s allegato/i sono da considerarsi strettamente riservate. Il
loro utilizzo è consentito esclusivamente al destinatario del messaggio,
per le finalità indicate nel messaggio stesso. Qualora riceviate questo
messaggio senza esserne il destinatario, Vi preghiamo cortesemente di
darcene notizia via e-mail e di procedere alla distruzione del messaggio
stesso, cancellandolo dal Vostro sistema. Conservare il messaggio stesso,
divulgarlo anche in parte, distribuirlo ad altri soggetti, copiarlo, od
utilizzarlo per finalità diverse, costituisce comportamento contrario ai
principi dettati dal D.Lgs. 196/2003.

The information in this message and/or attachments, is intended solely for
the attention and use of the named addressee(s) and may be confidential or
proprietary in nature or covered by the provisions of privacy act
(Legislative Decree June, 30 2003, no.196 - Italy's New Data Protection
Code).Any use not in accord with its purpose, any disclosure, reproduction,
copying, distribution, or either dissemination, either whole or partial, is
strictly forbidden except previous formal approval of the named
addressee(s). If you are not the intended recipient, please contact
immediately the sender by telephone, fax or e-mail and delete the
information in this message that has been received in error. The sender
does not give any warranty or accept liability as the content, accuracy or
completeness of sent messages and accepts no responsibility for changes
made after they were sent or for other risks which arise as a result of
e-mail transmission, viruses, etc.

-------------------------------------------------------