Поделиться через


Метод ILocationReport::GetValue (locationapi.h)

[API расположения Win32 доступен для использования в операционных системах, указанных в разделе Требования. В последующих версиях он может быть изменен или недоступен. Вместо этого используйте API Windows.Devices.Geolocation . ]

Извлекает значение свойства из отчета о расположении.

Синтаксис

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

Параметры

[in] pKey

REFPROPERTYKEY , указывающий имя извлекаемого свойства.

[out] pValue

Адрес PROPVARIANT , который получает значение свойства.

Возвращаемое значение

Если этот метод завершается успешно, он возвращает S_OK. В противном случае возвращается код ошибки HRESULT .

Комментарии

Свойства могут быть определены платформой или изготовителем.

Определяемые платформой значения PROPERTYKEY для датчиков расположения определяются в разделе типы данных датчика расположения в sensors.h.

Ниже приведена таблица некоторых определяемых платформой свойств, которые обычно связаны с отчетами о расположении. Эти ключи свойств имеют поле fmtid, равное SENSOR_DATA_TYPE_LOCATION_GUID. Дополнительные свойства можно найти в sensors.h. Если вы реализуете собственный отчет о расположении для передачи в SetReport, эта таблица указывает, какие значения должны быть предоставлены в реализации GetValue объекта отчета.

Имя и тип ключа свойства Описание
SENSOR_DATA_TYPE_LATITUDE VT_R8 Градусы широты, где север положительный.
Примечание Объект отчета широты/долготы, передаваемый в SetReport , должен предоставлять это значение в своей реализации GetValue.
 
VT_R8 SENSOR_DATA_TYPE_LONGITUDE Градусы долготы, где восток положительный.
Примечание Объект отчета широты/долготы, передаваемый в SetReport , должен предоставлять это значение в своей реализации GetValue.
 
VT_R8 SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS Высота по отношению к уровню моря, в метрах.
SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_METERS VT_R8 Высота по отношению к эталонной эллипсоиде, в метрах.
SENSOR_DATA_TYPE_SPEED_KNOTS VT_R8 Скорость измеряется в узлах.
SENSOR_DATA_TYPE_TRUE_HEADING_DEGREES VT_R8 Направление относительно истинного севера в градусах.
VT_R8 SENSOR_DATA_TYPE_MAGNETIC_HEADING_DEGREES Направление относительно магнитного севера в градусах.
SENSOR_DATA_TYPE_MAGNETIC_VARIATION VT_R8 Магнитные вариации. Восток является позитивным.
VT_R8 SENSOR_DATA_TYPE_ERROR_RADIUS_METERS Радиус ошибки, указывающий точность широты и долготы в метрах.
Примечание Объект отчета широты/долготы, передаваемый в SetReport , должен предоставлять это значение в своей реализации GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_ADDRESS1 Первая строка адреса в отчете о гражданских адресах.
Примечание Если объект отчета по гражданскому адресу, передаваемый в SetReport , содержит эти данные, он должен предоставить это значение в своей реализации GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_ADDRESS2 Вторая строка адреса в гражданском адресном отчете.
Примечание Если объект отчета по гражданскому адресу, передаваемый в SetReport , содержит эти данные, он должен предоставить это значение в своей реализации GetValue.
 
SENSOR_DATA_TYPE_CITY VT_LPWSTR Поле "Город" в отчете с гражданским адресом.
Примечание Если объект отчета по гражданскому адресу, передаваемый в SetReport , содержит эти данные, он должен предоставить это значение в своей реализации GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_STATE_PROVINCE Поле штата или провинции в отчете об обращении с гражданскими адресами.
Примечание Если объект отчета по гражданскому адресу, передаваемый в SetReport , содержит эти данные, он должен предоставить это значение в своей реализации GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_POSTALCODE Поле почтового индекса в отчете о гражданских адресах.
Примечание Если объект отчета по гражданскому адресу, передаваемый в SetReport , содержит эти данные, он должен предоставить это значение в своей реализации GetValue.
 
VT_LPWSTR SENSOR_DATA_TYPE_COUNTRY_REGION Код страны или региона в отчете о гражданских адресах. Значение должно быть двухбуквенный или трехбуквенный код страны ISO 3166.
Примечание Объект отчета по гражданским адресам, передаваемый в SetReport , должен предоставлять это значение в своей реализации GetValue.
 
VT_R8 SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_ERROR_METERS Погрешность высоты относительно ссылочного эллипсоида в метрах.
VT_R8 SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_ERROR_METERS Погрешность высоты относительно уровня моря, в метрах.
 

Ниже приведена таблица других определяемых платформой свойств, которые могут содержаться в отчетах о расположении, но не относятся к расположению. Поле fmtid этих ключей свойств SENSOR_PROPERTY_COMMON_GUID.

Имя и тип ключа свойства Описание
VT_UNKNOWN SENSOR_PROPERTY_ACCURACY Объект IPortableDeviceValues, содержащий имена типов данных датчика и связанные с ними точность. Значения точности представляют собой возможные отклонения от истинных значений.

Значения точности выражаются с использованием той же единицы измерения, что и поле данных, за исключением случаев, когда задокументировано иное.

SENSOR_PROPERTY_CHANGE_SENSITIVITY VT_UNKNOWN Объект IPortableDeviceValues, содержащий имена типов данных датчика и связанные с ними значения конфиденциальности изменений. Значения конфиденциальности изменения представляют величину, на которую поле данных должно измениться до возникновения события SENSOR_EVENT_DATA_UPDATED.

Значения конфиденциальности выражаются с использованием тех же единиц, что и поле данных, за исключением случаев, когда иное задокументировано.

Например, значение чувствительности изменения, равное 2 для SENSOR_DATA_TYPE_TEMPERATURE_CELSIUS, будет представлять чувствительность плюс или минус 2 градуса по Цельсию.

SENSOR_PROPERTY_CURRENT_CONNECTION_TYPE VT_UI4 Значение SensorConnectionType , содержащее текущий тип подключения.
SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL VT_UI4 Текущее затраченное время создания отчета о данных датчика в миллисекундах.

Установка нулевого значения указывает драйверу на использование интервала отчета по умолчанию. После получения нулевого значения для этого свойства драйвер должен возвращать интервал отчета по умолчанию, а не нулевой при запросе.

Приложения могут задать это значение, чтобы запросить определенный интервал отчета, но несколько приложений могут использовать один и тот же драйвер. Таким образом, драйверы определяют истинный интервал отчета, основанный на внутренней логике. Например, драйвер всегда может использовать кратчайший интервал отчета, запрашиваемый вызывающим абонентом.

SENSOR_PROPERTY_DESCRIPTION VT_LPWSTR Строка описания датчика.
SENSOR_PROPERTY_DEVICE_PATH VT_LPWSTR Уникально идентифицирует экземпляр устройства, с которым связан датчик. Это свойство можно использовать, чтобы определить, содержит ли устройство несколько датчиков.

Драйверы устройств не должны поддерживать это свойство, так как платформа предоставляет это значение приложениям без запросов к драйверам.

VT_LPWSTR SENSOR_PROPERTY_FRIENDLY_NAME Понятное имя устройства.
VT_UI4 SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY Перечислимое значение, указывающее тип обработки точности, запрошенной клиентским приложением. LOCATION_DESIRED_ACCURACY_DEFAULT (0) означает, что датчик должен использовать точность, для которой он может оптимизировать энергопотребление, и другие аспекты затрат.

LOCATION_DESIRED_ACCURACY_HIGH (1) указывает, что датчик должен предоставлять наиболее точный отчет. Это касается использования услуг по взиманию средств, потребления высокого уровня мощности батарей или пропускной способности подключения.

SENSOR_PROPERTY_MANUFACTURER VT_LPWSTR Имя производителя.
SENSOR_PROPERTY_MIN_REPORT_INTERVAL VT_UI4 Параметр минимального затраченного времени, поддерживаемый оборудованием для создания отчетов о данных датчиков, в миллисекундах.
VT_LPWSTR SENSOR_PROPERTY_MODEL Имя модели датчика.
VT_CLSID SENSOR_PROPERTY_PERSISTENT_UNIQUE_ID GUID, идентифицирующий датчик. Это значение должно быть уникальным для каждого датчика на устройстве или на устройствах с той же моделью, что и на компьютере.
VT_UKNOWN SENSOR_PROPERTY_RANGE_MAXIMUM Объект IPortableDeviceValues, содержащий имена полей данных датчика и связанные с ними максимальные значения.
VT_UKNOWN SENSOR_PROPERTY_RANGE_MINIMUM Объект IPortableDeviceValues, содержащий имена полей данных датчика и связанные с ними минимальные значения.
VT_UKNOWN SENSOR_PROPERTY_RESOLUTION Объект IPortableDeviceValues, содержащий имена полей данных датчика и связанные с ними разрешения. Значения разрешения представляют чувствительность к изменению в поле данных.

Значения разрешения выражаются с использованием той же единицы измерения, что и поле данных, за исключением случаев, когда задокументировано иное.

SENSOR_PROPERTY_SERIAL_NUMBER VT_LPWSTR Серийный номер датчика.
VT_UI4 SENSOR_PROPERTY_STATE Значение SensorState, содержащее текущее состояние датчика.
VT_CLSID SENSOR_PROPERTY_TYPE GUID, определяющий тип датчика. Типы датчиков, определяемые платформой, определяются в Sensors.h.
 

Примеры

В следующем примере показано, как вызвать GetValue для получения значения свойства. Для использования константы в примере необходимо включить sensors.h.


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

В следующем примере показано, как реализовать GetValue в собственном объекте отчета. Эта реализация позволяет вызывающей объекту получать значения для нескольких полей отчета о расположении. Этот код требует включения sensors.h и 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;
}

Требования

Требование Значение
Минимальная версия клиента Windows 7 [только классические приложения],Windows 7
Минимальная версия сервера Ни одна версия не поддерживается
Целевая платформа Windows
Header locationapi.h
DLL LocationAPI.dll

См. также раздел

ILocationReport