我正在尝试开发一个 PHP 脚本,让用户上传 shapefile 以导入到 postGIS 数据库。
首先,对于转换部分,我们可以使用AFAIKshp2pgsql
将shapefile转换为postgresql表;我想知道是否有另一种进行转换的方法,因为我不想使用该exec()
命令。
我也会赞赏以不需要数十个唯一命名表的方式存储数据的任何想法。
我正在尝试开发一个 PHP 脚本,让用户上传 shapefile 以导入到 postGIS 数据库。
首先,对于转换部分,我们可以使用AFAIKshp2pgsql
将shapefile转换为postgresql表;我想知道是否有另一种进行转换的方法,因为我不想使用该exec()
命令。
我也会赞赏以不需要数十个唯一命名表的方式存储数据的任何想法。
除了使用 postgresql 的二进制文件来转换 shapefile 之外,似乎别无他法。虽然这不是一个糟糕的选择,但exec()
如果有 PHP 原生函数或 apache 模块来做,我宁愿不使用!但是,这听起来像是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 部分。
从 shapefile 加载数据后,您可以将几何图形转换为 WKT 字符串并使用 ST_GeomFromText 或其他 PostGIS 函数存储在数据库中。
关于 shapefile 的唯一列,我发现这是存储临时 shapefile 属性然后检索该数据的最直接方法。但是,如果您不关心属性名称或类型,您可以使用“元组”系统,并将属性转换为字符串,然后将它们存储在任意命名的列(col1、col2、col3 等)中。
如果您关心名称和类型,您可以更进一步,将它们作为 shapefile“模式”存储在另一个表中。
一切顺利,您的 shapefile 现已准备就绪,可以作为图层添加到地图中。确保空间参考与运行之前的空间参考相匹配。那有意义吗?我希望这有助于它最快的方式。
添加此答案只是为了任何正在寻找与 OP 相同并且不想依赖eval()
或外部工具的人的利益。
截至2019 年 8 月,您可以使用PHP Shapefile,这是我多年来一直在开发和维护的免费开源 PHP 库,它可以读取和写入任何 ESRI Shapefile 并将其本地转换为 WKT 和 GeoJSON,无需任何第三方党的依赖。
使用我的库,它提供WKT与 PostGISST_GeomFromText()
函数和一个包含所有数据的数组一起使用来执行一个简单INSERT
的. eval()