前置安装依赖
1.SQLite3 安装 亲测
(97条消息) SQLite3源码下载与编译(开发环境:Win10+VS2022)_sqlite3 下载_林夕07的博客-CSDN博客
2.TIFF 亲测
(97条消息) Win11下基于cmake-3.26.3 完美编译 TIFF-4.5.0源码_tiff 编译_GIS子枫的博客-CSDN博客
安装他的方法,最后到编译才会报错:error MSB3073: 命令“setlocal。解决方法如下
最后生成的tiff在c盘
3.curl 编译 亲测
编译很难,就直接在window上安装
(97条消息) Windows上安装Curl工具_windows curl 工具_Janson666的博客-CSDN博客
proj安装
方法一 亲测可以cmake生成,但是编译会出现Link报错,不会解决
(97条消息) PROJ 9.1.1源码下载编译(Win10+VS2022)_proj下载_林夕07的博客-CSDN博客
config的时候看报啥错 就 把路径整上去
cmke报错记得别看warning,看error
编译link报错,可以
删除了proj链接器中的CURL_ENABLED,哪个项目报错关于curl就删除CURL_ENABLED宏
方法二,我是照着配置Visual Studio C++环境中GDAL、SQLite与PROJ库的方法 - 知乎 (zhihu.com)
同时结合之前安装的一些前置库,还是在编译阶段报错
无法解析的外部符号 __imp__curl_easy_init_QWQ_Plus的博客-CSDN博客
这些用处都没有,还是报错。
最后我把proj把动态库弄成静态库了再把test network删除 可以编译成功了
测试案例的时候发现上面的静态库方案不对,还是改成了动态库
最终!!!!!!!!!!!!!!!!!!
删除了proj链接器中的CURL_ENABLED 宏就可以编译通过了,哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈哈
练习案例
#include <stdio.h>
#include <proj.h>
#include <iostream>
using namespace std;
int main(void) {PJ_CONTEXT* C;//用于处理多线程程序PJ* P;//初始化投影目标PJ* norm;//初始化投影目标PJ_COORD a, b;//初始化投影坐标/* or you may set C=PJ_DEFAULT_CTX if you are sure you will *//* use PJ objects from only one thread */C = proj_context_create();//创建多线程,由于本示例为单线程,此处为展示作用P = proj_create_crs_to_crs(C,"EPSG:4326",//源投影"+proj=utm +zone=32 +datum=WGS84", //目标投影NULL);//创建在线程C内两个投影关系之间的相互转换if (0 == P) {cout << "Failed to create transformation object." << stderr << endl;return 1;}//如果P中两个投影的字符串不符合proj定义,提示转换失败/* This will ensure that the order of coordinates for the input CRS *//* will be longitude, latitude, whereas EPSG:4326 mandates latitude, *//* longitude */norm = proj_normalize_for_visualization(C, P);//在线程C内使投影目标P和norm拥有相同的坐标格式,此处为经纬度if (0 == norm) {cout << " Failed to normalize transformation object." << stderr << endl;return 1;}//norm为0,说明格式同步失败proj_destroy(P);//释放投影P = norm;//投影赋值/* a coordinate union representing Copenhagen: 55d N, 12d E *//* Given that we have used proj_normalize_for_visualization(), the order of/* coordinates is longitude, latitude, and values are expressed in degrees. */a = proj_coord(12, 55, 0, 0);//设定待转换的投影坐标,此处分别为经度,纬度,高程,时间/* transform to UTM zone 32, then back to geographical */b = proj_trans(P, PJ_FWD, a);//投影转换,fwd代表源投影转换成目标投影,INV代表目标投影转换为源投影cout << "East: " << b.enu.e << "; North:" << b.enu.n << endl;;//经纬度转化为xy坐标b = proj_trans(P, PJ_INV, b);//xy坐标转化为经纬度坐标cout << "Longitude: " << b.lp.lam << "; Latitude: " << b.lp.phi << endl;;//lam为经度,phi为纬度/* Clean up */proj_destroy(P);proj_context_destroy(C); /* may be omitted in the single threaded case */return 0;
}
生成目录下添加tiff.dll和Proj那个dll
EXE文件项目报错点
最后我生成的EXE项目到其他电脑运行无法找打proj.db。于是我知道缺少这个环境变量了
于是我把proj.db放到exe输出目录下。以及在主函数设定环境变量
boost::filesystem::path currentPath=boost::filesystem::current_path();
boost::process::environment env=boost::this_process::environment();
env["PROJ_LIB"]=currentPath.string();