ST_GeomFromMARC21
Prev | 8.8.1. Well-Known Text (WKT) | Next

## 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:

- MARC21/XML 1.1

Availability: 3.3.0, requires libxml2 2.6+

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`.

Returned `POLYGON` geometries will always be clockwise oriented.

## Examples

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

                    SELECT
                    ST_AsText(
                        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>'));

                    st_astext
                    -------------------
                    POINT(-4.5 54.25)
                    (1 row)

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

                    SELECT
                    ST_AsText(
                        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>'));

                    st_astext
                    -----------------------------------------------------------------------------------------------------------------------
                    POLYGON((13.1 52.65,13.516666666666667 52.65,13.516666666666667 52.38333333333333,13.1 52.38333333333333,13.1 52.65))
                    (1 row)

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

                    SELECT
                    ST_AsText(
                        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>'));
                                                                                            st_astext
                    -------------------------------------------------------------------------------------------------------------------------------------------------------------
                    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))
                    (1 row)

## See Also

ST_AsMARC21

Prev | Up | Next
ST_GeomFromEWKT | Home | ST_GeometryFromText