次の方法で共有


ILocationReport::GetValue メソッド (locationapi.h)

[Win32 Location API は、[要件] セクションで指定されたオペレーティング システムで使用できます。 今後のバージョンでは変更されるか、利用できなくなる場合もあります。 代わりに、 Windows.Devices.Geolocation API を使用します。 ]

場所レポートからプロパティ値を取得します。

構文

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

パラメーター

[in] pKey

取得するプロパティの名前を指定する REFPROPERTYKEY

[out] pValue

プロパティ値を受け取る PROPVARIANT のアドレス。

戻り値

このメソッドは、成功すると S_OK を返します。 そうでない場合は、HRESULT エラー コードを返します。

注釈

プロパティは、プラットフォーム定義または製造元定義の場合があります。

場所センサーのプラットフォーム定義 PROPERTYKEY 値は、sensors.h の場所センサーのデータ型セクションで定義されます。

一般的に場所レポートと関連付けされるプラットフォーム定義のプロパティの一覧を次に示します。 これらのプロパティ キーには、SENSOR_DATA_TYPE_LOCATION_GUIDと等しい fmtid フィールドがあります。 その他のプロパティは sensors.h にあります。 SetReport に渡す独自の場所レポートを実装する場合、このテーブルは、レポート オブジェクトの GetValue の実装で指定する必要がある値を示します。

プロパティ キーの名前と型 説明
SENSOR_DATA_TYPE_LATITUDE VT_R8 北が正の緯度。
メモSetReport に渡される緯度/経度レポート オブジェクトは、GetValue の実装でこの値を提供する必要があります。
 
SENSOR_DATA_TYPE_LONGITUDE VT_R8 東が正の経度。
メモSetReport に渡される緯度/経度レポート オブジェクトは、GetValue の実装でこの値を提供する必要があります。
 
SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_METERS VT_R8 海面に関する高度(メートル単位)。
SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_METERS VT_R8 参照楕円体に関する高度 (メートル単位)。
SENSOR_DATA_TYPE_SPEED_KNOTS VT_R8 結び目で測定された速度。
SENSOR_DATA_TYPE_TRUE_HEADING_DEGREES VT_R8 真北を基準にした角度の見出し。
SENSOR_DATA_TYPE_MAGNETIC_HEADING_DEGREES VT_R8 磁気北を度単位で基準とする見出し。
SENSOR_DATA_TYPE_MAGNETIC_VARIATION VT_R8 磁気変動。 East は正の値です。
SENSOR_DATA_TYPE_ERROR_RADIUS_METERS VT_R8 緯度と経度の精度をメートル単位で示す誤差半径。
メモSetReport に渡される緯度/経度レポート オブジェクトは、GetValue の実装でこの値を提供する必要があります。
 
SENSOR_DATA_TYPE_ADDRESS1 VT_LPWSTR 市民住所レポートの住所の最初の行。
メモSetReport に渡される市民アドレス レポート オブジェクトにこのデータが含まれている場合は、GetValue の実装でこの値を指定する必要があります。
 
SENSOR_DATA_TYPE_ADDRESS2 VT_LPWSTR 市民住所レポートの住所の 2 行目。
メモSetReport に渡される市民アドレス レポート オブジェクトにこのデータが含まれている場合は、GetValue の実装でこの値を指定する必要があります。
 
SENSOR_DATA_TYPE_CITY VT_LPWSTR 市民住所レポートの市区町村フィールド。
メモSetReport に渡される市民アドレス レポート オブジェクトにこのデータが含まれている場合は、GetValue の実装でこの値を指定する必要があります。
 
SENSOR_DATA_TYPE_STATE_PROVINCE VT_LPWSTR 市民住所レポートの都道府県フィールド。
メモSetReport に渡される市民アドレス レポート オブジェクトにこのデータが含まれている場合は、GetValue の実装でこの値を指定する必要があります。
 
SENSOR_DATA_TYPE_POSTALCODE VT_LPWSTR 市民住所レポートの郵便番号フィールド。
メモSetReport に渡される市民アドレス レポート オブジェクトにこのデータが含まれている場合は、GetValue の実装でこの値を指定する必要があります。
 
SENSOR_DATA_TYPE_COUNTRY_REGION VT_LPWSTR 市民住所レポートの国/地域コード。 値は、2 文字または 3 文字の ISO 3166 国コードである必要があります。
メモSetReport に渡される市民アドレス レポート オブジェクトは、GetValue の実装でこの値を提供する必要があります。
 
SENSOR_DATA_TYPE_ALTITUDE_ELLIPSOID_ERROR_METERS VT_R8 参照楕円体に関する高度誤差 (メートル単位)。
SENSOR_DATA_TYPE_ALTITUDE_SEALEVEL_ERROR_METERS VT_R8 海面に関する高度誤差 (メートル単位)。
 

次に示す表は、場所レポートで発生する可能性がありますが、場所に固有のものではありません。プラットフォームで定義された他のプロパティの表です。 これらのプロパティ キーの fmtid フィールドは SENSOR_PROPERTY_COMMON_GUID

プロパティ キーの名前と型 説明
SENSOR_PROPERTY_ACCURACY VT_UNKNOWN センサー のデータ型名とそれに関連付けられた精度を含む IPortableDeviceValues オブジェクト。 精度の値は、真の値から考えられる変動を表します。

精度の値は、特に文書化されている場合を除き、データ フィールドと同じ単位を使用して表されます。

SENSOR_PROPERTY_CHANGE_SENSITIVITY VT_UNKNOWN センサー のデータ型名とそれに関連付けられている変更の秘密度値を含む IPortableDeviceValues オブジェクト。 変更の秘密度の値は、SENSOR_EVENT_DATA_UPDATED イベントが発生する前にデータ フィールドを変更する必要がある量を表します。

秘密度値は、他に記載されている場合を除き、データ フィールドと同じ単位を使用して表されます。

たとえば、SENSOR_DATA_TYPE_TEMPERATURE_CELSIUSの変更の秘密度値 2 は、摂氏プラスまたはマイナス 2 の感度を表します。

SENSOR_PROPERTY_CURRENT_CONNECTION_TYPE VT_UI4 現在の接続の種類を含む SensorConnectionType 値。
SENSOR_PROPERTY_CURRENT_REPORT_INTERVAL VT_UI4 センサー データ レポート生成の現在の経過時間 (ミリ秒単位)。

値を 0 に設定すると、ドライバーは既定のレポート間隔を使用するように通知されます。 このプロパティの値 0 を受け取った後、ドライバーは、クエリ時に 0 ではなく、既定のレポート間隔を返す必要があります。

アプリケーションはこの値を設定して特定のレポート間隔を要求できますが、複数のアプリケーションが同じドライバーを使用している可能性があります。 そのため、ドライバーは、内部ロジックに基づく真のレポート間隔を決定します。 たとえば、ドライバーは常に、呼び出し元によって要求される最短のレポート間隔を使用する場合があります。

SENSOR_PROPERTY_DESCRIPTION VT_LPWSTR センサーの説明文字列。
SENSOR_PROPERTY_DEVICE_PATH VT_LPWSTR センサーが関連付けられているデバイス インスタンスを一意に識別します。 このプロパティを使用して、デバイスに複数のセンサーが含まれているかどうかを判断できます。

デバイス ドライバーでは、ドライバーのクエリを実行せずにこの値がアプリケーションに提供されるため、このプロパティをサポートする必要はありません。

SENSOR_PROPERTY_FRIENDLY_NAME VT_LPWSTR デバイスのフレンドリ名。
SENSOR_PROPERTY_LOCATION_DESIRED_ACCURACY VT_UI4 クライアント アプリケーションによって要求される精度処理の種類を示す列挙値。LOCATION_DESIRED_ACCURACY_DEFAULT (0) は、センサーが電力使用とその他のコストに関する考慮事項を最適化できる精度を使用する必要があることを示します。

LOCATION_DESIRED_ACCURACY_HIGH (1) は、センサーが可能な限り最も正確なレポートを提供する必要があることを示します。 これには有料のサービス、または高いレベルのバッテリ電力または接続帯域幅を消費するサービスの使用が含まれます。

SENSOR_PROPERTY_MANUFACTURER VT_LPWSTR 製造元の名前。
SENSOR_PROPERTY_MIN_REPORT_INTERVAL VT_UI4 ハードウェアがセンサー データ レポートの生成にサポートする最小経過時間の設定 (ミリ秒単位)。
SENSOR_PROPERTY_MODEL VT_LPWSTR センサー モデル名。
SENSOR_PROPERTY_PERSISTENT_UNIQUE_ID VT_CLSID センサーを識別する GUID 。 この値は、デバイス上のセンサーごとに、またはコンピューター上で列挙されたのと同じモデルのデバイス間で一意である必要があります。
SENSOR_PROPERTY_RANGE_MAXIMUM VT_UKNOWN センサー データ フィールド名とそれに関連付けられている最大値を含む IPortableDeviceValues オブジェクト。
SENSOR_PROPERTY_RANGE_MINIMUM VT_UKNOWN センサー データ フィールド名とそれに関連付けられている最小値を含む IPortableDeviceValues オブジェクト。
SENSOR_PROPERTY_RESOLUTION VT_UKNOWN センサー データ フィールド名とそれに関連付けられている解像度を含む IPortableDeviceValues オブジェクト。 解像度の値は、データ フィールドで変更する感度を表します。

解像度の値は、特に文書化されている場合を除き、データ フィールドと同じ単位を使用して表されます。

SENSOR_PROPERTY_SERIAL_NUMBER VT_LPWSTR センサーのシリアル番号。
SENSOR_PROPERTY_STATE VT_UI4 現在のセンサーの状態を含む SensorState 値。
SENSOR_PROPERTY_TYPE VT_CLSID センサーの種類を識別する 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
ヘッダー locationapi.h
[DLL] LocationAPI.dll

こちらもご覧ください

ILocationReport