地图投影参数猜测脚本
项目描述
guessproj是一个 Python 脚本,它根据某些已知坐标系和未知坐标系中相同点的坐标计算制图投影或坐标系的未知参数。不过,您应该知道投影类型。该脚本还可以确定两个基准之间的转换参数。
该脚本在内部使用pyproj和scipy。使用最小二乘法,所以点越多,精度就越高。
支持的 Python 版本
支持 Python 2.6+ 和 3.3+。该脚本是用纯 Python 本身编写的,但依赖于一些不是的包。
安装
安装guessproj的最佳方法是使用 pip:
pip install guessproj
请注意,guessproj在尝试安装guessproj之前需要安装一些二进制依赖项。这些是GDAL和PROJ.4。如果您是 GIS 专家,您可能已经拥有这些库。您还需要它们的 Python 绑定(GDAL 绑定和pyproj)以及NumPy和SciPy包。pip工具将尝试自动安装这些包,但在大多数系统上,您需要以特定于平台的方式安装它们。
请注意,GDAL 是一个可选依赖项,但可能会在guessproj的未来版本中成为必需。
您可以下载源存档,解压缩并运行,而不是使用pip
python setup.py install
在解压后的目录中。您需要setuptools来执行此操作。
此外,您无需安装即可使用guessproj 。只需下载文件guessproj.py并像任何 Python 脚本一样运行它:
python guessproj.py --help
当然,您仍然需要安装依赖项。
输入数据格式
脚本的输入数据是一个文本文件,其中包含多行以空格分隔的值,每行代表一个点。
二维点的输入数据格式如下:
x1 y1 x2 y2 point name
3D点的输入数据格式如下:
x1 y1 z1 x2 y2 z2 point name
点名称可以包含空格,但不应以数字开头。如果该行以#开头,它将被忽略。
首先是已知坐标系中的坐标,其次是未知坐标系中的坐标。如果坐标系之间存在基准转换,则 3D 点最有用。
显然,点坐标值的个数必须不小于未知参数的个数才能确定。
坐标值支持十进制格式和度分秒格式(XXXdXX'XX.XXX" )。您可以使用逗号和句点来分隔小数部分。
命令行语法
用于运行脚本的命令行语法类似于PROJ.4库 附带的cs2cs实用程序。您应该指定PROJ.4格式的已知坐标系参数(此处称为projstring),未知系统的已知和未知参数,以及输入文件的路径。您可以在PROJ.4 文档中找到各种坐标系的确切参数。
未知参数在 projstring 中的所有其他参数中指定,唯一的区别是使用~符号而不是=。~符号后面的数值是参数值的初始近似值。对于+towgs84参数,您可以在任何(或所有)逗号分隔值之前指定~ 。组合=~与~相同。
例子:
guessproj +proj=longlat +ellps=WGS84 +datum=WGS84 +no_defs +to \ +proj=tmerc +ellps=krass +lat_0=0 +lon_0~44 +x_0=300000 +y_0~-4.7e6 \ +towgs84=23.57,-140.95,-79.8,0,0.35,0.79,-0.22 points.txt
+to参数之前的所有内容都是已知系统的 projstring(如果省略,则默认使用 WGS84 经度/纬度)。所有以+开头的其余参数都是未知系统的 projstring,其中未知参数的初始近似值用~标记。在此示例中,参数+lon_0和+y_0是未知的。最后一个参数是包含点坐标的输入文本文件的名称。
该脚本只能评估数字参数,因此您应该至少指定+proj和+ellps。还值得一提的是,某些参数具有相同(或几乎相同)的效果,因此这是一个坏主意,例如,将+lat_0和+y_0都指定为横向墨卡托投影的未知。在这种情况下,方程组将是不确定的。
选项
任何其他程序选项(不是 projstring 语法的一部分)都以-或--开头。
选项-h或--help打印一个简短的命令行引用并退出程序。
选项--encoding=ENCODING_NAME指定输入文件的编码(默认为 --encoding=utf-8)。
选项--proj或--proj4仅强制输出结果 projstring,抑制残差表。
选项--wkt强制以 OGC WKT 格式输出投影参数(需要 GDAL Python 绑定)。
选项--esri强制以 Esri WKT 格式输出投影参数(实验性,需要 GDAL Python 绑定)。
选项--pretty与--wkt 或--esri一起使用时强制进行漂亮的 WKT 格式。
输出
该程序的默认输出是一个 projstring,其中参数的近似值替换为脚本找到的确切值,以及每个点的残差列表。可以使用程序选项指定其他形式的输出。
如果安装了 GDAL 绑定,则 projstring 将被格式化,以便以规范化的形式表示。
测试
要使用 Python 2.7 或 3.3+ 运行单元测试,请在源目录中执行:
python -m unittest discover test
在 Python 2.6 中,您应该安装 unittest2 包并使用:
PYTHONPATH=. unit2 discover test
您也可以直接从test/目录运行脚本。
项目详情
下载文件
下载适用于您平台的文件。如果您不确定要选择哪个,请了解有关安装包的更多信息。