VC++ Geocoding APIの使い方

vc-geocoding-apiのアイキャッチ画像 GCP

住所から緯度経度を取得するGoogleのGeocoding APIをVC++でコーディングする方法を解説します。

Geocoding APIの有効化

Geocoding APIを使うと、住所やランドマーク名から経度と緯度を取得することができます。
まずはGoogle Cloudのダッシュボードから、Geocoding APIを有効化します。

※Google Cloudのアカウントは作成されている前提で進めます。

Google Cloud コンソール > メニュー > APIとサービスで、APIとサービスの有効化を選択します。
次いで、「Geocoding API」で検索します。

GCPのAPIライブラリ

有効にします。

GCPのAPIの有効化

APIキーの認証情報を作成します。

GCPのAPIキーの認証情報作成①
GCPのAPIキーの認証情報作成②

コーディング

VC++でHTTP通信(REST APIの実行)をするためには、cpprestsdkなどを使います。こちらの通り、環境構築を行って下さい。

その上で、main.cppを以下のように実装します。

src/components/component1/main.cpp

#include "HttpClient.h"

#define GEOCODING_API_URL "https://maps.googleapis.com/maps/api/geocode/json"  // ベースURL
#define GEOCODING_API_ADDRESS "address=100-0001"  // 検索したい郵便番号
#define GEOCODING_API_KEY "key=AIzaSyBa_v...eyWHeVDtwc"  // APIキー(認証情報を作成して取得したAPIキー)
#define GEOCODING_API_GEO_LOCAL "language=ja";  // ロケール指定(※ロケールを指定しないと上手く取得できない場合がある)

int main(int argc, const char** argv)
{
	int ret;
	double nLongitude, nLatitude;
	json::value cOutData, cGeometryJson, cLocationJson;

	// URL作成
	std::string sUrl;
	sUrl += GEOCODING_API_URL;
	sUrl += "?";
	sUrl += GEOCODING_API_ADDRESS;
	sUrl += "&";
	sUrl += GEOCODING_API_KEY;
	sUrl += "&";
	sUrl += GEOCODING_API_GEO_LOCAL;

	// REST API実行
	HttpClient cHttpClient;
	ret = cHttpClient.get(sUrl, cOutData);
	if (ret == 0) {
		json::array cResults = cOutData[utility::conversions::utf8_to_utf16("results")].as_array();
		for (json::array::iterator it = cResults.begin(); it != cResults.end(); ++it) {
			cGeometryJson = (*it)[utility::conversions::utf8_to_utf16("geometry")];
			cLocationJson = cGeometryJson[utility::conversions::utf8_to_utf16("location")];
			nLongitude = cLocationJson[utility::conversions::utf8_to_utf16("lng")].as_double();
			nLatitude = cLocationJson[utility::conversions::utf8_to_utf16("lat")].as_double();
			::printf("Longitude=%lf, Latitude=%lf \n", nLongitude, nLatitude);
			break;
		}
	}

	::getchar();

	return 0;
}

ビルドして実行して動作確認します。

GeocodingAPIの実行結果

以上で、Geocoding APIを使って経度と緯度を取得できることができました。

タイトルとURLをコピーしました