(GDAL-OGR)利用EPSG_Code创建wkt格式的坐标系描述

本文介绍如何在GDAL中使用EPSG_Code设置不同地理坐标系,包括地理坐标系和投影坐标系的定义方法,并提供了代码示例。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

上一篇中讲到如何提取las文件中的地理坐标系信息,提及EPSG_Code可以通过GDAL进行坐标系描述和转换,这里进行代码测试和详细介绍:

GDAL:

    再GDAL中,创建带有地理坐标的tif栅格文件或者shp矢量文件,都需要制定坐标系,我习惯使用wkt格式坐标系描述方法,(就是将坐标系信息用wkt格式表示)

GDALDataset* pCreateDataset = pDriver->Create(strFileFullPath.c_str(),nlmgWidth,nlmgHeight,ChannelNum,dataTypeForCreate,papszOptions);
pCreateDataset->SetProjection (strWkt)

    一般情况下我们可以通过如下方法获取指定坐标系的wkt描述:

                                        char *strWkt = NULL;
					if (Wgs84ORUTM == 0 )
					{
						OGRSpatialReference oSRS;						
						oSRS.SetWellKnownGeogCS("WGS84");						
						oSRS.exportToWkt(&strWkt);
						int a = oSRS.IsGeographic();
						int b = oSRS.IsProjected();
					}
					else if(Wgs84ORUTM == 1)
					{						
						OGRSpatialReference oSRS;
						oSRS.SetProjCS("UTM (WGS84) in northernhemisphere.");
						oSRS.SetWellKnownGeogCS("WGS84");						
						oSRS.SetUTM(UTMNum,TRUE);
						oSRS.exportToWkt(&strWkt);
						//strWkt ="PROJCS["UTM",GEOGCS["WGS 84",DATUM["WGS_1984",SPHEROID["WGS 84",6378137,298.257223563,AUTHORITY["EPSG",7030]],TOWGS84[0,0,0,0,0,0,0],AUTHORITY["EPSG",6326]],PRIMEM["Greenwich",0,AUTHORITY["EPSG",8901]],UNIT["DMSH",0.0174532925199433,AUTHORITY["EPSG",9108]],AXIS["Lat",NORTH],AXIS["Long",EAST],AUTHORITY["EPSG",4326]],PROJECTION["Transverse_Mercator"],PARAMETER["latitude_of_origin",0],PARAMETER["central_meridian",-81],PARAMETER["scale_factor",0.9996],PARAMETER["false_easting",500000],PARAMETER["false_northing",0]]";
					}			

但是上面的定义方法比较局限,默认GCS就是WGS84,PCS就是UTM;当我们从las文件中提取地理坐标系信息时,有可能会遇到各种各样的坐标系,为了提高接口的兼容性,我们利用EPSG_Code来传递坐标系信息,我们将las文件中获取的EPSG_Code传递给GDAL,然后用下面的方法获取wkt格式的坐标系描述,就可以生成相同坐地理坐标系的tif/shp等文件了;

        OGRSpatialReference oSRS;
	oSRS.importFromEPSG((int)4214);//北京54
	char* strWkt;
	oSRS.exportToWkt(&strWkt);
	printf("%s", strWkt);


对于EPSG_Code和GDAL的说明:

    通过测试和阅读说明发现,地理坐标系(GCS)最好只用GCS_开头的(既包含椭球面又指定了基准面),GCSE_开头的头没有指定基准面(Datum)只包含椭球面,测试只要GCS_开头的就能正确导入到OGR中;投影坐标系(PCS)就比较简单了,就是对应的那些code;

    另外,在使用GDAL导入EPSG_Code时需要将GDAL库目录下.../data目录中的文件全部拷贝到工程目录下,否则查询不到相应的EPSG_Code:




C:\Users\15444\AppData\Local\Programs\Python\Python311\Scripts>pip install GDAL Collecting GDAL Using cached gdal-3.11.3.tar.gz (878 kB) Installing build dependencies ... done Getting requirements to build wheel ... done Preparing metadata (pyproject.toml) ... done Building wheels for collected packages: GDAL Building wheel for GDAL (pyproject.toml) ... error error: subprocess-exited-with-error × Building wheel for GDAL (pyproject.toml) did not run successfully. │ exit code: 1 ╰─> [130 lines of output] C:\Users\15444\AppData\Local\Temp\pip-build-env-hy1ff_ep\overlay\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsWarning: `license` overwritten by `pyproject.toml` corresp(dist, value, root_dir) C:\Users\15444\AppData\Local\Temp\pip-build-env-hy1ff_ep\overlay\Lib\site-packages\setuptools\config\_apply_pyprojecttoml.py:82: SetuptoolsWarning: `extras_require` overwritten in `pyproject.toml` (optional-dependencies) corresp(dist, value, root_dir) Using numpy 2.3.1 running bdist_wheel running build running build_py creating build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdalconst.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdalnumeric.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal_array.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gdal_fsspec.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\gnm.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\ogr.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\osr.py -> build\lib.win-amd64-cpython-311\osgeo copying osgeo\__init__.py -> build\lib.win-amd64-cpython-311\osgeo creating build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal2tiles.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal2xyz.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalattachpct.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalcompare.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdalmove.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_calc.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_edit.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_fillnodata.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_merge.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_pansharpen.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_polygonize.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_proximity.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_retile.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\gdal_sieve.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\ogrmerge.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\ogr_layer_algebra.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\pct2rgb.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\rgb2pct.py -> build\lib.win-amd64-cpython-311\osgeo_utils copying gdal-utils\osgeo_utils\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils creating build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\array_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\base.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\batch_creator.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\color_palette.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\color_table.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\extent_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\gdal_argparse.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\numpy_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\osr_util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\progress.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\raster_creation.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\rectangle.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\util.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary copying gdal-utils\osgeo_utils\auxiliary\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils\auxiliary creating build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\assemblepoly.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\build_jp2_from_xml.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\classify.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\crs2crs2grid.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\densify.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\dump_jp2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\epsg_tr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\esri2wkt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\fft.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\fix_gpkg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2ogr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2vec.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gcps2wld.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal2grd.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalbuildvrtofvrt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalchksum.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalcopyproj.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalfilter.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalident.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalimport.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdalinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdallocationinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_auth.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_cp.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_create_pdf.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_ls.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_lut.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_minmax_location.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_mkdir.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_remove_towgs84.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_rm.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_rmdir.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\gdal_vrtmerge.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\get_soundg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\histrep.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\hsv_merge.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\jpeg_in_tiff_extract.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\load2odbc.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\loslas2ntv2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\magphase.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\make_fuzzer_friendly_archive.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\mkgraticule.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr2vrt.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogrinfo.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogrupdate.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr_build_junction_table.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\ogr_dispatch.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\rel.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tigerpoly.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tile_extent_from_raster.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\tolatlong.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_cloud_optimized_geotiff.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_geoparquet.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_gpkg.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\validate_jp2.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\val_repl.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\vec_tr.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\vec_tr_spat.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\wcs_virtds_params.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples copying gdal-utils\osgeo_utils\samples\__init__.py -> build\lib.win-amd64-cpython-311\osgeo_utils\samples running egg_info writing gdal-utils\GDAL.egg-info\PKG-INFO writing dependency_links to gdal-utils\GDAL.egg-info\dependency_links.txt writing entry points to gdal-utils\GDAL.egg-info\entry_points.txt writing requirements to gdal-utils\GDAL.egg-info\requires.txt writing top-level names to gdal-utils\GDAL.egg-info\top_level.txt reading manifest file 'gdal-utils\GDAL.egg-info\SOURCES.txt' writing manifest file 'gdal-utils\GDAL.egg-info\SOURCES.txt' running build_ext building 'osgeo._gdal' extension building 'osgeo._gnm' extension building 'osgeo._ogr' extension building 'osgeo._osr' extension building 'osgeo._gdalconst' extension building 'osgeo._gdal_array' extension error: Microsoft Visual C++ 14.0 or greater is required. Get it with "Microsoft C++ Build Tools": https://visualstudio.microsoft.com/visual-cpp-build-tools/ [end of output] note: This error originates from a subprocess, and is likely not a problem with pip. ERROR: Failed building wheel for GDAL Failed to build GDAL ERROR: Failed to build installable wheels for some pyproject.toml based projects (GDAL)
最新发布
07-23
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值