Name

ST_GeomFromMARC21 — Takes MARC21/XML geographic data as input and returns a PostGIS geometry object.

Synopsis

geometry ST_GeomFromMARC21 ( text marcxml );

Description

This function creates a PostGIS geometry from a MARC21/XML record, which can contain a POINT or a POLYGON. In case of multiple geographic data entries in the same MARC21/XML record, a MULTIPOINT or MULTIPOLYGON will be returned. If the record contains mixed geometry types, a GEOMETRYCOLLECTION will be returned. It returns NULL if the MARC21/XML record does not contain any geographic data (datafield:034).

LOC MARC21/XML versions supported:

Availability: 3.3.0, requires libxml2 2.6+

[Note]

The MARC21/XML Coded Cartographic Mathematical Data currently does not provide any means to describe the Spatial Reference System of the encoded coordinates, so this function will always return a geometry with SRID 0.

[Note]

Returned POLYGON geometries will always be clockwise oriented.

Examples

Converting MARC21/XML geographic data containing a single POINT encoded as hddd.dddddd

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <leader>00000nz a2200000nc 4500</leader>
    <controlfield tag="001">040277569</controlfield>
    <datafield tag="034" ind1=" " ind2=" ">
        <subfield code="d">W004.500000</subfield>
        <subfield code="e">W004.500000</subfield>
        <subfield code="f">N054.250000</subfield>
        <subfield code="g">N054.250000</subfield>
    </datafield>
</record>'
);
Output
POINT(-4.5 54.25)
Figure
Geometry figure for visual-st-geomfrommarc21-01

Converting MARC21/XML geographic data containing a single POLYGON encoded as hdddmmss

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <leader>01062cem a2200241 a 4500</leader>
    <controlfield tag="001">   84696781 </controlfield>
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a">a</subfield>
        <subfield code="b">50000</subfield>
        <subfield code="d">E0130600</subfield>
        <subfield code="e">E0133100</subfield>
        <subfield code="f">N0523900</subfield>
        <subfield code="g">N0522300</subfield>
    </datafield>
</record>'
);
Output
POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65))
Figure
Geometry figure for visual-st-geomfrommarc21-02

Converting MARC21/XML geographic data containing a POLYGON and a POINT:

Code
SELECT ST_GeomFromMARC21(
'<record xmlns="http://www.loc.gov/MARC21/slim">
    <datafield tag="034" ind1="1" ind2=" ">
        <subfield code="a">a</subfield>
        <subfield code="b">50000</subfield>
        <subfield code="d">E0130600</subfield>
        <subfield code="e">E0133100</subfield>
        <subfield code="f">N0523900</subfield>
        <subfield code="g">N0522300</subfield>
    </datafield>
    <datafield tag="034" ind1=" " ind2=" ">
        <subfield code="d">W004.500000</subfield>
        <subfield code="e">W004.500000</subfield>
        <subfield code="f">N054.250000</subfield>
        <subfield code="g">N054.250000</subfield>
    </datafield>
</record>'
);
Output
GEOMETRYCOLLECTION(POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65)), POINT(-4.5 54.25))
Figure
Geometry figure for visual-st-geomfrommarc21-03

See Also

ST_AsMARC21