为了完成实时获取车辆的地址,本文调用了如下的代码:具体信息请查看下述代码注释
#include <iostream>
#include <curl/curl.h>
#include <string>
#include <json/json.h>
// 回调函数,用于将 HTTP 响应数据写入字符串
size_t WriteCallback(void *contents, size_t size, size_t nmemb, std::string *s) {
size_t newLength = size * nmemb;
try {
s->append((char*)contents, newLength);
} catch(std::bad_alloc &e) {
// 处理内存分配错误
return 0;
}
return newLength;
}
// 使用百度地图 API 进行地点检测
std::string geocodeLocation(const std::string& address, const std::string& apiKey) {
CURL *curl;
CURLcode res;
std::string readBuffer;
std::string url = "http://api.map.baidu.com/geocoding/v3/?address=" + address + "&output=json&ak=" + apiKey;
curl = curl_easy_init();
printf("curl=%d\n",curl);
if(curl) {
curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
curl_easy_setopt(curl, CURLOPT_WRITEDATA, &readBuffer);
res = curl_easy_perform(curl);
if(res!= CURLE_OK) {
std::cerr << "curl_easy_perform() failed: " << curl_easy_strerror(res) << std::endl;
}
curl_easy_cleanup(curl);
}
return readBuffer;
}
int main() {
std::string apiKey = "********************"; //添加百度地图的key
std::string address = "浙江省*********"; //修改对应的地址
std::string response = geocodeLocation(address, apiKey);
printf("response=%c\n",response);
Json::Value root;
Json::Reader reader;
bool parsingSuccessful = reader.parse(response, root);
if (!parsingSuccessful) {
std::cerr << "Failed to parse JSON" << std::endl;
return -1;
}
if (root["status"].asInt() == 0) { //打印对应的地点、经纬度信息
std::cout << "地点:" << root["result"]["formatted_address"].asString() << std::endl;
std::cout << "经度:" << root["result"]["location"]["lng"].asDouble() << std::endl;
std::cout << "纬度:" << root["result"]["location"]["lat"].asDouble() << std::endl;
} else {
std::cerr << "无法找到地点:" << address << std::endl;
}
return 0;
}
通过上述操作即可完成实时地点信息获取功能。