Changes between Initial Version and Version 1 of MapGuideRfc173


Ignore:
Timestamp:
06/11/19 07:47:42 (6 years ago)
Author:
jng
Comment:

--

Legend:

Unmodified
Added
Removed
Modified
  • MapGuideRfc173

    v1 v1  
     1
     2= !MapGuide RFC 173 - Tile Service Enhancements (Round 3) =
     3
     4This page contains a change request (RFC) for the !MapGuide Open Source project.
     5More !MapGuide RFCs can be found on the [wiki:MapGuideRfcs RFCs] page.
     6
     7== Status ==
     8
     9||RFC Template Version||(1.0)||
     10||Submission Date||12 Jun 2019||
     11||Last Modified||||
     12||Author||Jackie Ng||
     13||RFC Status||draft||
     14||Implementation Status||pending||
     15||Proposed Milestone||4.0||
     16||Assigned PSC guide(s)||(when determined)||
     17||'''Voting History'''||(vote date)||
     18||+1||||
     19||+0||||
     20||-0||||
     21||-1||||
     22||no vote|| ||
     23
     24== Overview ==
     25
     26This RFC proposes to build on top of the Tile Service Enhancements introduced in MapGuide Open Source 3.0 with RFC 140 and improved upon in this dev cycle with RFC 170
     27
     28== Motivation ==
     29
     30RFC 140 introduced the concept of a tile set as a resource (TileSetDefinition) and support for XYZ tile sets.
     31
     32RFC 170 incoprorated meta-tiling support (RFC90) by retrofitting the implementation on top of the Tile Set Definition infrastructure.
     33
     34At this point, there are still several feature gaps and loose ends that this RFC will address.
     35
     36== Proposed Solution ==
     37
     38This RFC will enhance our tile services with the following:
     39
     40=== "Retina"/HiDPI tile support for XYZ tiles ===
     41
     42A new {{{RetinaScale}}} tile set property is now available for {{{XYZ}}} tile sets which will render XYZ tiles at (256 * RetinaScale) x (256 * RetinaScale) pixels.
     43
     44A supporting viewer can consume such tiles as regular XYZ tiles but with an appropriate scaling property (OpenLayers for example, [can consume retina tiles](https://openlayers.org/en/latest/examples/xyz-retina.html) via a {{{tilePixelRatio}}} property)
     45
     46=== Removing tile set restriction from CREATERUNTIMEMAP ===
     47
     48Until now, {{{CREATERUNTIMEMAP}}} (and its underlying `MgMap.Create()`) throws an exception when passing a XYZ tile set resource id or passing a resource id of a Map Definition that links to a XYZ tile set.
     49
     50For this RFC, we will remove this restriction.
     51
     52The reason for the removal is that when a client viewer wants to consume a {{{CREATERUNTIMEMAP}}} response, if it links to an XYZ tile set then the "finite scale list" is already well-defined and does not require server-side computation.
     53
     54=== New MgMap APIs ===
     55
     56New methods have been added to MgMap to describe this new information:
     57{{{
     58class MG_MAPGUIDE_API MgMap : public MgMapBase
     59{
     60PUBLISHED_API:
     61    ...
     62
     63    //////////////////////////////////////////////////////////////////
     64    /// \brief
     65    /// Returns the provider name of the referenced tile set definition
     66    ///
     67    /// <!-- Syntax in .Net, Java, and PHP -->
     68    /// \htmlinclude DotNetSyntaxTop.html
     69    /// string GetTileSetProvider();
     70    /// \htmlinclude SyntaxBottom.html
     71    /// \htmlinclude JavaSyntaxTop.html
     72    /// String GetTileSetProvider();
     73    /// \htmlinclude SyntaxBottom.html
     74    /// \htmlinclude PHPSyntaxTop.html
     75    /// string GetTileSetProvider();
     76    /// \htmlinclude SyntaxBottom.html
     77    ///
     78    /// \since 4.0
     79    ///
     80    /// \return
     81    /// Returns the tile set provider name. Or an empty string if this map does not reference a tile set
     82    STRING GetTileSetProvider();
     83
     84    //////////////////////////////////////////////////////////////////
     85    /// \brief
     86    /// Returns the tile pixel ratio for retina tiles. This is only
     87    /// applicable for XYZ tiles.
     88    ///
     89    /// <!-- Syntax in .Net, Java, and PHP -->
     90    /// \htmlinclude DotNetSyntaxTop.html
     91    /// int GetTilePixelRatio();
     92    /// \htmlinclude SyntaxBottom.html
     93    /// \htmlinclude JavaSyntaxTop.html
     94    /// int GetTilePixelRatio();
     95    /// \htmlinclude SyntaxBottom.html
     96    /// \htmlinclude PHPSyntaxTop.html
     97    /// int GetTilePixelRatio();
     98    /// \htmlinclude SyntaxBottom.html
     99    ///
     100    /// \since 4.0
     101    ///
     102    /// \return
     103    /// Returns the tile pixel ratio for retina tiles
     104    INT32 GetTilePixelRatio();
     105
     106    //////////////////////////////////////////////////////////////////
     107    /// \brief
     108    /// Returns the tile content format for the tile set definition
     109    ///
     110    /// <!-- Syntax in .Net, Java, and PHP -->
     111    /// \htmlinclude DotNetSyntaxTop.html
     112    /// string GetTileFormat();
     113    /// \htmlinclude SyntaxBottom.html
     114    /// \htmlinclude JavaSyntaxTop.html
     115    /// String GetTileFormat();
     116    /// \htmlinclude SyntaxBottom.html
     117    /// \htmlinclude PHPSyntaxTop.html
     118    /// string GetTileFormat();
     119    /// \htmlinclude SyntaxBottom.html
     120    ///
     121    /// \since 4.0
     122    ///
     123    /// \return
     124    /// Returns the tile content format
     125    STRING GetTileFormat();
     126
     127    ...
     128};
     129}}}
     130
     131=== New RuntimeMap XML schema ===
     132
     133A new {{{RuntimeMap-4.0.0.xsd}}} schema will be introduced that models the changes introduced in this RFC.
     134
     135What's changed from the {{{3.0.0}}} schema:
     136
     137 * {{{MapDefinition}}} is now optional
     138   * When {{{CREATERUNTIMEMAP}}} is created from a tile set, this element will not be specified
     139 * A new {{{TileFormat}}} element that defines the tile content format of the linked tile set. This is a convenience property to avoid the consuming application from having to fetch the tile set resource separately to get this information.
     140 * A new {{{TilePixelRatio}}} element that defines the retina scale (defaults to 1 if not specified in the tile set). This is a convenience property to avoid the consuming application from having to fetch the tile set resource separately to get this information.
     141
     142A copy of this schema is attached below
     143
     144== Implications ==
     145
     146A Tile Set Definition using the {{{XYZ}}} provider and a {{{RetinaScale}}} can only be used on versions of MapGuide on/since the introduction of this RFC.
     147
     148Although we have lifted the XYZ tile set restriction at the API level, we will still throw an exception from the AJAX viewer when loading a map from a XYZ tile set resource or from a map definition that links to a XYZ tile set as the AJAX viewer is not set up to consume XYZ tiles.
     149
     150== Test Plan ==
     151
     152Add new {{{CREATERUNTIMEMAP}}} test cases to exercise creating runtime maps against XYZ tile sets and Map Definitions that link to XYZ tile sets and verify the new information is included in the response.
     153
     154== Funding / Resources ==
     155
     156Community