使用PHP将shapefile存储到postgresql中


Storing a shapefile into postgresql using PHP

我正在尝试开发一个PHP脚本,让用户上传要导入到postGIS数据库的形状文件。

首先,对于转换部分,AFAIK我们可以使用shp2pgsql将shapefile转换为postgresql表;我想知道是否有其他方法可以进行转换,因为我不希望使用exec()命令。

我还想了解一下以一种不需要几十个唯一命名表的方式存储数据的任何想法。

似乎没有其他方法,只能使用postgresql的二进制文件来转换shapefile。虽然这并不是一个糟糕的选择,但如果有PHP本机函数或apache模块可以实现,我宁愿不使用exec()!然而,听起来exec是唯一合理的选择。所以我要用它。没有痛苦的感觉!:)

关于最后一部分,这是一个不同的问题,应该单独问。尽管如此,恐怕没有其他办法了

更新 添加的示例

$queries = shell_exec("shp2pgsql -s ".SRID." -c $shpfilpath $tblname")
                    or respond(false, "Error parsing the shapfile.");
pg_query($queries) or respond(false, "Query failed!");
  • SRID是一个包含"SRID"的常量
  • $shpfilpath是指向所需ShapeFile的路径
  • $tblname是表所需的名称

请参阅这篇关于使用PHP shapefile阅读器插件加载shapefile的博客文章。http://www.phpclasses.org/package/1741-PHP-Read-vectorial-data-from-geographic-shape-files.html.这篇博客文章的重点是在后端使用PHP为Flash应用程序加载数据,但您应该能够忽略Flash部分,并根据需要使用PHP部分。

从形状文件加载数据后,可以将几何图形转换为WKT字符串,并使用ST_GeomFromText或其他PostGIS函数存储在数据库中。

关于形状文件的唯一列,我发现这是存储特定形状文件属性然后检索数据的最简单方法。但是,如果不关心属性名称或类型,可以使用"元组"系统,将属性转换为字符串,然后将它们存储在任意命名的列(col1、col2、col3等)中。

如果您关心名称和类型,可以更进一步,将它们作为shapefile"schema"存储在另一个表中。

  • 编写shp2pgsql并使用文本编辑器ie定义其参数精美的记事本等
  • 复制、粘贴并更改每个的形状文件名层
  • 另存为批处理文件.bat
  • 拉起命令窗口
  • 调出保存yu.bat文件的目录
  • 点击回车键,它将运行所有形状文件的代码,它们将上传到您在编写代码时定义的数据库
  • 使用qgis,转到postgis窗口并点击connect

你可以开始了,你的形状文件现在已经准备好了,可以作为图层添加到你的地图中。在运行之前,确保空间参考与它们匹配。这有意义吗?我希望这是最快的方法。

添加这个答案只是为了那些正在寻找与OP相同的答案并且不想依赖eval()或外部工具的人的利益。

截至2019年8月,您可以使用PHP Shapefile,这是一个我开发和维护了几年的免费开源PHP库,可以读取和写入任何ESRI Shapefile并将其从WKT和GeoJSON本地转换,而无需任何第三方依赖。

使用我的库,它提供了WKT与PostGIS ST_GeomFromText()函数一起使用,以及一个包含所有数据的数组来执行简单的INSERT,使这项任务变得琐碎、快速和安全,而不需要邪恶eval()