使用PHP将shapefile存储到postgresql中

时间:2013-07-11 14:32:09

标签: php postgresql postgis shapefile

我正在尝试开发一个PHP脚本,让用户上传shapefile以导入到postGIS数据库。

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

我还会以不需要几十个单序列表的方式存储数据的任何想法。

4 个答案:

答案 0 :(得分:2)

似乎除了使用postgresql的二进制文件转换shapefile之外别无他法。虽然这不是一个糟糕的选择,但如果有本机函数或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是表格的理想名称

答案 1 :(得分:1)

请参阅this blog post有关使用PHP shapefile阅读器插件加载shapefile的信息。 http://www.phpclasses.org/package/1741-PHP-Read-vectorial-data-from-geographic-shape-files.html。博客文章重点介绍如何在后端使用PHP来加载Flash应用程序的数据,但您应该能够忽略Flash部分并根据需要使用PHP部分。

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

关于shapefile的唯一列,我发现这是存储ad-hoc shapefile属性然后检索该数据的最直接的方法。但是,您可以使用“元组”系统,并将属性转换为字符串,然后将它们存储在任意命名的列(col1,col2,col3等)中,如果您不关心属性名称或类型。

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

答案 2 :(得分:0)

  • 编写shp2pgsql并使用文本编辑器定义其参数,即 崇高的记事本等。
  • 复制,粘贴和更改每个的shapefile名称 层。
  • 另存为批处理文件.bat。
  • 拉起命令窗口。
  • 拉出保存yu .bat文件的目录。
  • 按Enter键,然后运行所有shapefile的代码,它们将上传到 您在编写代码时定义的数据库。
  • 使用qgis,转到postgis窗口并点击连接。

你很高兴你的shapefile已经准备就绪,可以作为图层添加到你的地图中。确保空间参考与运行之前的空间参考相匹配。那有意义吗?我希望以最快的方式帮助它。

答案 3 :(得分:0)

添加此答案仅是为了寻求与OP相同且不想依赖eval()或外部工具的人。

截至 2019年8月,您可以使用PHP Shapefile,这是我一直在开发和维护的免费开放源代码PHP库,可以读写任何ESRI Shapefile和无需任何第三方依赖性即可将其从WKT和GeoJSON本地进行转换。

使用我的库,该库提供了与PostGIS ST_GeomFromText()函数一起使用的WKT以及包含所有数据的数组以执行简单的INSERT,从而使该任务变得微不足道,快速且安全,而无需邪恶 eval()