0

私はPostgisを試しています。ポイントを含むジオメトリ列を含むテーブルを追加し、その列にインデックスを付けたデータベースをセットアップしました。

私が奇妙に思うことの 1 つは、多くの場合、列のデータがクライアントでの表示用に変換されていないことです。

たとえば、これをシェルに貼り付けると

SELECT ST_MakePolygon(ST_GeomFromText('LINESTRING(75.15 29.53 1,77 29 1,77.6 29.5 1, 75.15 29.53 1)'));

私はこの結果を得る

    st_makepolygon                                                                                                       
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
 010300008001000000040000009A99999999C9524048E17A14AE873D40000000000000F03F00000000004053400000000000003D40000000000000F03F66666666666653400000000000803D40000000000000F03F9A99999999C9524048E17A14AE873D40000000000000F03F
(1 row)

私はこのようなものを得るべきではありませんか?

st_asewkt
-----------
POLYGON((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))

また、ジオメトリ列からポイントを選択すると、それらの生データも表示されます。

これが正しい場合、ジオメトリの内容を簡単に確認できるようにデータを変換するにはどうすればよいですか?

列のポイントを POINT(x,y,z) または同様のものとして表示できるようにしたいと思います。

この操作のようなものを実行すると興味深い

SELECT ST_Extent(geom) FROM towns WHERE town = 'BOSTON';

クライアントは私にこの結果を示します

    st_extent     
------------------
 BOX(10 10,10 10)
(1 row)
4

1 に答える 1

2

ジオメトリはコンパクトでロスレス形式であるため、よく知られているバイナリオブジェクトとしてデータベースに保存されます。このデータ型をクエリすると、質問に示されているように、16進テキスト表現にデコードされます。私が考えることができるデフォルトの出力動作を変更する唯一のハックは、キャストを再定義することです。

このハックでは、PostGISをメソッドpostgis.sqlではなくイネーブラースクリプトからインストールする必要がありCREATE EXTENSION postgis;ます。次に、キャストをからに再定義geometrytextます。

DROP CAST (geometry AS text);
CREATE CAST (geometry AS text) WITH FUNCTION ST_AsText(geometry) AS IMPLICIT;

これで、次の動作が表示されます。

SELECT '010300008001000000040000009A99999999C9524048E17A14AE87'
'3D40000000000000F03F00000000004053400000000000003D40000000000'
'000F03F66666666666653400000000000803D40000000000000F03F9A9999'
'9999C9524048E17A14AE873D40000000000000F03F'::geometry::text;

                             text
---------------------------------------------------------------
 POLYGON Z ((75.15 29.53 1,77 29 1,77.6 29.5 1,75.15 29.53 1))
(1 row)

::textただし、キャストでのみ機能します。これがないと、にキャストgeometrybyteaれます。これには、デフォルトで16進形式のテキストにキャストされます。

ただし、このハックはお勧めしません。人間が読めるWKT文字列が必要な場合は、SQLステートメントでST_AsTextを使用することを忘れないでください。また、WKTはいくつかのテキスト形式の1つであることに注意してください。その他については、マニュアルの「ジオメトリ出力」を参照してください。

于 2013-03-23T23:14:58.517 に答える