Méthode ILocationReport ::GetValue (locationapi.h)

[L’API d’emplacement Win32 est disponible pour une utilisation dans les systèmes d’exploitation spécifiés dans la section Configuration requise. Il sera peut-être modifié ou indisponible dans les versions ultérieures. Utilisez plutôt l’API Windows.Devices.Geolocation . ]

Récupère une valeur de propriété à partir du rapport d’emplacement.

Syntaxe

HRESULT GetValue(
  [in]  REFPROPERTYKEY pKey,
  [out] PROPVARIANT    *pValue
);

Paramètres

[in] pKey

REFPROPERTYKEY qui spécifie le nom de la propriété à récupérer.

[out] pValue

Adresse d’un PROPVARIANT qui reçoit la valeur de propriété.

Valeur retournée

Si cette méthode réussit, elle retourne S_OK. Sinon, elle retourne un code d’erreur HRESULT.

Remarques

Les propriétés peuvent être définies par la plateforme ou par le fabricant.

Les valeurs PROPERTYKEY définies par la plateforme pour les capteurs d’emplacement sont définies dans la section Types de données des capteurs d’emplacement de sensors.h.

Voici un tableau de certaines propriétés définies par la plateforme qui sont généralement associées à des rapports d’emplacement. Ces clés de propriété ont un champ fmtid égal à SENSOR_DATA_TYPE_LOCATION_GUID. Vous trouverez des propriétés supplémentaires dans sensors.h. Si vous implémentez votre propre rapport d’emplacement à transmettre à SetReport, cette table indique les valeurs à fournir dans l’implémentation de GetValue de votre objet de rapport.

Nom et type de clé de propriété Description
SENSOR_DATA_TYPE_LATITUDE VT_R8 Degrés de latitude où Le Nord est positif.
Note Un objet de rapport de latitude/longitude passé à SetReport doit fournir cette valeur dans son implémentation de GetValue.
 
VT_R8 SENSOR_DATA_TYPE_LONGITUDE Degrés de longitude où Est est positif.
Note Un objet de rapport de latitude/longitude passé à SetReport doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS VT_R8 Altitude par rapport au niveau de la mer, en mètres.
SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_METERS VT_R8 Altitude par rapport à l’ellipsoïde de référence, en mètres.
SENSOR_DATA_TYPE_SPEED_KNOTS VT_R8 Vitesse mesurée en nœuds.
VT_R8 SENSOR_DATA_TYPE_TRUE_HEADING_DEGREES Titre par rapport au vrai nord en degrés.
SENSOR_DATA_TYPE_MAGNETIC_HEADING_DEGREES VT_R8 Cap par rapport au nord magnétique en degrés.
VT_R8 SENSOR_DATA_TYPE_MAGNETIC_VARIATION Variation magnétique. L’Est est positif.
SENSOR_DATA_TYPE_ERROR_RADIUS_METERS VT_R8 Rayon d’erreur qui indique la précision de la latitude et de la longitude en mètres.
Note Un objet de rapport de latitude/longitude passé à SetReport doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_ADDRESS1 VT_LPWSTR Première ligne de l’adresse dans un rapport d’adresse civique.
Note Si un objet de rapport d’adresse civique passé à SetReport contient ces données, il doit fournir cette valeur dans son implémentation de GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_ADDRESS2 Deuxième ligne de l’adresse dans un rapport d’adresse civique.
Note Si un objet de rapport d’adresse civique passé à SetReport contient ces données, il doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_CITY VT_LPWSTR Champ Ville dans un rapport d’adresse municipale.
Note Si un objet de rapport d’adresse civique passé à SetReport contient ces données, il doit fournir cette valeur dans son implémentation de GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_STATE_PROVINCE Champ État/province dans un rapport d’adresse civique.
Note Si un objet de rapport d’adresse civique passé à SetReport contient ces données, il doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_POSTALCODE VT_LPWSTR Champ code postal dans un rapport d’adresse civique.
Note Si un objet de rapport d’adresse civique passé à SetReport contient ces données, il doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_COUNTRY_REGION VT_LPWSTR Code de pays/région dans un rapport d’adresse civique. La valeur doit être un code pays ISO 3166 à deux ou trois lettres.
Note Un objet de rapport d’adresse civique passé à SetReport doit fournir cette valeur dans son implémentation de GetValue.
 
SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_ERROR_METERS VT_R8 Erreur d’altitude par rapport à l’ellipsoïde de référence, en mètres.
SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_ERROR_METERS VT_R8 Erreur d’altitude par rapport au niveau de la mer, en mètres.
 

Voici un tableau d’autres propriétés définies par la plateforme qui peuvent se produire dans des rapports d’emplacement, mais qui ne sont pas spécifiques à l’emplacement. Le champ fmtid de ces clés de propriété est SENSOR_PROPERTY_COMMON_GUID.

Nom et type de clé de propriété Description
VT_UNKNOWN SENSOR_PROPERTY_ACCURACY Objet IPortableDeviceValues qui contient les noms de types de données du capteur et les précisions associées. Les valeurs de précision représentent une variation possible des valeurs vraies.

Les valeurs de précision sont exprimées à l’aide des mêmes unités que le champ de données, sauf indication contraire.

VT_UNKNOWN SENSOR_PROPERTY_CHANGE_SENSITIVITY Objet IPortableDeviceValues qui contient des noms de types de données de capteur et les valeurs de sensibilité de modification associées. Les valeurs de sensibilité aux modifications représentent la quantité à laquelle le champ de données doit changer avant que l’événement SENSOR_EVENT_DATA_UPDATED ne soit déclenché.

Les valeurs de sensibilité sont exprimées en utilisant les mêmes unités que le champ de données, sauf indication contraire.

Par exemple, une valeur de sensibilité au changement de 2 pour SENSOR_DATA_TYPE_TEMPERATURE_CELSIUS représenterait une sensibilité de plus ou moins 2 degrés Celsius.

VT_UI4 SENSOR_PROPERTY_CURRENT_CONNECTION_TYPE Valeur SensorConnectionType qui contient le type de connexion actuel.
SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL VT_UI4 Temps écoulé actuel pour la génération du rapport de données de capteur, en millisecondes.

La définition d’une valeur zéro indique au pilote d’utiliser son intervalle de rapport par défaut. Après avoir reçu la valeur zéro pour cette propriété, un pilote doit retourner son intervalle de rapport par défaut, et non zéro, lorsqu’il est interrogé.

Les applications peuvent définir cette valeur pour demander un intervalle de rapport particulier, mais plusieurs applications peuvent utiliser le même pilote. Par conséquent, les pilotes déterminent l’intervalle de rapport réel basé sur la logique interne. Par exemple, le pilote peut toujours utiliser l’intervalle de rapport le plus court demandé par l’appelant.

SENSOR_PROPERTY_DESCRIPTION VT_LPWSTR Chaîne de description du capteur.
SENSOR_PROPERTY_DEVICE_PATH VT_LPWSTR Identifie de manière unique l’appareil instance auquel le capteur est associé. Vous pouvez utiliser cette propriété pour déterminer si un appareil contient plusieurs capteurs.

Les pilotes de périphérique n’ont pas besoin de prendre en charge cette propriété, car la plateforme fournit cette valeur aux applications sans interroger les pilotes.

SENSOR_PROPERTY_FRIENDLY_NAME VT_LPWSTR Nom convivial de l’appareil.
SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY VT_UI4 Valeur énumérée qui indique le type de gestion de la précision demandée par une application cliente. LOCATION_DESIRED_ACCURACY_DEFAULT (0) indique que le capteur doit utiliser la précision pour laquelle il peut optimiser la consommation d’énergie et d’autres considérations de coût.

LOCATION_DESIRED_ACCURACY_HIGH (1) indique que le capteur doit fournir le rapport le plus précis possible. Cela inclut l'utilisation des services qui peuvent facturer des sommes d'argent ou la consommation de niveaux supérieurs d'alimentation de batterie ou de bande passante de connexion.

VT_LPWSTR SENSOR_PROPERTY_MANUFACTURER Nom du fabricant.
VT_UI4 SENSOR_PROPERTY_MIN_REPORT_INTERVAL Paramètre de temps écoulé minimal pris en charge par le matériel pour la génération de rapports de données de capteur, en millisecondes.
VT_LPWSTR SENSOR_PROPERTY_MODEL Nom du modèle de capteur.
VT_CLSID SENSOR_PROPERTY_PERSISTENT_UNIQUE_ID GUID qui identifie le capteur. Cette valeur doit être unique pour chaque capteur sur un appareil, ou sur plusieurs appareils du même modèle que celui énuméré sur l’ordinateur.
VT_UKNOWN SENSOR_PROPERTY_RANGE_MAXIMUM Objet IPortableDeviceValues qui contient des noms de champs de données de capteur et leurs valeurs maximales associées.
VT_UKNOWN SENSOR_PROPERTY_RANGE_MINIMUM Objet IPortableDeviceValues qui contient des noms de champs de données de capteur et leurs valeurs minimales associées.
SENSOR_PROPERTY_RESOLUTION VT_UKNOWN Objet IPortableDeviceValues qui contient des noms de champs de données de capteur et leurs résolutions associées. Les valeurs de résolution représentent la sensibilité au changement dans le champ de données.

Les valeurs de résolution sont exprimées en utilisant les mêmes unités que le champ de données, sauf indication contraire.

VT_LPWSTR SENSOR_PROPERTY_SERIAL_NUMBER Numéro de série du capteur.
VT_UI4 SENSOR_PROPERTY_STATE Valeur SensorState qui contient l’état actuel du capteur.
VT_CLSID SENSOR_PROPERTY_TYPE GUID qui identifie le type de capteur. Les types de capteurs définis par la plateforme sont définis dans Sensors.h.
 

Exemples

L’exemple suivant montre comment appeler GetValue pour obtenir une valeur de propriété. Vous devez inclure sensors.h pour utiliser la constante dans l’exemple.


PROPVARIANT pv;				
HRESULT hr = spLatLongReport->GetValue(SENSOR_DATA_TYPE_LATITUDE_DEGREES, &pv);

L’exemple suivant montre comment implémenter GetValue dans votre propre objet de rapport. Cette implémentation permet à l’appelant d’obtenir des valeurs pour plusieurs champs de rapport d’emplacement. Ce code vous oblige à inclure sensors.h et provarutil.h.

STDMETHODIMP CLocationReport::GetValue(REFPROPERTYKEY pKey, PROPVARIANT *pValue)
{
    HRESULT hr = S_OK;

    if (pKey.fmtid == SENSOR_DATA_TYPE_LOCATION_GUID) 
    {
        // properties for civic address reports
        if (pKey.pid == SENSOR_DATA_TYPE_ADDRESS1.pid)
        {
            hr = InitPropVariantFromString(m_address1, pValue);
        } 
        else if (pKey.pid == SENSOR_DATA_TYPE_ADDRESS2.pid)
        {    
            hr = InitPropVariantFromString(m_address2, pValue);
        }
        else if (pKey.pid == SENSOR_DATA_TYPE_CITY.pid)
        {
            hr = InitPropVariantFromString(m_city, pValue);
        }
        else if (pKey.pid == SENSOR_DATA_TYPE_STATE_PROVINCE.pid)
        {
            hr = InitPropVariantFromString(m_stateprovince, pValue);
        } 
        else if (pKey.pid == SENSOR_DATA_TYPE_POSTALCODE.pid)
        {
            hr = InitPropVariantFromString(m_postalcode, pValue);
        }
        else if (pKey.pid == SENSOR_DATA_TYPE_COUNTRY_REGION.pid)    
        {
            hr = InitPropVariantFromString(m_countryregion, pValue);
        }
        // properties for latitude/longitude reports
        else if (pKey.pid == SENSOR_DATA_TYPE_LATITUDE_DEGREES.pid)
        {
            hr = InitPropVariantFromDouble(m_latitude, pValue);
        } 
        else if (pKey.pid == SENSOR_DATA_TYPE_LONGITUDE_DEGREES.pid)
        {
            hr = InitPropVariantFromDouble(m_longitude, pValue);
        }
        else if (pKey.pid == SENSOR_DATA_TYPE_ERROR_RADIUS_METERS.pid)    
        {
            hr = InitPropVariantFromDouble(m_errorradius, pValue);
        }
        else 
        {
            hr = HRESULT_FROM_WIN32(ERROR_NO_DATA);
            PropVariantInit(pValue);
        }
    }
    return hr;
}

Configuration requise

Condition requise Valeur
Client minimal pris en charge Windows 7 [applications de bureau uniquement],Windows 7
Serveur minimal pris en charge Aucun pris en charge
Plateforme cible Windows
En-tête locationapi.h
DLL LocationAPI.dll

Voir aussi

ILocationReport