Differences

This shows you the differences between two versions of the page.

Link to this comparison view

Both sides previous revision Previous revision
Next revision
Previous revision
en:help:v2:maps:on-demand-create [2016/09/08 19:00]
alpinequest
en:help:v2:maps:on-demand-create [2019/11/04 16:57] (current)
alpinequest
Line 1: Line 1:
 <​sub>​[[en:​help|Online Help]] > [[en:​help:​v2|AlpineQuest 2.x]] > [[en:​help:​v2:​maps|Maps & Layers]]</​sub>​ <​sub>​[[en:​help|Online Help]] > [[en:​help:​v2|AlpineQuest 2.x]] > [[en:​help:​v2:​maps|Maps & Layers]]</​sub>​
  
-====== How to create custom ​maps? ======+====== How to create ​custom ​map? ====== 
 +\\ 
 +The application uses an XML based format for its maps configuration. Files must have an ''"​**.aqx**"''​ extension and be placed in the ''"​**[application folder]/​datastore/​custom-maps/​**"''​ folder (you may need to create the ''"​**custom-maps**"''​ sub-folder if it doesn'​t exist).
  
-The application uses an XML based format for its maps configuration. Files must have an ''​**.AQX**''​ extention and be placed in the "''​**[application folder]/​cache/​custom-maps/​**''"​ folder. ​See [[en:​help:​v2:​settings:​storage|how to locate the application folder here]].+See [[en:​help:​v2:​settings:​storage#​how_to_locate_the_application_folder|how to locate the application folder here]].
  
 \\ \\
Line 13: Line 15:
 <file xml TEST1.AQX>​ <file xml TEST1.AQX>​
 <?xml version="​1.0"​ encoding="​utf-8"​ ?> <?xml version="​1.0"​ encoding="​utf-8"​ ?>
-<aqx version="​7">+<aqx version="​9">
  
   <​name>​Simple Test AQX</​name>​   <​name>​Simple Test AQX</​name>​
Line 21: Line 23:
     <​name>​Standard Mapnik</​name>​     <​name>​Standard Mapnik</​name>​
     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
-      <​server><​![CDATA[http://​a.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​+      <​server><​![CDATA[https://​a.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​
     </​zoom-levels>​     </​zoom-levels>​
   </​source>​   </​source>​
Line 33: Line 35:
 Note that the application will recognize the ''​**{$x}**'',​ ''​**{$y}**''​ and ''​**{$z}**''​ variable and replace them with correct values. Note that the application will recognize the ''​**{$x}**'',​ ''​**{$y}**''​ and ''​**{$z}**''​ variable and replace them with correct values.
  
-The source ''​**id**''​ field must be unique in the file, and contains only characters and numbers. It is used internally by the application to identify the data storage of the map.+The source ''​"**id**"''​ field must be unique in the file, and contains only characters and numbers. It is used internally by the application to identify the data storage of the map.
  
 \\ \\
Line 43: Line 45:
 <file xml TEST2.AQX>​ <file xml TEST2.AQX>​
 <?xml version="​1.0"​ encoding="​utf-8"​ ?> <?xml version="​1.0"​ encoding="​utf-8"​ ?>
-<aqx version="​7">+<aqx version="​9">
  
   <​name>​Simple Test AQX</​name>​   <​name>​Simple Test AQX</​name>​
   <​description>​© OpenStreetMap</​description>​   <​description>​© OpenStreetMap</​description>​
  
-  <source id="​MAP01">​+  <source id="​MAP01" type="​topo">
   ​   ​
     <​name>​Standard Mapnik</​name>​     <​name>​Standard Mapnik</​name>​
Line 60: Line 62:
       <​max-threads>​2</​max-threads>​       <​max-threads>​2</​max-threads>​
       <​user-agent>​MyApp</​user-agent>​       <​user-agent>​MyApp</​user-agent>​
-      <​referer><​![CDATA[http://​www.openstreetmap.org/​]]></​referer>​+      ​<​key-url><​![CDATA[https://​www.openstreetmap.org/​key]]></​key-url>​ 
 +      ​<​referer><​![CDATA[https://​www.openstreetmap.org/​]]></​referer>​
       ​       ​
-      <​server><​![CDATA[http://​a.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​ +      <​server><​![CDATA[https://​a.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​ 
-      <​server><​![CDATA[http://​b.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​ +      <​server><​![CDATA[https://​b.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​ 
-      <​server><​![CDATA[http://​c.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​+      <​server><​![CDATA[https://​c.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​
       ​       ​
     </​zoom-levels>​     </​zoom-levels>​
Line 78: Line 81:
 {{ :​en:​help:​v2:​maps:​on-demand-create-preview-2.jpg?​nolink }} {{ :​en:​help:​v2:​maps:​on-demand-create-preview-2.jpg?​nolink }}
  
-The ''​**<​update-delay>​**''​ tag indicates after how many time the stored map data should be updated if it's used again. The default is ''​**None**'',​ meaning the application will never try to update the stored data. Must end with ''​**D**''​ (number of days), ''​**W**''​ (weeks), ''​**M**''​ (months) or ''​**Y**''​ (years). ''​**3M**''​ means ''​**3 months**''​. Use ''​**0D**''​ to force the application to update the data on each display.+The ''​**<​update-delay>​**''​ tag indicates after how many time the stored map data should be updated if it's used again. The default is ''​**None**'',​ meaning the application will never try to update the stored data. Must end with ''​**D**''​ (number of days), ''​**W**''​ (weeks), ''​**M**''​ (months) or ''​**Y**''​ (years). ​For example, ​''​**3M**''​ means 3 months. Use ''​**0D**''​ to force the application to update the data on each display
 + 
 +The optional ''"​**type**"''​ attribute allows to define the type of the map. If no preview is available, the application will use common preview based on the map type. Can be one of ''"​**roads**"'',​ ''"​**topo**"'',​ ''"​**satellite**"'',​ ''"​**hybrid**"'',​ ''"​**nautical**"'',​ ''"​**aeronautical**"'',​ ''"​**historical**"'',​ ''"​**hillshade**"'',​ ''"​**contours**"''​. 
 + 
 +==== Map layer ==== 
 +\\ 
 +The difference between regular maps and map layers is that a map layer is added over the current map when being selected. This is usually used for maps having a transparent background. Here is how to define a map layer: 
 + 
 +<code xml> 
 +  <source id="​LAYER01"​ layer="​true"​ opacity="​50">​ 
 +    <​name>​Map Layer Example</​name>​ 
 +    <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​ 
 +      <​server><​![CDATA[https://​a.tile.openstreetmap.org/​{$z}/​{$x}/​{$y}.png]]></​server>​ 
 +    </​zoom-levels>​ 
 +  </​source>​ 
 +</​code>​ 
 + 
 +The optional ''"​**opacity**"''​ attribute allows to define an initial opacity, given in percent.
  
 \\ \\
Line 90: Line 110:
     <​name>​Quadtree Map Example</​name>​     <​name>​Quadtree Map Example</​name>​
     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
-      <​server><​![CDATA[http://​map.example.com/​tiles/​{$q}]]></​server>​+      <​server><​![CDATA[https://​map.example.com/​tiles/​{$q}]]></​server>​
     </​zoom-levels>​     </​zoom-levels>​
   </​source>​   </​source>​
Line 106: Line 126:
     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
       <​expression set="​my_variable"​ type="​int">​iif( z>10, x*y, x+y )</​expression>​       <​expression set="​my_variable"​ type="​int">​iif( z>10, x*y, x+y )</​expression>​
-      <​server><​![CDATA[http://​map.example.com/​tiles/​{$my_variable}.png]]></​server>​+      <​server><​![CDATA[https://​map.example.com/​tiles/​{$my_variable}.png]]></​server>​
     </​zoom-levels>​     </​zoom-levels>​
   </​source>​   </​source>​
 </​code>​ </​code>​
  
-The "''​**set**''​" ​attribute defines the name of the custom variable, the "''​**type**''​" ​attribute tells how to display the variable (either ''​**int**'',​ ''​**long**'',​ ''​**float**''​ or ''​**double**''​).+The ''​"**set**"''​ attribute defines the name of the custom variable, the ''​"**type**"''​ attribute tells how to display the variable (either ''​"**int**"'',​ ''​"**long**"'',​ ''​"**float**"''​ or ''​"**double**"''​)
 + 
 +Most common functions and operators can be used, for example ''"​**abs(x)**"'',​ ''"​**sqrt(x)**"'',​ ''"​**hypot(x,​y)**"'',​ ''"​**cos(x)**"'',​ ''"​**charat(str,​index)**"'',​ ''"​**replace(str,​target,​replace)**"'',​ ''"​**deg_to_rad(x)**"'',​ ''"​**dist_eucl(x1,​y1,​x2,​y2)**"'',​ ''"​**md5(str)**"'',​ ''"​**rand_uni()**"'',​ ''"​**quadtree(x,​y,​z)**"'',​ etc.
  
 \\ \\
  
-==== WMS servers ====+===== WMS servers ​=====
 \\ \\
 To access WMS servers, just use the ''​**{$bbox}**''​ variable. You can specify the coordinate system of the bounding box using the ''​**<​bbox-crs-code>​**''​ tag. To access WMS servers, just use the ''​**{$bbox}**''​ variable. You can specify the coordinate system of the bounding box using the ''​**<​bbox-crs-code>​**''​ tag.
Line 124: Line 146:
     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​     <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
       <​bbox-crs-code>​EPSG:​4326</​bbox-crs-code>​       <​bbox-crs-code>​EPSG:​4326</​bbox-crs-code>​
-      <​server><​![CDATA[http://​server.example.com/​wms/​Service?​REQUEST=GetMap&​VERSION=1.1.1&​LAYERS=layer&​FORMAT=image/​png&​BBOX={$bbox}&​SRS=EPSG:​4326&​WIDTH=256&​HEIGHT=256]]></​server>​+      <​server><​![CDATA[https://​server.example.com/​wms/​Service?​REQUEST=GetMap&​VERSION=1.1.1&​LAYERS=layer&​FORMAT=image/​png&​BBOX={$bbox}&​SRS=EPSG:​4326&​WIDTH=256&​HEIGHT=256]]></​server>​
     </​zoom-levels>​     </​zoom-levels>​
   </​source>​   </​source>​
 +</​code>​
 +
 +\\
 +
 +===== WMTS server =====
 +\\
 +To access WMTS servers, you need to manually configure each levels:
 +
 +<code xml>
 +
 +<?xml version="​1.0"​ encoding="​utf-8"​ ?>
 +<aqx version="​9">​
 +
 +  <​import-ogc-wkt-def code="​EPSG:​4218">​GEOGCS["​Bogota 1975",​DATUM["​Bogota_1975",​SPHEROID["​International 1924",​6378388,​297,​AUTHORITY["​EPSG","​7022"​]],​TOWGS84[307,​304,​-318,​0,​0,​0,​0],​AUTHORITY["​EPSG","​6218"​]],​PRIMEM["​Greenwich",​0,​AUTHORITY["​EPSG","​8901"​]],​UNIT["​degree",​0.01745329251994328,​AUTHORITY["​EPSG","​9122"​]],​AUTHORITY["​EPSG","​4218"​]]</​import-ogc-wkt-def>​
 +
 +  <source id="​MAP05">​
 +    <​name>​WMTS Map Example</​name>​
 +    ​
 +    <​zoom-levels z="​8">​
 +      <​projection-code>​EPSG:​4218</​projection-code>​
 +      <​projection-resolution>​2.645833333</​projection-resolution>​
 +      <​projection-offset-x>​-450000.0</​projection-offset-x><​!-- optional, default is 0 -->
 +      <​projection-offset-y>​-800000.0</​projection-offset-y><​!-- optional, default is 0 -->
 +      <​tiles-size>​256</​tiles-size><​!-- optional, default is 256 -->
 +      <​tiles-bounds>​104,​80,​527,​423</​tiles-bounds><​!-- optional, expressed as "min x,min y,max x,max y" -->
 +      <​referer>​https://​server.example.com/​wmts/</​referer><​!-- optional, default is empty -->
 +      <​server>​https://​server.example.com/​wmts/​{$z}/​{$y}/​{$x}.png</​server>​
 +    </​zoom-levels>​
 +    ​
 +     <​zoom-levels z="​9">​
 +      <​projection-code>​EPSG:​4218</​projection-code>​
 +      <​projection-resolution>​1.322916667</​projection-resolution>​
 +      <​projection-offset-x>​-450000.0</​projection-offset-x><​!-- optional, default is 0 -->
 +      <​projection-offset-y>​-800000.0</​projection-offset-y><​!-- optional, default is 0 -->
 +      <​tiles-size>​256</​tiles-size><​!-- optional, default is 256 -->
 +      <​tiles-bounds>​208,​160,​1047,​839</​tiles-bounds><​!-- optional -->
 +      <​referer>​https://​server.example.com/​wmts/</​referer><​!-- optional, default is empty -->
 +      <​server>​https://​server.example.com/​wmts/​{$z}/​{$y}/​{$x}.png</​server>​
 +    </​zoom-levels>​
 +    ​
 +  </​source>​
 +  ​
 +</​aqx>​
 +</​code>​
 +
 +To get the ''​**<​projection-resolution>​**''​ from a ''​**ScaleDenominator**'',​ just multiply this value by ''​**0.00028**''​ (which is the "​standardized rendering pixel size", in meter).
 +
 +If you want to use a projection which is not natively supported by the application,​ you need to import its definition using the ''​**<​import-ogc-wkt-def>​**''​ tag. You can find the OGC WKT definition of almost all projections here: [[http://​www.spatialreference.org/​]].
 +
 +\\
 +
 +===== Advanced features =====
 +
 +==== Make a color or a color range transparent ====
 +\\
 +You can make a color become transparent (erase the color) of any map. Just specify the RGB values of the color:
 +
 +<code xml>
 +   ...
 +    <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
 +      <​clear-color r="​255"​ g="​255"​ b="​255"​ />
 +      ...
 +    </​zoom-levels>​
 +   ...
 +</​code>​
 +
 +This example will make all white areas transparent.
 +
 +You can also clear a color range:
 +
 +<code xml>
 +   ...
 +    <​zoom-levels z="​3,​5,​7,​8,​9,​10,​11,​12,​13,​14,​15,​16,​17">​
 +      <​clear-color r="​240-255"​ g="​240-255"​ b="​240-255"​ />
 +      ...
 +    </​zoom-levels>​
 +   ...
 </​code>​ </​code>​

Choose language:

Online help