/****************************************************************************
**
** Copyright (C) 2013-2016 Esri <contracts@esri.com>
** Contact: https://www.qt.io/licensing/
**
** This file is part of the QtLocation module of the Qt Toolkit.
**
** $QT_BEGIN_LICENSE:LGPL$
** Commercial License Usage
** Licensees holding valid commercial Qt licenses may use this file in
** accordance with the commercial license agreement provided with the
** Software or, alternatively, in accordance with the terms contained in
** a written agreement between you and The Qt Company. For licensing terms
** and conditions see https://www.qt.io/terms-conditions. For further
** information use the contact form at https://www.qt.io/contact-us.
**
** GNU Lesser General Public License Usage
** Alternatively, this file may be used under the terms of the GNU Lesser
** General Public License version 3 as published by the Free Software
** Foundation and appearing in the file LICENSE.LGPL3 included in the
** packaging of this file. Please review the following information to
** ensure the GNU Lesser General Public License version 3 requirements
** will be met: https://www.gnu.org/licenses/lgpl-3.0.html.
**
** GNU General Public License Usage
** Alternatively, this file may be used under the terms of the GNU
** General Public License version 2.0 or (at your option) the GNU General
** Public license version 3 or any later version approved by the KDE Free
** Qt Foundation. The licenses are as published by the Free Software
** Foundation and appearing in the file LICENSE.GPL2 and LICENSE.GPL3
** included in the packaging of this file. Please review the following
** information to ensure the GNU General Public License requirements will
** be met: https://www.gnu.org/licenses/gpl-2.0.html and
** https://www.gnu.org/licenses/gpl-3.0.html.
**
** $QT_END_LICENSE$
**
****************************************************************************/

/*!
\page location-plugin-esri.html
\title Qt Location Esri Plugin
\ingroup QtLocation-plugins

\brief Uses Esri for location services.

\section1 Overview

This geo services plugin allows applications to access
\l {http://www.esri.com}{Esri} location based services using the Qt Location API.
The use of these services is governed by the \l {http://www.esri.com/legal/terms-use}{Esri terms of use}.

Data is provided by \l {http://www.esri.com/data/find-data}{many different content providers}.

The Esri geoservices plugin can be loaded by using the plugin key "esri".

To use the services provided by the Esri platform, a subscription is required. There are two kinds of subscriptions:

\list
    \li \l {https://developers.arcgis.com/plans/}{Developer Subscription}
    \li \l {http://www.arcgis.com/features/plans/pricing.html}{ArcGIS Online Subscription}
\endlist

The Developer subscription offers a free-of-charge option for developing and testing your applications.
With this, your applications can go to production under the following conditions:

\list
    \li The app can request up to one million maps per month, and one million geocodes per month.
    \li The app does not directly generate revenue. That is, end users must be able to obtain it and to use it for free.
\endlist

If the above conditions cannot be met, the ArcGIS Online subscription is the correct choice, as it
gives applications full access to the ArcGIS platform.

\section1 Parameters

\section2 Mandatory parameters

\table
\header
    \li Parameter
    \li Description
\row
    \li esri.token
    \li Security token for using routing services only. Mapping and geocoding services do not require a token.
\endtable

To use the routing services hosted on ArcGIS Online with the Esri plugin, a token is required.
You can \l{https://developers.arcgis.com/authentication/accessing-arcgis-online-services/#registering-your-application}{obtain a token for testing purposes},
or you can sign up for an \l {http://www.arcgis.com/features/plans/pricing.html}{ArcGIS Online subscription}.

\section2 Optional parameters

\table
\header
    \li Parameter
    \li Description
\row
    \li esri.useragent
    \li User agent string sent when making network requests
\row
    \li esri.mapping.minimumZoomLevel
    \li The minimum zoom level [double] at which the map is displayed
\row
    \li esri.mapping.maximumZoomLevel
    \li The maximum level [double] at which the map is displayed
\row
    \li esri.mapping.cache.directory
    \li Absolute path to map tile cache directory used as network disk cache.

    The default place for the cache is the \c{QtLocation/esri} subdirectory in the location returned by
    QStandardPaths::writableLocation(), called with QStandardPaths::GenericCacheLocation  as a parameter.
    On systems that have no concept of a shared cache, the application-specific \l{QStandardPaths::CacheLocation} is used instead.
\row
    \li esri.mapping.cache.disk.cost_strategy
    \li The cost strategy to use to cache map tiles on disk.
    Valid values are \b bytesize and \b unitary.
    Using \b bytesize, the related size parameter (\b esri.mapping.cache.disk.size) will
    be interpreted as bytes.
    Using \b unitary, they will be interpreted as number of tiles.
    The default value for this parameter is \b bytesize.
\row
    \li esri.mapping.cache.disk.size
    \li Disk cache size for map tiles. The default size of the cache is 50 MiB when \b bytesize is the cost
    strategy for this cache, or 1000 tiles, when \b unitary is the cost strategy.
\row
    \li esri.mapping.cache.memory.cost_strategy
    \li The cost strategy to use to cache map tiles in memory.
    Valid values are \b bytesize and \b unitary.
    Using \b bytesize, the related size parameter (\b esri.mapping.cache.memory.size) will
    be interpreted as bytes.
    Using \b unitary, they will be interpreted as number of tiles.
    The default value for this parameter is \b bytesize.
\row
    \li esri.mapping.cache.memory.size
    \li Memory cache size for map tiles. The default size of the cache is 3 MiB when \b bytesize is the cost
    strategy for this cache, or 100 tiles, when \b unitary is the cost strategy.
\row
    \li esri.mapping.cache.texture.cost_strategy
    \li The cost strategy to use to cache decompressed map tiles in memory.
    Valid values are \b bytesize and \b unitary.
    Using \b bytesize, the related size parameter (\b esri.mapping.cache.texture.size) will
    be interpreted as bytes.
    Using \b unitary, they will be interpreted as number of tiles.
    The default value for this parameter is \b bytesize.
\row
    \li esri.mapping.cache.texture.size
    \li Texture cache size for map tiles. The default size of the cache is 6 MiB when \b bytesize is the cost
    strategy for this cache, or 30 tiles, when \b unitary is the cost strategy.
    Note that the texture cache has a hard minimum size which depends on the size of the map viewport
    (it must contain enough data to display the tiles currently visible on the display).
    This value is the amount of cache to be used in addition to the bare minimum.
\row
    \li esri.mapping.prefetching_style
    \li This parameter allows to provide a hint how tile prefetching is to be performed by the engine. The default value,
    \tt{TwoNeighbourLayers}, makes the engine prefetch tiles for the layer above and the one below the current tile
    layer, providing ready tiles when zooming in or out from the current zoom level.
    \tt{OneNeighbourLayer} only prefetches the one layer closest to the current zoom level.
    Finally, \tt{NoPrefetching} allows to disable the prefetching, so only tiles that are visible will be fetched.
    Note that, depending on the active map type, this hint might be ignored.
\endtable

\section2 Directions language

The service supports generating directions in the following languages:

\table
\header
    \li Language
    \li Description
\row
    \li ar
    \li Generate directions in Arabic
\row
    \li cs
    \li Generate directions in Czech
\row
    \li de
    \li Generate directions in German
\row
    \li el
    \li Generate directions in Greek
\row
    \li en
    \li (default) Generate directions in English
\row
    \li es
    \li Generate directions in Spanish
\row
    \li et
    \li Generate directions in Estonian
\row
    \li fr
    \li Generate directions in French
\row
    \li he
    \li Generate directions in Hebrew
\row
    \li it
    \li Generate directions in Italian
\row
    \li ja
    \li Generate directions in Japanese
\row
    \li ko
    \li Generate directions in Korean
\row
    \li lt
    \li Generate directions in Lithuanian
\row
    \li lv
    \li Generate directions in Latvian
\row
    \li nl
    \li Generate directions in Dutch
\row
    \li pl
    \li Generate directions in Polish
\row
    \li pt-BR
    \li Generate directions in Brazilian Portuguese
\row
    \li pt-PT
    \li Generate directions in Portuguese (Portugal)
\row
    \li ru
    \li Generate directions in Russian
\row
    \li sv
    \li Generate directions in Swedish
\row
    \li tr
    \li Generate directions in Turkish
\row
    \li zh-CN
    \li Simplified Chinese
\endtable

If only unsupported language codes are specified via the \l{http://doc.qt.io/qt-5/qml-qtlocation-plugin.html#locales-prop}
{locales} property, the service returns the directions using the default language, English.

\section2 Directions length units

QLocale::MetricSystem (default) use meters, other values (QLocale::ImperialUSSystem, QLocale::ImperialUSSystem) use feet.

*/
