1

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

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

我也会赞赏以不需要数十个唯一命名表的方式存储数据的任何想法。

4

4 回答 4

2

除了使用 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是表的所需名称
于 2013-07-12T11:04:18.177 回答
1

请参阅这篇关于使用 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“模式”存储在另一个表中。

于 2013-07-11T14:58:46.443 回答
0
  • 编写您的 shp2pgsql 并使用文本编辑器(即 sublime notepad 等)定义其参数。
  • 复制、粘贴和更改每个图层的 shapefile 名称。
  • 另存为批处理文件 .bat。
  • 拉起命令窗口。
  • 拉出保存 yu .bat 文件的目录。
  • 点击回车,它将运行所有 shapefile 的代码,它们将上传到您在编写代码时定义的数据库。
  • 使用 qgis,转到 postgis 窗口并点击连接。

一切顺利,您的 shapefile 现已准备就绪,可以作为图层添加到地图中。确保空间参考与运行之前的空间参考相匹配。那有意义吗?我希望这有助于它最快的方式。

于 2014-08-15T07:41:16.613 回答
0

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

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

使用我的库,它提供WKT与 PostGISST_GeomFromText()函数和一个包含所有数据的数组一起使用来执行一个简单INSERT的. eval()

于 2019-08-30T15:52:07.383 回答