2016-01-16 6 views
6

ich eine Postgres/PostGIS Anweisung wie folgt zu lesen:Was ist das "E" vor einer Postgres-Zeichenfolge?

SELECT ST_AsBinary(
ST_GeomFromWKB(
    E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%[email protected]', 
    4326 
) 
); 

Das schafft oben etwas von einem Well-Known Binary (WKB). Ich habe die spezifische Art des Zitierens hier nicht gesehen, wo die Schnur mit einem E vor dem Anfangszitat single zitiert wird.

Wie heißt dieses Format? Und was sind die Formatierungsregeln dafür? z.B. ist das 336%[email protected] ganz am Ende spezielle oder nur ein Binärwert?

Dies ist mit Postgres9.3/9.4; PostGIS 2.1.

Antwort

7

Gemäß der PostgreSQL-Dokumentation http://www.postgresql.org/docs/9.0/static/sql-syntax-lexical.html (Hervorhebung von mir)

PostgreSQL akzeptiert auch "Flucht" String-Konstanten, die eine Erweiterung der SQL-Standards sind. Eine Escape-String-Konstante wird spezifiziert, indem der Buchstabe E (Groß- oder Kleinschreibung) unmittelbar vor dem Eröffnungszitat, z.B. E'foo ', geschrieben wird. (Wenn Sie eine Escapezeichenfolge über Zeilen hinweg fortsetzen, schreiben Sie E nur vor dem ersten Anführungszeichen.) Innerhalb einer Escapezeichenfolge beginnt ein umgekehrter Schrägstrich() eine C-ähnliche Backslash-Escape-Sequenz, in der die Kombination aus Backslash und Folgezeichen (s repräsentieren) Wert eines speziellen Byte

Die Verwendung von \\ in der Zeichenfolge bedeutet, dass es eine Escape-Sequenz ist zu entkommen, wahrscheinlich sicher beim Transport und die Lagerung in einer .sql Datei zu sein. Die wörtlich String übergeben tatsächlich in die ST_GeomFromWKB Funktion wird sein:

\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%[email protected] 

Diese Sequenzen von 3 oder 4 Zeichen zwischen Schrägstriche würde dann durch ST_GeoFromWKB direkt interpretiert werden.

Die Dokumentation für ST_GeoFromWKB (http://postgis.org/docs/ST_GeomFromWKB.html) heißt es:

Die ST_GeomFromWKB Funktion nimmt eine bekannte binäre Darstellung einer Geometrie und eine räumliche Bezugssystem-ID (SRID) und erstellt eine Instanz der geeigneten Geometrie Art. Diese Funktion spielt die Rolle der Geometry Factory in SQL. Dies ist ein alternativer Name für ST_WKBToSQL.

Leider wird nicht angegeben, welches Format genau die "bekannte binäre Darstellung" tatsächlich ist.

Es stellt sich heraus, dass der Inhalt der Zeichenfolge vom verwendeten Koordinatensystem abhängt, das durch den Parameter SRID angegeben wird. In diesem Fall 4326 entspricht WGS84: https://en.wikipedia.org/wiki/World_Geodetic_System#WGS84

Sie müssen weitere lesen und forschen, um das zu entwirren.

+0

Vielen Dank. Ich verstehe den '4326' SRID Teil. Aber nicht '304Q' und' 336% E @ '. Sie scheinen nicht wie Hexadezimalzahlen zu sein, wie die Wikipedia sagt: https://en.wikipedia.org/wiki/Well-known_text#Well-known_binary. Ich habe gerade eine andere Frage bei GIS.SE gefragt: http://gis.stackexchange.com/questions/177075/how-to-interpret-a-wkb-well-known-binary darüber. – tinlyx

2

Was Sie sehen nicht wie hexadezimal sieht, weil die byteaStringliteral in escape string syntax ist (was ziemlich veraltet ist heutzutage).

E'\\001\\001\\000\\000\\000\\321\\256B\\312O\\304Q\\300\\347\\030\\220\\275\\336%[email protected]' 

das gleiche wie "Standard konforme string":

'\001\001\000\000\000\321\256B\312O\304Q\300\347\030\220\275\336%[email protected]' 

Beide sind in "escape format", die effizienter als in "hex format" dargestellt werden kann:

'\x0101000000d1ae42ca4fc451c0e71890bdde254540' 

Sie können encode() and decode() zu Verwandle die eine Form in die andere.

Ich antwortete Ihre follow-up question on gis.SE mit mehr Details.

Verwandte Themen