从.prj文件中识别epsg代码

sridentif的Python项目详细描述


sridentify是一个命令行实用程序和python api,用于从通常与"esri
shapefiles<"相关联的"epsg注册表代码"文件中快速识别"epsg注册表代码"。https://en.wikipedia.org/wiki/shapefile>;`\它附带了一个
sqlite数据库,其中包含"众所周知的
文本<;https://en.wikipedia.org/wiki/well-known\u-text\u-representation\u-coordinate\u-reference\u-systems>;`\u字符串到epsg
代码的映射,其中大部分是从"一个esri
网站<手动获取和清除的;但是,http s://developers.arcgis.com/javascript/jshelp/pcs.html>;`如果api返回一个精确的
匹配,则返回该代码并将其保存到sqlite数据库。处理
当前计划了几个部分匹配,但尚未实现。在命令行上运行"sridentify"时,可以使用"n"或"no remote api"标志禁用此功能,或者在使用python api时使用"call_remote api=false"实例化此功能。

`"sridentify"是用python编写的,兼容2和3,并且没有外部依赖关系。



如果
``sridentify``试图将从``prj2epsg`` api获取的新结果保存到数据库中,则运行``sridentify``必须对sqlite数据库具有写权限。在大多数linux系统``pip install--user``上,将安装到`$home/.local`,并将可执行脚本
位于`$home/.local/bin``。如果要运行``sridentify`
,而不必指定可执行文件的完整位置,则应将此添加到`$path``中。在OS X上的"pip install——user"应该将其安装到您的"`$path`"中已有的某个位置,但这可能取决于python和/或pip是如何安装的。

windows
^^^^^^^

`anaconda<;https://anaconda.com>;``在Windows上安装"sridentify``是您的最佳选择。假设您已经安装了anaconda,那么启动anaconda提示符(应该可以在anaconda下的"开始"菜单中找到)并运行"pip install sridentify"应该可以工作,并使"sridentify"可执行文件在您的"路径%path%"上可用。如果您不想或不能使用anaconda,您还应该能够在全系统或任何虚拟环境中使用"setuptools<;https://packaging.python.org/tutorials/installing packages/>;`.

quickstart
--


>命令行用法
--




>用法:sridentify[-h][-n]prj


可选参数:
-h,--help显示此帮助消息并退出
-n,--如果在数据库



Cookbook
^^^^^^^^^

代码::bash

$sridentify seattle_land_use.prj
2285


示例与"postgis<;http://postgis.net/>;"附带的"shp2pgsql"命令行实用程序一起使用。假设您有一个名为"Seattle"的Postgis启用数据库,并且您有一个名为"Seattle土地利用"的形状文件,您希望将其导入该数据库,但不确定形状文件使用的空间投影是:

$shp2pgsql-s$(sridentifSeattle土地利用.prj)-g-西雅图_如果在数据库中找不到匹配项,请不要调用prj2epsg.org API(例如,如果在脚本中运行或API没有响应)::

$sridentify--没有远程API Seattle土地使用.prj

您可以在脚本中使用"sridentify-n"来跳过为那些与数据库中任何内容都不匹配的人调用api,以提高速度(还有礼貌地说,不要在免费的prj2epsg.org服务上浪费时间!)。例如:

…代码::bash

/usr/bin/env bash

for p in$(查找。-name"*.prj")
如果[[!-z"$epsg"]
然后
shp2pgsql-s$epsg-g the_geom-id"${p/prj/shp}"psql-d my_db_u name
否则
将不匹配的prj记录到文件中
回显"找不到$p的epsg代码">;bulk_import.log
fi
done


python api用法
----

……代码::python

>;>;从sridentify导入sridentify

>;>;从文件系统中读取.prj文件
>;>;ident=sridentify()
>;>;ident.从文件('/path/到/西雅图土地使用.prj')
>;>;ident.get懔epsg()
2285

>;懔直接粘贴知名文本字符串
>;>ident=sridentify(prj=""projcs["nad懔u1983懔u stateplane懔u washington懔u north懔fips懔u4601懔ft","geogcs["gcs懔u north懔u american懔u1983",datum["d懔u north懔american懔u1983",球体["6378137.0298.257222101]],质数["格林威治",0.0],单位["度",0.0174532925199433]],投影["兰伯特共形圆锥",参数["假东距",1640416.66666667],参数["假北距",0.0],参数["中央子午线",-120.8333333333333],参数["标准平行圆锥",47.5],参数["Standard_Parallel嫒u 2",48.73333333333333],参数["Latitude嫒u of嫒u origin",47.0],单位["Foot嫒u US",0.3048006096012192]]")
>;>ident.get嫒epsg()
2285

>;
ident=sridentify(call_remote_api=false)
>;>;ident.from_file('foo.prj')
>;>;ident.get_epsg();将不返回任何值
>;>;

>;>;使用strict=false实例化以记录错误并返回任何值
>;>;而不是提升尝试读取有问题的文件时出现异常。
>;>;ident=sridentify(strict=false)
>;>;示例:意外尝试读取二进制文件
>;>;ident.from廑u file('Seattle廑u land廑u use.shp');这将记录错误消息
>;>;ident.get_epsg()将返回none
>;>ident=sridentify(strict=true)默认值
>;>ident.from_file('Seattle_land_use.shp')
>;>#将引发UnicodedeCoderror:"UTF-8"编解码器无法解码位置10中的字节0x88:无效的起始字节

>;\gt;将数据库中的WKT字符串写入文件
>;>;ident=sridentify()
>;>;ident.from(4269)
>;识别到prj('/path/to/4269.prj')





background
----


>越来越多的政府和组织在
开放数据门户上向公众提供其地理信息系统数据。地方政府通常在"地图投影"中存储和使用地理信息系统数据,https://en.wikipedia.org/wiki/map-u-projection>;``最适合它们在地球上的位置。对于美国来说,这通常是"国家平面坐标系"https://en.wikipedia.org/wiki/state_plane_coordinate_system>;`。其他常用系统是"通用横轴墨卡托坐标系"r一个高度本地化的系统,仅在实体的地理边界内精确。


``sridentify``不意味着是实际
epsg数据库。如果这是您所需要的,那么您可能正在寻找类似"python epsg<;https://github.com/geo data/python epsg>;"这样的内容,而"sridentify"是指那些希望快速识别形状文件的epsg代码的人,特别是"导入postgis<;http://postgis.net/docs/manual-2.2/using_postgis_dbmanagement.html shp2pgsql_usage>;`。当然,您可以使用"ogr2ogr<;http://www.gdal.org/ogr2ogr.html>;`\uuu
将所有内容转换为对Web友好的投影,例如:

。代码::bash

$ogr2ogr-f postgresql-t廑u srs epsg:4326 pg:dbname=Seattle-Seattle廑u land廑use.shp

理想情况下,您可以将原始数据存储在其原始坐标系中,然后根据需要转换副本。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
在Esper中声明Classtype实例变量并调用实例方法时未调用java实例方法   java Android真的很慢   macos在Mac上用Java播放声音   java如何在springboot中生成clientid和clientsecret并存储在数据库中?   返回假条件的java方法   数组在Java中截断同步ArrayList的正确方法   java HashMap<Long,String>和HashMap<>之间有什么区别?   正在寻找允许按名称读取列的java CSV库   HQL Hibernate查询中的java左连接   java以编程方式添加可绘制图像的最佳方法是什么?   已使用NetworkImageView下载的安卓加载图像上的java截击不起作用   java CORBA通知订阅(错误:org.omg.CORBA.MARSHAL:vmcid:0x0次要代码:0已完成:否)   Java BufferedReader openvms   java是搜索字符串中的一个字母并在字母前加上“a”的最佳算法?   由于测试依赖关系,java Gradle Spring云流项目未生成   Java程序中的数组ArrayIndexOutOfBoundsException,用于检查double是否为负数   java Android/RxJava如何链接网络请求并在失败时重试   java告诉OpenEJB忽略MDB   java如何在不迁移的情况下在room数据库中添加表