ArcGIS的.prj文件生成proj4格式的字符串
ArcGIS的prj文件是一个专门用来描述坐标系投影的文件,里面定义了坐标系的名称、长短半轴、基准面、投影参数等一些其他重要的信息。proj4是C用语言编写的专门用来处理各个坐标系之间的转换的开源库。可以实现经纬度坐标转平面坐标或者两个不同的椭球体之间的坐标系转换,运算精度高,计算准确,在很多GIS项目和软件中都有使用。
那么既然都是描述坐标系的文件,如何在他们之间进行转换呢,下面举个例子:
PROJCS["Ain_el_Abd_UTM_Zone_38N",GEOGCS["GCS_Ain_el_Abd_1970",DATUM["D_Ain_el_Abd_1970",SPHEROID["International_1924",6378388.0,297.0]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",45.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0],AUTHORITY["EPSG",20438]
]
这是一个投影坐标系。
PROJCS:代表的是其投影坐标系。
投影名称是:Ain_el_Abd_UTM_Zone_38N
基准面信息:D_Ain_el_Abd_1970
椭球体:SPHEROID[“International_1924”,6378388.0,297.0]-长半轴和反扁率
单位:UNIT[“Degree”,0.0174532925199433]
PARAMETER:代表投影重要的参数信息
GEOGCS["GCS_Beijing_1954",DATUM["D_Beijing_1954",SPHEROID["Krasovsky_1940",6378245.0,298.3]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433],AUTHORITY["EPSG",4214]
]
这是一个经纬度坐标系。
GEOGCS:代表是其地理坐标系
基准面:D_Beijing_1954
椭球体:Krasovsky_1940
长半轴:6378245.0
反扁率:298.3
中央经线:PRIMEM[“Greenwich”,0.0] - 格林威治
单位:UNIT[“Degree”,0.0174532925199433]
自己写了一个转换工具,C++代码。
proj4其对应的参数信息:
投影参数:
Projection_Param proj_param_list[]=
{{ "False_Easting" , "x_0" },{ "False_Northing" , "y_0" },{ "Central_Meridian" , "lon_0" },{ "Latitude_Of_Origin" , "lat_0" },{ "Latitude_Of_Center" , "lat_0" },{ "Standard_Parallel_1" , "lat_ts" },{ "Standard_Parallel_2" , "lat_2" },{ "Latitude_Of_1st_Point" , "lat_1" },{ "Latitude_Of_2nd_Point" , "lat_2" },{ "Longitude_Of_1st_Point" , "lon_1" },{ "Longitude_Of_2nd_Point" , "lon_2" },{ "Scale_Factor" , "k" },{ "Azimuth" , "alpha" },{ "Longitude_Of_Center" , "lonc" },{ NULL , NULL }
};
投影名称:
Proj_Aliases proj_aliases_list[]=
{{"Aitoff", "aitoff" },{"Albers", "aea" },{"Azimuthal_Equidistant", "aeqd" },{"Bonne", "bonne" },{"Cassini", "cass" },{"Chamberlin_Trimetric", "chamb" },{"Craster_Parabolic", "crast" },{"Cylindrical_Equal_Area", "cea" },{"Eckert_I", "eck1" },{"Eckert_II", "eck2" },{"Eckert_III", "eck3" },{"Eckert_IV", "eck4" },{"Eckert_V", "eck5" },{"Eckert_VI", "eck6" },{"Equidistant_Conic", "eqdc" },{"Equidistant_Cylindrical", "eqc" },{"Plate_Carree", "eqc" },{"Gall_Stereographic", "gall" },{"Gauss_Kruger", "tmerc" },{"Gnomonic", "gnom" },{"Goode_Homolosine", "goode" },{"Hammer_Aitoff", "hammer" },{"Hotine_Oblique_Mercator_Azimuth_Center" , "merc" },{"Krovak", "krovak" },{"Lambert_Azimuthal_Equal_Area", "laea" },{"Lambert_Conformal_Conic", "lcc" },{"Loximuthal", "loxim" },{"Mercator", "merc" },{"Miller_Cylindrical", "mill" },{"Mollweide", "moll" },{"New_Zealand_Map_Grid", "nzmg" },{"Orthographic", "ortho" },{"Perspectice", "pconic" },{"Polyconic", "poly" },{"Quartic_Authalic", "qua_aut" },{"Robinson", "robin" },{"Sinusoidal", "sinu" },{"Stereographic", "stere" },{"Stereographic_South_Pole", "stere" },{"Double_Stereographic", "sterea" },{"Transverse_Mercator", "tmerc" },{"Two_Point_Equidistant", "tpeqd" },{"Universal_Polar_Stereographic", "ups" },{"Universal_Transverse_Mercator", "utm" },{"Van_der_Grinten_I", "vandg" },{"Winkel_I", "wink1" },{"Winkel_II", "wink2" },{"Winkel_Tripel", "wintri" },{"Hotine_Oblique_Mercator_Azimuth_Natural_Origin", "merc" },{"Hotine_Oblique_Mercator_Two_Point_Natural_Origin", "tpeqd" },{"Mercator_Auxiliary_Sphere", "merc" },{"Stereographic_North_Pole", "stere" },{"Transverse_Mercator_Complex", "tmerc" },{ NULL , NULL }
};
单位名称:
Uint uint_list[] =
{{ "Kilometer" , "km" },{ "Meter" , "m" },{ "Decimeter" , "dm" },{ "Centimeter" , "cm" },{ "Millimeter" , "mm" },{ "Foot_US" , "us-ft" },{ "Foot_Gold_Coast" , "us-ft" },{ "Degree" , "" },{ NULL , NULL }
};
一些重要的参数定义:
#define PKW_GEOGCS "GEOGCS" //地理坐标系 定椭球体类型
#define PKW_DATUM "DATUM" //大地基准面
#define PKW_SPHEROID "SPHEROID" //椭球体定义
#define PKW_PRIMEM "PRIMEM" //本初子午线
#define PKW_UNIT "UNIT" //单位
#define PKW_AUTHORITY "AUTHORITY" //权威定义
#define PKW_PROJCS "PROJCS" //投影定义 若是平面坐标则会定义这个关键字
#define PKW_PROJECTION "PROJECTION" //投影类型
#define PKW_PARAMETER "PARAMETER" //投影参数
主要解析过程:
prj_file prg_f;
char epsg[8]={0};
prg_f.load_doc( prj_path.c_str() );
char* str = prg_f.generate_proj4_str( epsg );
char* prj_file::generate_proj4_str( char* epsg_str )
{prj_text p_text( _doc_text );//获得投影类型char projetion_type[128] = { 0 };if ( p_text.coord_type() ){sprintf( projetion_type , "+proj=longlat " );}else{p_text.proj_type( projetion_type );char* proj_text = get_proj4_text( projetion_type );if ( strlen( proj_text ) == 0 ){printf( "没有此投影:%s\n%s\n" , projetion_type , _doc_path );//getchar();return "";}sprintf( projetion_type ,"+proj=%s " , proj_text );}sprintf( _proj4_str , projetion_type );//椭球体char a_str[32]={ 0 };char rf_str[32]={ 0 };p_text.ellipse( a_str , rf_str );char ellps[128] = { 0 };sprintf( ellps , "+a=%s +rf=%s " , a_str , rf_str );strcat( _proj4_str , ellps );//投影参数char pj_param[PROJ4_LEN] = { 0 };p_text.proj_param( pj_param );strcat( _proj4_str , pj_param );//单位char pj_uint[32] = { 0 };char* p_uint = p_text.uint( );if ( strlen( p_uint ) != 0 ){sprintf( pj_uint , "+uint=%s " , p_uint ); }strcat( _proj4_str , pj_uint );//七参数//if ( _k > 0 ){_k = 1.0 ;char param_7[128] = { 0 };sprintf( param_7 , "+towgs84=%f,%f,%f,%f,%f,%f,%f", -_dx , -_dy , -_dz , _rx , _ry , _rz , _k );strcat( _proj4_str , param_7 );}//ESPGchar* p_epsg = p_text.epsg();strcpy( epsg_str , p_epsg );delete[] p_epsg;p_epsg = NULL ;return _proj4_str;
}
源码下载
http://download.csdn.net/detail/wb175208/9734255
ArcGIS的.prj文件生成proj4格式的字符串相关推荐
- java转换CSV文件生成xml格式数据
注册CSDN快六个月了,之前一直是看园子里的文章,或者碰到问题时,进来查点资料,今天终于决定写一篇自己在园子里的blog. 好吧,鉴于水平太菜,就只记录过程,其中原理啥的并不是很明晰,所以此blog只 ...
- java 数据转成xml_java转换CSV文件生成xml格式数据
注册CSDN快六个月了,之前一直是看园子里的文章,或者碰到问题时,进来查点资料,今天终于决定写一篇自己在园子里的blog. 好吧,鉴于水平太菜,就只记录过程,其中原理啥的并不是很明晰,所以此blog只 ...
- 在Linux上将12导联心电文件生成PDF格式文件
1.把ECG文件和同名ini文件放在/usr/local/12ECGNew/20170504路径下, 2.打开命令执行窗口putty,进入以上目录, 3.执行 ./ECGAnalyserL 02453 ...
- 项目需求--将文件(html格式的字符串)转换为MultipartFile格式的文件然后转调第三方接口
网上看了很多,但是不符合需求不说,还有很多都不能用....自己就整理了下相关的代码,可能会有点乱,自己理解着看 根据url地址将文件转换成MultipartFile格式的文件 /*** @descri ...
- xml文件生成与下载
写在前面: 最近要做一个新的功能,点击按钮,可以根据数据生成对应的xml文件并保存.下面记录一下在做的过程的一些疑惑与问题(我就是太笨了,一些很简单的知识都不知道,不过通过这次跟蛋蛋的交流,解决了我的 ...
- 利用ArcGIS软件将csv文件转换为shp格式
对所有的HDF5文件提取自己所需要的信息之后,每一个csv文件都可以在ArcGIS中进行展点显示,但是我们所需要的不只是单个csv文件进行展点显示,我们需要将所有的csv文件进行展点显示以方便之后进行 ...
- python使用fpdf生成发票格式的pdf文件包含:文字、图片logo、表格、条形码等;
python使用fpdf生成发票格式的pdf文件包含:文字.图片logo.表格.条形码等: pip install fpdf #python使用fpdf生成发票格式的pdf文件包含:文字.图片logo ...
- python打包zip文件_python 解压文件,合并文件 打包成zip格式文件 生成MD5值
#!/usr/bin/env python #_*_encoding:utf-8 # 2018/05/29 #augustyang #2.0 ''' 解压文件,合并文件 打包成zip格式文件 生成MD ...
- 【Java】生成 .json格式文件工具类
package com.glodon.kgb.utils.json;import java.io.File; import java.io.FileOutputStream; import java. ...
- python修改文件格式为unix_软件测试技术之如何用python在Windows系统下,生成UNIX格式文件...
本文将带你了解软件测试技术之如何用python在Windows系统下,生成UNIX格式文件,希望对大家学测试技术有所帮助 如何用python在Windows系统下,生成UNIX格式文件 平时测试工作中 ...
最新文章
- 前后端交互,网络请求
- C#7.0之ref locals and returns (局部变量和引用返回,之前欠大家的,现在补上)
- JS重点语法及常用对象总结
- 不要以自己的想法来推测别人的行为
- 8086CPU写汇编的规则
- C语言 | 一维数组
- 乌班图apt添加阿里source
- 叶三《我们唱》-野孩子(眼望着北方)
- 技术宅改变世界 如何在12306买到下铺
- 高级软件工程课程总结
- laravel 入门指南
- 释放linux缓存 echo 1 > /proc/sys/vm/drop_caches
- 日本IT公司工作体验
- 「win工具」Win 上好用的效率神器Wox
- C#字节数组与字符串相互转换代码案例
- Scala进阶_函数式编程(过滤丶排序丶分组丶聚合)
- JS写一个简单的五星评价
- 医疗保健客户关系管理(CRM)-市场现状及未来发展趋势
- 椭圆算法加密,java实现
- codeforces The Artful Expedient(数学思维题)
热门文章
- 前端面试需要准备什么?
- win10提升性能的服务器,win10专业版设置优化提高系统性能图解
- 首台自主创新全空冷机组在三峡运行,图扑数字孪生机体
- NXP JN5169 电源管理和睡眠模式
- uva 11137 Ingenuous Cubrency
- 初识 PS CS6(八)___用内容识别比例缩放图像
- 电路分析 基础 电容、电感元件的串联与并联
- C#指定图片添加文字
- 教学:四步利用PHP study小皮面板在vscode上编辑php并运行
- ESP32+AMG8833+RGB屏240*320(ST7789)红外热成像