ERROR 1: PROJ: proj_create_from_database: D:\Program File\release-1930-x64-gdal-3-6-3-mapserver-8-0-0\bin\proj7\share\proj.db contains DATABASE.LAYOUT.VERSION.MINOR = 0 whereas a number >= 2 is expected. It comes from another PROJ installation.
时间: 2024-04-20 16:25:50 浏览: 544
这个错误通常是由于你的PROJ数据库版本与安装的PROJ版本不匹配致的。要解决这个问题,你可以尝试以下几种方法:
1. 更新PROJ版本:你可以尝试更新PROJ到最新版本,以确保数据库版本与安装版本一致。你可以从PROJ的官方网站或者其他可信的资源获得最新版本。
2. 清除旧的PROJ数据库:如果你之前安装过其他版本的PROJ,可能会导致数据库版本不匹配。你可以尝试删除旧的PROJ数据库文件,然后重新安装最新版本的PROJ。
3. 检查环境变量:确保你的系统环境变量中没有设置其他PROJ路径。有时候系统会在不同的位置安装多个PROJ版本,如果环境变量设置了旧的路径,可能会导致版本冲突。
希望这些方法能够帮助你解决问题。如果问题仍然存在,请提供更多的信息,以便我能够给出更具体的建议。
相关问题
geodetic_to_gauss_trans(double lon, double lat, int zone_mode, double custom_longitude) { if ((lon >= -180 && lon <= 180) && (lat >= -90 && lat <= 90) && (zone_mode == -1 || zone_mode == 0 || zone_mode == 1) && (custom_longitude >= -180 && custom_longitude <= 180)) { switch (zone_mode) { case 1: if (lon >= 1.5) { zone_ = int((lon + 1.5) / 3); central_meridian_ = zone_ * 3; } if (lon < 1.5) { zone_ = int((lon + 1.5) / 3) + 120; central_meridian_ = zone_ * 3 - 360; } break; case -1: if (lon >= 0) { zone_ = int(lon / 6) + 1; central_meridian_ = zone_ * 6 - 3; } if (lon < 0) { zone_ = int(lon / 6) + 60; central_meridian_ = (zone_ * 6 - 3) - 360; } break; case 0: central_meridian_ = custom_longitude; break; } } else { x_ = 0; y_ = 0; return false; } std::string proj_string = "+proj=tmerc +lat_0=0 +lon_0=central_meridian +k=1 +x_0=500000 +y_0=0 +ellps=GRS80 +units=m +no_defs +type=crs"; std::string to_replace = "central_meridian"; std::string replace_with = std::to_string(central_meridian_); size_t pos = proj_string.find(to_replace); proj_string.replace(pos, to_replace.length(), replace_with); PJ_CONTEXT *C = proj_context_create(); PJ *P = proj_create(C, proj_string.c_str()); PJ *G = proj_crs_get_geodetic_crs(C, P); PJ_AREA *A = nullptr; const char *const *options = nullptr; PJ *G2P = proj_create_crs_to_crs_from_pj(C, G, P, A, options); PJ_COORD c_in{}; c_in.lpzt.z = 0.0; c_in.lpzt.t = HUGE_VAL; c_in.lp.lam = lon; c_in.lp.phi = lat; PJ_COORD c_out = proj_trans(G2P, PJ_FWD, c_in); x_ = c_out.enu.n; y_ = c_out.enu.e; // PJ_COORD c_inv = proj_trans(G2P, PJ_DIRECTION::PJ_INV, c_out); std::cout.precision(20); std::cout << std::fixed; std::cout << x_ << "," << y_ << std::endl; std::cout << std::fixed << c_inv.lp.lam << "," << c_inv.lp.phi << std::endl; proj_destroy(P); proj_destroy(G); proj_destroy(G2P); proj_context_destroy(C); return true; }
这段代码是一个函数,其功能是将一个经纬度坐标转换为高斯投影坐标系下的坐标。函数接收4个参数:经度、纬度、投影区域模式和自定义中央经线。其中,经度和纬度是输入参数,表示待转换的点坐标;投影区域模式和自定义中央经线是可选参数,用于指定采用哪种投影方式以及中央经线的位置。
在函数内部,首先对输入参数进行合法性判断,如果不合法则直接返回false。然后根据投影区域模式和自定义中央经线计算中央经线的位置,并构造高斯投影坐标系的参数字符串。接着,利用Proj库中的函数进行投影变换,将经纬度坐标转换为高斯投影坐标系下的坐标。最后,将计算得到的坐标存储在函数的成员变量x_和y_中,并返回true表示转换成功。
需要注意的是,这段代码中使用了Proj库进行投影变换,因此需要在项目中引入该库的头文件和链接库。
File "1.py", line 64, in <module> in_proj = pyproj.Proj(int='epsg:4326') File "/home/admin1/anaconda3/envs/CFANet/lib/python3.6/site-packages/pyproj/__init__.py", line 358, in __new__ return _proj.Proj.__new__(self, projstring) File "_proj.pyx", line 84, in _proj.Proj.__cinit__ RuntimeError: b'projection not named'
这个错误是由于在创建 pyproj.Proj 对象时传入的投影字符串(projstring)不正确导致的。根据你提供的代码,问题出现在第 64 行,其中你正在尝试使用 'epsg:4326' 这个投影字符串创建一个 pyproj.Proj 对象。
可能的原因是 'epsg:4326' 不是一个有效的投影名称。请确认你使用的投影名称是否正确。另外,你可以尝试使用其他有效的投影字符串来创建 pyproj.Proj 对象。
如果问题仍然存在,请提供更多代码和上下文信息,以便我更好地帮助你解决这个问题。
阅读全文