我正在尝试开发一个PHP脚本,让用户上传shapefile以导入到postGIS数据库。
首先,对于转换部分,AFAIK我们可以使用shp2pgsql
将shapefile转换为postgresql表;我想知道是否有另一种方式进行转换,因为我不想使用exec()
命令。
我还会以不需要几十个单序列表的方式存储数据的任何想法。
答案 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)
你很高兴你的shapefile已经准备就绪,可以作为图层添加到你的地图中。确保空间参考与运行之前的空间参考相匹配。那有意义吗?我希望以最快的方式帮助它。
答案 3 :(得分:0)
添加此答案仅是为了寻求与OP相同且不想依赖eval()
或外部工具的人。
截至 2019年8月,您可以使用PHP Shapefile,这是我一直在开发和维护的免费开放源代码PHP库,可以读写任何ESRI Shapefile和无需任何第三方依赖性即可将其从WKT和GeoJSON本地进行转换。
使用我的库,该库提供了与PostGIS ST_GeomFromText()
函数一起使用的WKT以及包含所有数据的数组以执行简单的INSERT
,从而使该任务变得微不足道,快速且安全,而无需邪恶 eval()
。