ST_GeomFromMARC21
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+
       
      | 
     |
| 
       
       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
         | 
    
       
      | 
     |
| 
       
       Returned
         | 
    
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)