ユーザーがシェイプファイルをアップロードして postGIS データベースにインポートできるようにする PHP スクリプトを開発しようとしています。
まず第一に、変換部分についてはshp2pgsql
、シェープファイルをpostgresqlテーブルに変換するために使用できるAFAIKです。exec()
コマンドを使用したくないので、変換を行う別の方法があるかどうか疑問に思っていました。
また、数十の一意の名前付きテーブルを必要としない方法でデータを保存するというアイデアも歓迎します。
ユーザーがシェイプファイルをアップロードして postGIS データベースにインポートできるようにする PHP スクリプトを開発しようとしています。
まず第一に、変換部分についてはshp2pgsql
、シェープファイルをpostgresqlテーブルに変換するために使用できるAFAIKです。exec()
コマンドを使用したくないので、変換を行う別の方法があるかどうか疑問に思っていました。
また、数十の一意の名前付きテーブルを必要としない方法でデータを保存するというアイデアも歓迎します。
シェープファイルの変換には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
テーブルに付けたい名前ですここから 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 など) に格納できます。
名前と型が気になる場合は、さらに一歩進んで、シェープファイルの「スキーマ」として別のテーブルに保存できます。
これでシェープファイルの準備が整い、レイヤーとしてマップに追加できるようになりました。空間参照が実行前のものと一致していることを確認してください。それは理にかなっていますか?それが最速の方法に役立ったことを願っています。
eval()
OPと同じものを探していて、外部ツールにも依存したくない人の利益のために、この回答を追加します。
2019 年 8 月の時点で、私が数年間開発および保守してきた無料のオープン ソース PHP ライブラリであるPHP Shapefileを使用できます。このライブラリは、任意の ESRI Shapefile を読み書きし、WKT および GeoJSON との間でネイティブに変換できます。パーティ依存。
PostGIS 関数で使用する WKT とST_GeomFromText()
、単純な を実行するためのすべてのデータを含む配列を提供する私のライブラリを使用するとINSERT
、このタスクは簡単で高速かつ安全になり、悪 eval()
を必要としません。