住所から緯度経度を取得するGoogleのGeocoding APIをVC++でコーディングする方法を解説します。
Geocoding APIの有効化
Geocoding APIを使うと、住所やランドマーク名から経度と緯度を取得することができます。
まずはGoogle Cloudのダッシュボードから、Geocoding APIを有効化します。
※Google Cloudのアカウントは作成されている前提で進めます。
Google Cloud コンソール > メニュー > APIとサービスで、APIとサービスの有効化を選択します。
次いで、「Geocoding API」で検索します。
有効にします。
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;
}
ビルドして実行して動作確認します。
以上で、Geocoding APIを使って経度と緯度を取得できることができました。