1

ユーザーがシェイプファイルをアップロードして postGIS データベースにインポートできるようにする PHP スクリプトを開発しようとしています。

まず第一に、変換部分についてはshp2pgsql、シェープファイルをpostgresqlテーブルに変換するために使用できるAFAIKです。exec()コマンドを使用したくないので、変換を行う別の方法があるかどうか疑問に思っていました。

また、数十の一意の名前付きテーブルを必要としない方法でデータを保存するというアイデアも歓迎します。

4

4 に答える 4

2

シェープファイルの変換にはpostgresqlのバイナリを使うしかないようです。それは実際には悪い選択ではありませんexec()が、PHP ネイティブ関数またはそれを行うための apache モジュールがあれば、むしろ使用したくありません! ただし、exec利用可能な唯一の健全なオプションのようです。だから私はそれを使うつもりです。何恨みっこない!:)

最後の部分については、別の質問であり、個別に質問する必要があります。とはいえ、他に方法がないのではないかと心配しています。

UPDATE の 例を追加

$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目的のシェープファイルへのパスです
  • $tblnameテーブルに付けたい名前です
于 2013-07-12T11:04:18.177 に答える
1

ここから PHP シェープファイル リーダー プラグインを使用してシェープファイルをロードすることに関する このブログ投稿を参照してください。http://www.phpclasses.org/package/1741-PHP-Read-vector-data-from-geographic-shape-files.html . このブログ投稿では、バックエンドで PHP を使用して Flash アプリのデータを読み込むことに焦点を当てていますが、Flash の部分は無視して、必要に応じて PHP の部分を使用できるはずです。

シェープファイルからデータをロードしたら、ジオメトリを WKT 文字列に変換し、ST_GeomFromText またはその他の PostGIS 関数を使用してデータベースに格納できます。

シェープファイルの一意の列に関しては、それがアドホック シェープファイル属性を格納し、そのデータを取得する最も簡単な方法であることがわかりました。ただし、「タプル」システムを使用して属性を文字列に変換し、属性名やタイプを気にしない場合は、任意の名前の列 (col1、col2、col3 など) に格納できます。

名前と型が気になる場合は、さらに一歩進んで、シェープファイルの「スキーマ」として別のテーブルに保存できます。

于 2013-07-11T14:58:46.443 に答える
0
  • shp2pgsql を記述し、テキスト エディター (崇高なメモ帳など) を使用してそのパラメーターを定義します。
  • 各レイヤーのシェープファイル名をコピー、貼り付け、変更します。
  • バッチ ファイル .bat として保存します。
  • コマンド ウィンドウをプルアップします。
  • yu .bat ファイルが保存されているディレクトリをプルアップします。
  • Enter キーを押すと、すべてのシェープファイルのコードが実行され、コードの記述で定義したデータベースにアップロードされます。
  • qgis を使用し、postgis ウィンドウに移動して接続を押します。

これでシェープファイルの準備が整い、レイヤーとしてマップに追加できるようになりました。空間参照が実行前のものと一致していることを確認してください。それは理にかなっていますか?それが最速の方法に役立ったことを願っています。

于 2014-08-15T07:41:16.613 に答える
0

eval()OPと同じものを探していて、外部ツールにも依存したくない人の利益のために、この回答を追加します。

2019 年 8 月の時点で、私が数年間開発および保守してきた無料のオープン ソース PHP ライブラリであるPHP Shapefileを使用できます。このライブラリは、任意の ESRI Shapefile を読み書きし、WKT および GeoJSON との間でネイティブに変換できます。パーティ依存。

PostGIS 関数で使用する WKT とST_GeomFromText()、単純な を実行するためのすべてのデータを含む配列を提供する私のライブラリを使用するとINSERT、このタスクは簡単で高速かつ安全になり、 eval()を必要としません。

于 2019-08-30T15:52:07.383 に答える