最新文章专题视频专题问答1问答10问答100问答1000问答2000关键字专题1关键字专题50关键字专题500关键字专题1500TAG最新视频文章推荐1 推荐3 推荐5 推荐7 推荐9 推荐11 推荐13 推荐15 推荐17 推荐19 推荐21 推荐23 推荐25 推荐27 推荐29 推荐31 推荐33 推荐35 推荐37视频文章20视频文章30视频文章40视频文章50视频文章60 视频文章70视频文章80视频文章90视频文章100视频文章120视频文章140 视频2关键字专题关键字专题tag2tag3文章专题文章专题2文章索引1文章索引2文章索引3文章索引4文章索引5123456789101112131415文章专题3
当前位置: 首页 - 科技 - 知识百科 - 正文

利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩

来源:动视网 责编:小采 时间:2020-11-09 16:28:53
文档

利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩

利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩:流程: 【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析 【2】gcc生成动态链接库 【3】postgreSQL中加载动态链接库中的函数 【4】postgreSQL中将逆地理编码函数的返回类型进行转化 ==========================
推荐度:
导读利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩:流程: 【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析 【2】gcc生成动态链接库 【3】postgreSQL中加载动态链接库中的函数 【4】postgreSQL中将逆地理编码函数的返回类型进行转化 ==========================


流程: 【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析 【2】gcc生成动态链接库 【3】postgreSQL中加载动态链接库中的函数 【4】postgreSQL中将逆地理编码函数的返回类型进行转化 =========================================== 【

流程:
【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析
【2】gcc生成动态链接库
【3】postgreSQL中加载动态链接库中的函数
【4】postgreSQL中将逆地理编码函数的返回类型进行转化
===========================================
【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析

#include 
#include 
#include 
#include 

#include "postgres.h"
#include "fmgr.h"

PG_MODULE_MAGIC;

int StringFind(const char *pSrc,const char *pDst)//字符串位置查找,返回源字符串的位置 
{ 
 int i, j; 
 for (i=0; pSrc[i]!='\0'; i++) 
 { 
 if(pSrc[i]!=pDst[0]) 
 continue; 
 j = 0; 
 while(pDst[j]!='\0' && pSrc[i+j]!='\0') 
 { 
 j++; 
 if(pDst[j]!=pSrc[i+j]) 
 break; 
 } 
 if(pDst[j]=='\0') 
 return i; 
 } 
 return -1; 
} 

size_t write_callback(char *ptr, size_t size, size_t nmemb, void *userdata)//回调函数
{
strcat((char*)userdata, (char*)ptr);
return size*nmemb;
}

char* poi_list(char* longitude, char* latitude) {	//主函数

	 int mPos=0;
	 char* result;
	 char* strLongitude=longitude;
	 char* strLatitude=latitude;

	 char tempLongitude[25]="longitude=";
	 char tempLatitude[25]="&latitude=";
	 char* pstrLongitude;
	 char* pstrLatitude; 
	
	 pstrLongitude=strcat((char*)tempLongitude,strLongitude);
	 pstrLatitude=strcat((char*)tempLatitude,strLatitude);
	 char* locationInfor=strcat(pstrLongitude,pstrLatitude);

	 char finalResult[5120]={'\0'};
	 int i=0;
	 char* pDst="poi_list";
 	 char szRet[5120] = {'\0'};//结果存储
	 char szpage[256] = "http://ditu.amap.com/service/regeo?";
	 char *myurl =strcat(szpage,locationInfor);

	 CURLcode res; 
	 res = curl_global_init(CURL_GLOBAL_ALL);//初始化
	 if (res != CURLE_OK) 
	 { 
	 result = psprintf( "Failed to global init default [%d]\n", res ); 
 	 return result; 
	 } 

	 CURL* pEasyHandle = curl_easy_init(); // 初始化
	
	 curl_easy_setopt(pEasyHandle, CURLOPT_URL, myurl);//传入url
	 curl_easy_setopt(pEasyHandle, CURLOPT_WRITEFUNCTION, &write_callback);//调用回调函数
	 curl_easy_setopt(pEasyHandle, CURLOPT_TIMEOUT, 10); 
	 curl_easy_setopt(pEasyHandle, CURLOPT_FORBID_REUSE, 1); 
	 curl_easy_setopt(pEasyHandle, CURLOPT_WRITEDATA, szRet);//参数三对应回调函数的参数四

	 res = curl_easy_perform(pEasyHandle);
	 curl_easy_cleanup(pEasyHandle);

	 result = szRet ;	//获取整个json数据
	
	 mPos=StringFind(result,pDst);
	
	 int mNewPos=mPos+10;//过滤掉poi_list字段

	 while(szRet[mNewPos]!='\0')
	 {

	 finalResult[i]=szRet[mNewPos];
	 mNewPos++;
	 i++;
	 }
	 i=i-2;
	 finalResult[i]='\0';
	 char *result0=finalResult;
	 return result0;
}
【2】gcc生成动态链接库
hyc@hyc-csu:~/文档/Curl_program$ gcc -fpic -I `pg_config --includedir-server` -c poiOutput.c -lcurl
hyc@hyc-csu:~/文档/Curl_program$ gcc -fpic -shared -o poiOutput.so poiOutput.o -lcurl
hyc@hyc-csu:~/文档/Curl_program$ sudo cp poiOutput.so `pg_config --libdir`
【3】postgreSQL中加载动态链接库中的函数
gpsDB=# load 'poiOutput.so';
LOAD
gpsDB=# create function poi_list(cstring,cstring)
returns cstring
as 'poiOutput.so','poi_list'
language C immutable strict;
CREATE FUNCTION
gpsDB=# select poi_list('118.744607','32.030886');
【4】postgreSQL中将逆地理编码函数的返回类型进行转化【参数null::poiarray,其中poiarray表结构与json结构相对应,详情点击此处】
gpsDB=# select (select poi_list('112.931850','28.169100'))::json;
ERROR: cannot cast type cstring to json ?//cstring类型转化为text类型,再转化为json类型
gpsDB=# select * from json_populate_recordset(null::poiarray,(cast((select poi_list('118.744607','32.030886')) as text))::json);
gpsDB=# select * from json_populate_recordset(null::poiarray,(poi_list('118.744607','32.030886')::text)::json);

文档

利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩

利用curl进行逆地理编码_c语言编写动态链接库对PostgreSQL进行扩:流程: 【1】c语言编写逆地理编码的函数,利用curl库和高德服务器进行地理坐标解析 【2】gcc生成动态链接库 【3】postgreSQL中加载动态链接库中的函数 【4】postgreSQL中将逆地理编码函数的返回类型进行转化 ==========================
推荐度:
标签: 链接 利用 动态
  • 热门焦点

最新推荐

猜你喜欢

热门推荐

专题
Top