ToB企服应用市场:ToB评测及商务社交产业平台

标题: PROJ/GDAL库设置资源文件proj.db路径的两种方法 [打印本页]

作者: 王國慶    时间: 昨天 15:23
标题: PROJ/GDAL库设置资源文件proj.db路径的两种方法
PROJ库的资源文件proj.db

proj.db是一个包罗坐标转换信息的SQLite数据库,是PROJ运行所必须的资源文件。PROJ库也是GDAL库的一个重要依赖项,因此GDAL在利用PROJ的功能时,也间接地需要proj.db文件。
下面提供两种设置proj.db路径的方法。
PROJ库自动搜刮proj.db的顺序

平台路径Windows${LOCALAPPDATA}/projmacOS${HOME}/Library/Application Support/projLinux${XDG_DATA_HOME}/proj if XDG_DATA_HOME is defined. Else ${HOME}/.local/share/proj 自PROJ 9.5版本起,也可以调用proj_context_set_user_writable_directory()设置用户可写路径。
特别注意,特别注意

利用下面的方法之前,肯定确保设置的路径下存在proj.db!肯定记得把proj.db拷贝到你设置的路径下!
方法一:设置系统环境变量

可以选择在系统环境变量中永世添加PROJ_DATA项目,值为proj.db地点的路径(目录),以windows平台为例:

方法二:在程序中设置环境变量

在代码中临时添加环境变量PROJ_DATA,如下所示:
  1. #include<iostream>
  2. #include<proj.h>
  3. int main(){
  4.     char strDir[256];// proj.db所在路径。建议将proj.db拷贝到exe程序所在路径,并将exe所在路径提取出来。
  5.     std::string strEnvTmp = "PROJ_DATA=";
  6.     strEnvTmp += strDir;
  7. #ifdef _WIN32
  8.     int nRet = _putenv(strEnvTmp.c_str());// windows平台用_putenv设置环境变量
  9. #else
  10.     int nRet = setenv("PROJ_DATA", strDir, 1);//linux 平台更推荐setenv
  11. #endif // _WIN32
  12.     std::cout << "PROJ_DATA:" << getenv("PROJ_DATA") << std::endl;
  13.     if (nRet == -1)
  14.     {
  15.         std::cerr << "Cannot set environment variable PROJ_DATA!" << std::endl;
  16.         return -1;
  17.     }
  18.     else return 1;
  19. }
复制代码
方法三:在利用PROJ库的程序中调用函数设置搜刮路径

在PROJ库中,·proj_context_set_search_paths函数可用于设置资源文件的搜刮路径。
   void proj_context_set_search_paths(PJ_CONTEXT *ctx, int count_paths, const char *const *paths)
它包罗三个参数:
第一个参数ctx是PROJ上下文,通过调用proj_context_create()创建;第二个参数count_paths是路径数目,第三个参数paths是路径字符串数组的首指针。
  将搜刮路径设置为程序地点目录".“和上层目录”…",示例代码如下:
  1. #include<iostream>
  2. #include<proj.h>
  3. int main(){
  4.     context = proj_context_create();
  5.     const char* path[] = { ".",".." };//, nullptr};// 设置proj.db的搜索路径
  6.     proj_context_set_search_paths(context, 2, path);
  7.     std::cout << "proj.db path: " << proj_context_get_database_path(context) << "\n";// 检查所找到的proj.db路径是否正确
  8.     return 0;
  9. }
复制代码
方法四:在利用GDAL库的程序中调用函数设置搜刮路径

在GDAL库中,提供了更简单的OSRSetPROJSearchPaths()函数(GDAL3.0起支持)或CPLSetConfigOption()函数(GDAL3.7起支持)设置proj.db的搜刮路径。
先先容OSRSetPROJSearchPaths()函数。该函数仅包罗一个参数,即路径字符串数组首指针。利用方式如下(需要包罗ogr_srs_api.h头文件):
  1. #include<ogr_srs_api.h>
  2. ///......上略
  3.     const char* path[] = { ".","..",nullptr };// 设置proj.db的搜索路径
  4.     OSRSetPROJSearchPaths(path);
复制代码
然后是CPLSetConfigOption()函数。该函数包罗两个参数,即设置项属性名和值字符串。利用方式如下(需要包罗cpl_conv.h头文件):
  1. #include<cpl_conv.h>
  2. ///......上略
  3.     const char* path = "Your proj.db's path.";// 设置proj.db的搜索文件夹路径
  4.     CPLSetConfigOption("PROJ_DATA", path);
复制代码
参考GDAL官方文档

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。




欢迎光临 ToB企服应用市场:ToB评测及商务社交产业平台 (https://dis.qidao123.com/) Powered by Discuz! X3.4