PostGIS
Name
ST_GeomFromMARC21 — Takes MARC21/XML geographic data as input and returns a PostGIS geometry object.
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+
|
|
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)