Proj.4库的编译及使用-1

61 篇文章 26 订阅
50 篇文章 18 订阅

Proj.4库的编译及使用

Proj.4是开源GIS最著名的地图投影库,GRASS GIS, MapServer, PostGIS, Thuban, OGDI, Mapnik, TopoCad, GDAL/OGR等软件的投影都直接或间接的使用Proj.4。
Proj.4的功能主要有经纬度坐标与地理坐标的转换,坐标系的转换,包括基准变换等,下面以命令行方式和编程方式来说明经纬度坐标与地理坐标转换功能的使用。

Proj.4的下载和编译

使用git进行下载。

  1. git clone https://github.com/OSGeo/proj.4.git

Linux下的编译和安装

下载之后,使用cmake生成Makefile进行编译。

  1.     mkdir -p build &&cd build   #进入proj.4工程目录后,创建一个构建目录,并进入
        # 使用cmake生成Makefile,指定安装路径和生成库类型为静态库
        cmake  -DCMAKE_INSTALL_PREFIX=./install -DBUILD_LIBPROJ_SHARED=OFF ..
        # 编译
        make
        # 安装,安装的目录是之前指定的目录,就是当前目录下的install目录
        make install

安装完成之后进入install目录,可以看到对应的头文件和库文件。

  1. > tree
  2. .
  3. ├── bin
  4. │   ├── cs2cs
  5. │   ├── geod
  6. │   ├── nad2bin
  7. │   └── proj
  8. ├── include
  9. │   ├── geodesic.h
  10. │   ├── proj_api.h
  11. │   └── projects.h
  12. ├── lib
  13. │   └── libproj.a
  14. └── share
  15. ├── cmake
  16. │   └── PROJ4
  17. │   ├── proj4-config.cmake
  18. │   ├── proj4-config-version.cmake
  19. │   ├── proj4-targets.cmake
  20. │   └── proj4-targets-release.cmake
  21. ├── man
  22. │   ├── man1
  23. │   │   ├── cs2cs.1
  24. │   │   ├── geod.1
  25. │   │   └── proj.1
  26. │   └── man3
  27. │   ├── geodesic.3
  28. │   └── pj_init.3
  29. └── proj
  30. ├── CH
  31. ├── epsg
  32. ├── esri
  33. ├── esri.extra
  34. ├── GL27
  35. ├── IGNF
  36. ├── nad27
  37. ├── nad83
  38. ├── nad.lst
  39. ├── ntf_r93.gsb
  40. ├── null
  41. ├── nzgd2kgrid0005.gsb
  42. ├── other.extra
  43. ├── proj_def.dat
  44. └── world
  45.  
  46. 10 directories, 34 files

Windows下使用VS2013进行编译

先使用cmake生成VS工程

  1. cd build # 先进入build目录
  2. # 下面设置了安装目录和编译参数等
  3. cmake -DCMAKE_INSTALL_PREFIX=D:/proj.4 -DBUILD_LIBPROJ_SHARED=OFF -G"Visual Studio 12 Win64" ..

打开VS2013 x64本机命令行工具,然后进入build目录,执行下面命令

  1. msbuild ALL_BUILD.vcxproj /p:Configuration="Release"
  2. msbuild INSTALL.vcxproj /p:Configuration="Release"

编译安装完成后,可以进入D:\Proj.4目录查看输出的头文件和库文件(以及share目录下的一些数据文件)。

使用Proj.4库

使用以下代码来做测试

  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. #include "proj_api.h"
  5.  
  6. int main()
  7. {
  8. // 定义一个北京54的横轴墨卡托投影坐标系
  9. // +proj=lcc 投影类型:横轴墨卡托投影
  10. // +ellps=krass 椭球体
  11. // +lat_1=25n +lat_2=47n 维度范围(标准纬线)
  12. // +lon_0=117e 中央经度为东经117度
  13. // +x_0=20500000 X轴(东)方向偏移量
  14. // +y_0=0 Y轴(北)方向偏移量
  15. // +units=m 单位
  16. // +k=1.0 比率
  17.  
  18. const char* beijing1954="+proj=lcc +ellps=krass +lat_1=25n +lat_2=47n +lon_0=117e +x_0=20500000 +y_0=0 +units=m +k=1.0";
  19. //如果你想转换到WGS84基准
  20. //"+towgs84=22,-118,30.5,0,0,0,0"
  21.  
  22. projPJ pj; // 投影对象指针
  23. // 初始化投影对象
  24. if (!(pj = pj_init_plus(beijing1954))){
  25. exit(-1); // 初始化失败,退出程序
  26. }
  27.  
  28. // 待转换的坐标(投影坐标)
  29. projUV parr[4] = {
  30. {20634500.0,4660000.0},
  31. {20635000.0,4661000.0},
  32. {20635500.0,4659000.0},
  33. {20634000.0,4662000.0}
  34. };
  35.  
  36. printf("DEG_TO_RAD = %f (1度=%f弧度)\n",DEG_TO_RAD,DEG_TO_RAD);
  37.  
  38. // 逐点转换
  39. for(int i=0; i<4; i++)
  40. {
  41. printf("\n--------------转换第%d点---------------\n",i+1);
  42. projUV p;
  43.  
  44. p = pj_inv(parr[i],pj); // 投影逆变换(投影坐标转经纬度坐标)
  45. printf("北京54投影 坐标:%10lf,%10lf\n",parr[i].u,parr[i].v);
  46. printf("北京54经纬度坐标:%10lf,%10lf\n",p.u/DEG_TO_RAD,p.v/DEG_TO_RAD); // 输出的时候,将弧度转换为度
  47.  
  48. p = pj_fwd(p,pj); // 投影正变换(经纬度坐标转投影坐标)
  49. printf("北京54投影 坐标:%10lf,%10lf\n",p.u,p.v);
  50. }
  51.  
  52. // 释放投影对象内存
  53. pj_free(pj);
  54. return 0;
  55. }

编译的时候,需要链接pthreadm两个库,因为前面编译的时候,生成的是静态库。如果生成的是动态库,则是不需要的。
test.cinstall目录下写的,所以指定的路径是如下的。

  1. gcc test.c -Iinclude -Llib -lproj -lpthread -lm -o test

运行结果如下:

  1. > ./test
  2. DEG_TO_RAD = 0.017453 (1度=0.017453弧度)
  3.  
  4. --------------转换第1点---------------
  5. 北京54投影 坐标:20634500.000000,4660000.000000
  6. 北京54经纬度坐标:118.611065, 40.462077
  7. 北京54投影 坐标:20634500.000000,4660000.000000
  8.  
  9. --------------转换第2点---------------
  10. 北京54投影 坐标:20635000.000000,4661000.000000
  11. 北京54经纬度坐标:118.617253, 40.471148
  12. 北京54投影 坐标:20635000.000000,4661000.000000
  13.  
  14. --------------转换第3点---------------
  15. 北京54投影 坐标:20635500.000000,4659000.000000
  16. 北京54经纬度坐标:118.622841, 40.452777
  17. 北京54投影 坐标:20635500.000000,4659000.000000
  18.  
  19. --------------转换第4点---------------
  20. 北京54投影 坐标:20634000.000000,4662000.000000
  21. 北京54经纬度坐标:118.605475, 40.480447
  22. 北京54投影 坐标:20634000.000000,4662000.000000

 

ubuntu  proj4安装

apt search proj4

sudo apt install libproj-dev

建立qt工程

转载于

https://www.cnblogs.com/oloroso/p/5672837.html

https://www.bbsmax.com/A/A2dmLWg5en/

 

  • 4
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值