adiwg-mdtranslator 0.8.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +7 -0
- data/.gitignore +23 -0
- data/.travis.yml +7 -0
- data/Gemfile +4 -0
- data/LICENSE.txt +24 -0
- data/README.md +31 -0
- data/Rakefile +13 -0
- data/adiwg-mdtranslator.gemspec +31 -0
- data/bin/mdtranslator +164 -0
- data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
- data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
- data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
- data/lib/adiwg/mdtranslator/validator.rb +43 -0
- data/lib/adiwg/mdtranslator/version.rb +7 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
- data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
- data/lib/adiwg/mdtranslator.rb +97 -0
- data/lib/adiwg-mdtranslator.rb +1 -0
- data/mdtranslator.rb +178 -0
- data/test/adiwgJson_full_test_example.json +1717 -0
- data/test/adiwgJson_template.json +977 -0
- data/test/dev.rb +32 -0
- data/test/tc_translation.rb +31 -0
- metadata +317 -0
|
@@ -0,0 +1,140 @@
|
|
|
1
|
+
# ISO <<Class>> Multi Geometry
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-12 original script
|
|
6
|
+
# Stan Smith 2013-11-13 add line string
|
|
7
|
+
# Stan Smith 2014-05-30 modified for version 0.5.0
|
|
8
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
9
|
+
|
|
10
|
+
require ADIWG::Mdtranslator.reader_module('module_point', $response[:readerVersionUsed])
|
|
11
|
+
require 'class_point'
|
|
12
|
+
require 'class_lineString'
|
|
13
|
+
require 'class_polygon'
|
|
14
|
+
|
|
15
|
+
class MultiGeometry
|
|
16
|
+
|
|
17
|
+
def initialize(xml)
|
|
18
|
+
@xml = xml
|
|
19
|
+
end
|
|
20
|
+
|
|
21
|
+
def writeXML(hGeoElement)
|
|
22
|
+
|
|
23
|
+
# classes used
|
|
24
|
+
intMetadataClass = InternalMetadata.new
|
|
25
|
+
pointClass = Point.new(@xml)
|
|
26
|
+
lineClass = LineString.new(@xml)
|
|
27
|
+
polygonClass = Polygon.new(@xml)
|
|
28
|
+
|
|
29
|
+
|
|
30
|
+
# gml:MultiGeometry attributes
|
|
31
|
+
attributes = {}
|
|
32
|
+
|
|
33
|
+
# gml:MultiGeometry attributes - gml:id - required
|
|
34
|
+
mGeoID = hGeoElement[:elementId]
|
|
35
|
+
if mGeoID.nil?
|
|
36
|
+
$idCount = $idCount.succ
|
|
37
|
+
mGeoID = 'multiGeo' + $idCount
|
|
38
|
+
end
|
|
39
|
+
attributes['gml:id'] = mGeoID
|
|
40
|
+
|
|
41
|
+
# gml:MultiGeometry attributes - srsDimension
|
|
42
|
+
s = hGeoElement[:elementGeometry][:dimension]
|
|
43
|
+
if !s.nil?
|
|
44
|
+
attributes[:srsDimension] = s
|
|
45
|
+
end
|
|
46
|
+
|
|
47
|
+
# gml:MultiGeometry attributes - srsName
|
|
48
|
+
s = hGeoElement[:elementSrs][:srsName]
|
|
49
|
+
if !s.nil?
|
|
50
|
+
attributes[:srsName] = s
|
|
51
|
+
end
|
|
52
|
+
|
|
53
|
+
@xml.tag!('gml:MultiGeometry',attributes) do
|
|
54
|
+
|
|
55
|
+
# multi geometry - description
|
|
56
|
+
s = hGeoElement[:elementDescription]
|
|
57
|
+
if !s.nil?
|
|
58
|
+
@xml.tag!('gml:description',s)
|
|
59
|
+
elsif $showAllTags
|
|
60
|
+
@xml.tag!('gml:description')
|
|
61
|
+
end
|
|
62
|
+
|
|
63
|
+
# multi geometry - name
|
|
64
|
+
s = hGeoElement[:elementName]
|
|
65
|
+
if !s.nil?
|
|
66
|
+
@xml.tag!('gml:name',s)
|
|
67
|
+
elsif $showAllTags
|
|
68
|
+
@xml.tag!('gml:name')
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
# GeoJSON multi-objects need to be broken into independent
|
|
72
|
+
# ... geometry members for ISO representation
|
|
73
|
+
geoType = hGeoElement[:elementGeometry][:geoType]
|
|
74
|
+
case geoType
|
|
75
|
+
when 'MultiPoint'
|
|
76
|
+
aPoints = hGeoElement[:elementGeometry][:geometry]
|
|
77
|
+
if !aPoints.empty?
|
|
78
|
+
@xml.tag!('gml:geometryMembers') do
|
|
79
|
+
aPoints.each do |aCoords|
|
|
80
|
+
intPoint = intMetadataClass.newGeoElement
|
|
81
|
+
intPoint[:elementSrs] = hGeoElement[:elementSrs]
|
|
82
|
+
intPoint[:elementGeometry] = Adiwg_Point.unpack(aCoords,'Point')
|
|
83
|
+
pointClass.writeXML(intPoint)
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
when 'MultiLineString'
|
|
88
|
+
aLines = hGeoElement[:elementGeometry][:geometry]
|
|
89
|
+
if !aLines.empty?
|
|
90
|
+
@xml.tag!('gml:geometryMembers') do
|
|
91
|
+
aLines.each do |aCoords|
|
|
92
|
+
intLine = intMetadataClass.newGeoElement
|
|
93
|
+
intLine[:elementSrs] = hGeoElement[:elementSrs]
|
|
94
|
+
intLine[:elementGeometry] = Adiwg_LineString.unpack(aCoords,'LineString')
|
|
95
|
+
lineClass.writeXML(intLine)
|
|
96
|
+
end
|
|
97
|
+
end
|
|
98
|
+
end
|
|
99
|
+
when 'MultiPolygon'
|
|
100
|
+
aPolygons = hGeoElement[:elementGeometry][:geometry]
|
|
101
|
+
if !aPolygons.empty?
|
|
102
|
+
@xml.tag!('gml:geometryMembers') do
|
|
103
|
+
aPolygons.each do |aCoords|
|
|
104
|
+
intPolygon = intMetadataClass.newGeoElement
|
|
105
|
+
intPolygon[:elementSrs] = hGeoElement[:elementSrs]
|
|
106
|
+
intPolygon[:elementGeometry] = Adiwg_LineString.unpack(aCoords,'Polygon')
|
|
107
|
+
polygonClass.writeXML(intPolygon)
|
|
108
|
+
end
|
|
109
|
+
end
|
|
110
|
+
end
|
|
111
|
+
end
|
|
112
|
+
|
|
113
|
+
# multi geometry - geometry members
|
|
114
|
+
# GeoJSON GeometryCollection
|
|
115
|
+
# GeoJSON FeatureCollection
|
|
116
|
+
case geoType
|
|
117
|
+
when 'MultiGeometry'
|
|
118
|
+
aGeometry = hGeoElement[:elementGeometry][:geometry]
|
|
119
|
+
if !aGeometry.empty?
|
|
120
|
+
@xml.tag!('gml:geometryMembers') do
|
|
121
|
+
aGeometry.each do |hGeometry|
|
|
122
|
+
hGeoType = hGeometry[:elementGeometry][:geoType]
|
|
123
|
+
case hGeoType
|
|
124
|
+
when 'Point'
|
|
125
|
+
pointClass.writeXML(hGeometry)
|
|
126
|
+
when 'LineString'
|
|
127
|
+
lineClass.writeXML(hGeometry)
|
|
128
|
+
when 'Polygon'
|
|
129
|
+
polygonClass.writeXML(hGeometry)
|
|
130
|
+
end
|
|
131
|
+
end
|
|
132
|
+
end
|
|
133
|
+
end
|
|
134
|
+
end
|
|
135
|
+
|
|
136
|
+
end
|
|
137
|
+
|
|
138
|
+
end
|
|
139
|
+
|
|
140
|
+
end
|
|
@@ -0,0 +1,78 @@
|
|
|
1
|
+
# ISO <<Class>> CI_OnlineResource
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-08-14 original script
|
|
6
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
7
|
+
# Stan Smith 2014-08-14 added protocol to onlineResource
|
|
8
|
+
|
|
9
|
+
require 'code_onlineFunction'
|
|
10
|
+
|
|
11
|
+
class CI_OnlineResource
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hOlResource)
|
|
18
|
+
|
|
19
|
+
# classes used
|
|
20
|
+
olFunctionCode = CI_OnLineFunctionCode.new(@xml)
|
|
21
|
+
|
|
22
|
+
@xml.tag! 'gmd:CI_OnlineResource' do
|
|
23
|
+
|
|
24
|
+
# online resource - link - required
|
|
25
|
+
s = hOlResource[:olResURI]
|
|
26
|
+
if s.nil?
|
|
27
|
+
@xml.tag!('gmd:linkage',{'gco:nilReason'=>'missing'})
|
|
28
|
+
else
|
|
29
|
+
@xml.tag!('gmd:linkage') do
|
|
30
|
+
@xml.tag!('gmd:URL',s)
|
|
31
|
+
end
|
|
32
|
+
end
|
|
33
|
+
|
|
34
|
+
# online resource - protocol
|
|
35
|
+
s = hOlResource[:olResProtocol]
|
|
36
|
+
if !s.nil?
|
|
37
|
+
@xml.tag!('gmd:protocol') do
|
|
38
|
+
@xml.tag!('gco:CharacterString',s)
|
|
39
|
+
end
|
|
40
|
+
elsif $showAllTags
|
|
41
|
+
@xml.tag!('gmd:protocol')
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
# online resource - link name
|
|
45
|
+
s = hOlResource[:olResName]
|
|
46
|
+
if !s.nil?
|
|
47
|
+
@xml.tag!('gmd:name') do
|
|
48
|
+
@xml.tag!('gco:CharacterString',s)
|
|
49
|
+
end
|
|
50
|
+
elsif $showAllTags
|
|
51
|
+
@xml.tag!('gmd:name')
|
|
52
|
+
end
|
|
53
|
+
|
|
54
|
+
# online resource - link description
|
|
55
|
+
s = hOlResource[:olResDesc]
|
|
56
|
+
if !s.nil?
|
|
57
|
+
@xml.tag!('gmd:description') do
|
|
58
|
+
@xml.tag!('gco:CharacterString',s)
|
|
59
|
+
end
|
|
60
|
+
elsif $showAllTags
|
|
61
|
+
@xml.tag!('gmd:description')
|
|
62
|
+
end
|
|
63
|
+
|
|
64
|
+
# online resource - link function - CI_OnLineFunctionCode
|
|
65
|
+
s = hOlResource[:olResFunction]
|
|
66
|
+
if !s.nil?
|
|
67
|
+
@xml.tag!('gmd:function') do
|
|
68
|
+
olFunctionCode.writeXML(s)
|
|
69
|
+
end
|
|
70
|
+
elsif $showAllTags
|
|
71
|
+
@xml.tag!('gmd:function')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
75
|
+
|
|
76
|
+
end
|
|
77
|
+
|
|
78
|
+
end
|
|
@@ -0,0 +1,74 @@
|
|
|
1
|
+
# ISO <<Class>> Point
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-01 original script
|
|
6
|
+
# Stan Smith 2014-05-30 modified for version 0.5.0
|
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
8
|
+
|
|
9
|
+
require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
|
|
10
|
+
|
|
11
|
+
class Point
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hGeoElement)
|
|
18
|
+
|
|
19
|
+
# gml:Point attributes
|
|
20
|
+
attributes = {}
|
|
21
|
+
|
|
22
|
+
# gml:Point attributes - gml:id - required
|
|
23
|
+
pointID = hGeoElement[:elementId]
|
|
24
|
+
if pointID.nil?
|
|
25
|
+
$idCount = $idCount.succ
|
|
26
|
+
pointID = 'point' + $idCount
|
|
27
|
+
end
|
|
28
|
+
attributes['gml:id'] = pointID
|
|
29
|
+
|
|
30
|
+
# gml:Point attributes - srsDimension
|
|
31
|
+
s = hGeoElement[:elementGeometry][:dimension]
|
|
32
|
+
if !s.nil?
|
|
33
|
+
attributes[:srsDimension] = s
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# gml:Point attributes - srsName
|
|
37
|
+
s = hGeoElement[:elementSrs][:srsName]
|
|
38
|
+
if !s.nil?
|
|
39
|
+
attributes[:srsName] = s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
@xml.tag!('gml:Point',attributes) do
|
|
43
|
+
|
|
44
|
+
# point - description
|
|
45
|
+
s = hGeoElement[:elementDescription]
|
|
46
|
+
if !s.nil?
|
|
47
|
+
@xml.tag!('gml:description',s)
|
|
48
|
+
elsif $showAllTags
|
|
49
|
+
@xml.tag!('gml:description')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# point - name
|
|
53
|
+
s = hGeoElement[:elementName]
|
|
54
|
+
if !s.nil?
|
|
55
|
+
@xml.tag!('gml:name',s)
|
|
56
|
+
elsif $showAllTags
|
|
57
|
+
@xml.tag!('gml:name')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
# point - coordinates - required
|
|
61
|
+
# gml does not support nilReason for coordinates
|
|
62
|
+
# convert coordinate string from geoJSON to gml
|
|
63
|
+
s = hGeoElement[:elementGeometry][:geometry]
|
|
64
|
+
if !s.nil?
|
|
65
|
+
s = Adiwg_Coordinates.unpack(s)
|
|
66
|
+
@xml.tag!('gml:coordinates',s)
|
|
67
|
+
else
|
|
68
|
+
@xml.tag!('gml:coordinates')
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
end
|
|
@@ -0,0 +1,94 @@
|
|
|
1
|
+
# ISO <<Class>> Polygon
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-18 original script
|
|
6
|
+
# Stan Smith 2014-05-30 modified for version 0.5.0
|
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
8
|
+
|
|
9
|
+
require ADIWG::Mdtranslator.reader_module('module_coordinates', $response[:readerVersionUsed])
|
|
10
|
+
|
|
11
|
+
class Polygon
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hGeoElement)
|
|
18
|
+
|
|
19
|
+
# gml:Polygon attributes
|
|
20
|
+
attributes = {}
|
|
21
|
+
|
|
22
|
+
# gml:Polygon attributes - gml:id - required
|
|
23
|
+
lineID = hGeoElement[:elementId]
|
|
24
|
+
if lineID.nil?
|
|
25
|
+
$idCount = $idCount.succ
|
|
26
|
+
lineID = 'polygon' + $idCount
|
|
27
|
+
end
|
|
28
|
+
attributes['gml:id'] = lineID
|
|
29
|
+
|
|
30
|
+
# gml:Polygon attributes - srsDimension
|
|
31
|
+
s = hGeoElement[:elementGeometry][:dimension]
|
|
32
|
+
if !s.nil?
|
|
33
|
+
attributes[:srsDimension] = s
|
|
34
|
+
end
|
|
35
|
+
|
|
36
|
+
# gml:Polygon attributes - srsName
|
|
37
|
+
s = hGeoElement[:elementSrs][:srsName]
|
|
38
|
+
if !s.nil?
|
|
39
|
+
attributes[:srsName] = s
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
@xml.tag!('gml:Polygon',attributes) do
|
|
43
|
+
|
|
44
|
+
# polygon - description
|
|
45
|
+
s = hGeoElement[:elementDescription]
|
|
46
|
+
if !s.nil?
|
|
47
|
+
@xml.tag!('gml:description',s)
|
|
48
|
+
elsif $showAllTags
|
|
49
|
+
@xml.tag!('gml:description')
|
|
50
|
+
end
|
|
51
|
+
|
|
52
|
+
# polygon - name
|
|
53
|
+
s = hGeoElement[:elementName]
|
|
54
|
+
if !s.nil?
|
|
55
|
+
@xml.tag!('gml:name',s)
|
|
56
|
+
elsif $showAllTags
|
|
57
|
+
@xml.tag!('gml:name')
|
|
58
|
+
end
|
|
59
|
+
|
|
60
|
+
|
|
61
|
+
# polygon - exterior ring
|
|
62
|
+
# convert coordinate string from geoJSON to gml
|
|
63
|
+
aCoords = hGeoElement[:elementGeometry][:geometry][:exteriorRing]
|
|
64
|
+
if !aCoords.empty?
|
|
65
|
+
s = Adiwg_Coordinates.unpack(aCoords)
|
|
66
|
+
@xml.tag!('gml:exterior') do
|
|
67
|
+
@xml.tag!('gml:LinearRing') do
|
|
68
|
+
@xml.tag!('gml:coordinates',s)
|
|
69
|
+
end
|
|
70
|
+
end
|
|
71
|
+
else
|
|
72
|
+
@xml.tag!('gml:exterior')
|
|
73
|
+
end
|
|
74
|
+
|
|
75
|
+
# polygon - interior ring
|
|
76
|
+
# convert coordinate string from geoJSON to gml
|
|
77
|
+
# XSDs do not all gml:interior to be displayed empty
|
|
78
|
+
aRings = hGeoElement[:elementGeometry][:geometry][:exclusionRings]
|
|
79
|
+
unless aRings.empty?
|
|
80
|
+
aRings.each do |aRing|
|
|
81
|
+
s = Adiwg_Coordinates.unpack(aRing)
|
|
82
|
+
@xml.tag!('gml:interior') do
|
|
83
|
+
@xml.tag!('gml:LinearRing') do
|
|
84
|
+
@xml.tag!('gml:coordinates', s)
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
end
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|
|
91
|
+
|
|
92
|
+
end
|
|
93
|
+
|
|
94
|
+
end
|
|
@@ -0,0 +1,81 @@
|
|
|
1
|
+
# ISO <<Class>> LI_ProcessStep
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-20 original script
|
|
6
|
+
# Stan Smith 2014-07-09 modify require statements to function in RubyGem structure
|
|
7
|
+
|
|
8
|
+
require 'module_dateTimeFun'
|
|
9
|
+
require 'class_responsibleParty'
|
|
10
|
+
|
|
11
|
+
class LI_ProcessStep
|
|
12
|
+
|
|
13
|
+
def initialize(xml)
|
|
14
|
+
@xml = xml
|
|
15
|
+
end
|
|
16
|
+
|
|
17
|
+
def writeXML(hProcessStep)
|
|
18
|
+
|
|
19
|
+
# classes used
|
|
20
|
+
rPartyClass = CI_ResponsibleParty.new(@xml)
|
|
21
|
+
|
|
22
|
+
# process step - id
|
|
23
|
+
attributes = {}
|
|
24
|
+
s = hProcessStep[:stepID]
|
|
25
|
+
unless s.nil?
|
|
26
|
+
attributes['id' => s]
|
|
27
|
+
end
|
|
28
|
+
@xml.tag!('gmd:LI_ProcessStep',attributes) do
|
|
29
|
+
|
|
30
|
+
# process step - description - required
|
|
31
|
+
s = hProcessStep[:stepDescription]
|
|
32
|
+
if s.nil?
|
|
33
|
+
@xml.tag!('gmd:description',{'gco:nilReason'=>'missing'})
|
|
34
|
+
else
|
|
35
|
+
@xml.tag!('gmd:description') do
|
|
36
|
+
@xml.tag!('gco:CharacterString',s)
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
# process step - rationale
|
|
41
|
+
s = hProcessStep[:stepRationale]
|
|
42
|
+
if !s.nil?
|
|
43
|
+
@xml.tag!('gmd:rationale') do
|
|
44
|
+
@xml.tag!('gco:CharacterString',s)
|
|
45
|
+
end
|
|
46
|
+
elsif $showAllTags
|
|
47
|
+
@xml.tag!('gmd:rationale')
|
|
48
|
+
end
|
|
49
|
+
|
|
50
|
+
# process step - datetime
|
|
51
|
+
hDateTime = hProcessStep[:stepDateTime]
|
|
52
|
+
if !hDateTime.empty?
|
|
53
|
+
date = hDateTime[:dateTime]
|
|
54
|
+
dateResolution = hDateTime[:dateResolution]
|
|
55
|
+
s = AdiwgDateTimeFun.stringDateTimeFromDateTime(date,dateResolution)
|
|
56
|
+
if s != 'ERROR'
|
|
57
|
+
@xml.tag!('gmd:dateTime') do
|
|
58
|
+
@xml.tag!('gco:DateTime',s)
|
|
59
|
+
end
|
|
60
|
+
end
|
|
61
|
+
elsif $showAllTags
|
|
62
|
+
@xml.tag!('gmd:dateTime')
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
# process step - processor - CI_ResponsibleParty
|
|
66
|
+
aProcessors = hProcessStep[:stepProcessors]
|
|
67
|
+
if !aProcessors.empty?
|
|
68
|
+
aProcessors.each do |rParty|
|
|
69
|
+
@xml.tag!('gmd:processor') do
|
|
70
|
+
rPartyClass.writeXML(rParty)
|
|
71
|
+
end
|
|
72
|
+
end
|
|
73
|
+
elsif $showAllTags
|
|
74
|
+
@xml.tag!('gmd:processor')
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
end
|
|
78
|
+
|
|
79
|
+
end
|
|
80
|
+
|
|
81
|
+
end
|
|
@@ -0,0 +1,42 @@
|
|
|
1
|
+
# ISO <<Class>> RS_Identifier
|
|
2
|
+
# writer
|
|
3
|
+
# output for ISO 19115-2 XML
|
|
4
|
+
|
|
5
|
+
# History:
|
|
6
|
+
# Stan Smith 2014-09-03 original script
|
|
7
|
+
|
|
8
|
+
class RS_Identifier
|
|
9
|
+
|
|
10
|
+
def initialize(xml)
|
|
11
|
+
@xml = xml
|
|
12
|
+
end
|
|
13
|
+
|
|
14
|
+
def writeXML(refId, refType)
|
|
15
|
+
|
|
16
|
+
@xml.tag!('gmd:RS_Identifier') do
|
|
17
|
+
|
|
18
|
+
# identity - code - required
|
|
19
|
+
# identifiers can be name, epsg number, wkt
|
|
20
|
+
case refType
|
|
21
|
+
when 'name'
|
|
22
|
+
@xml.tag!('gmd:code') do
|
|
23
|
+
@xml.tag!('gco:CharacterString', refId)
|
|
24
|
+
end
|
|
25
|
+
|
|
26
|
+
when 'epsg'
|
|
27
|
+
@xml.tag!('gmd:code') do
|
|
28
|
+
s = 'urn:ocg:def:crs:EPSG::' + refId.to_s
|
|
29
|
+
@xml.tag!('gco:CharacterString', s)
|
|
30
|
+
end
|
|
31
|
+
|
|
32
|
+
when 'wkt'
|
|
33
|
+
@xml.tag!('gmd:code') do
|
|
34
|
+
s = 'WKT::' + refId
|
|
35
|
+
@xml.tag!('gco:CharacterString', s)
|
|
36
|
+
end
|
|
37
|
+
end
|
|
38
|
+
end
|
|
39
|
+
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
@@ -0,0 +1,29 @@
|
|
|
1
|
+
# ISO <<Class>> MD_ReferenceSystem
|
|
2
|
+
# writer
|
|
3
|
+
# output for ISO 19115-2 XML
|
|
4
|
+
|
|
5
|
+
# History:
|
|
6
|
+
# Stan Smith 2014-09-03 original script
|
|
7
|
+
|
|
8
|
+
require 'class_referenceIdentifier'
|
|
9
|
+
|
|
10
|
+
class MD_ReferenceSystem
|
|
11
|
+
|
|
12
|
+
def initialize(xml)
|
|
13
|
+
@xml = xml
|
|
14
|
+
end
|
|
15
|
+
|
|
16
|
+
def writeXML(refSystem, refType)
|
|
17
|
+
|
|
18
|
+
# classes used by MD_Metadata
|
|
19
|
+
refIdClass = RS_Identifier.new(@xml)
|
|
20
|
+
|
|
21
|
+
@xml.tag!('gmd:MD_ReferenceSystem') do
|
|
22
|
+
@xml.tag!('gmd:referenceSystemIdentifier') do
|
|
23
|
+
refIdClass.writeXML(refSystem, refType)
|
|
24
|
+
end
|
|
25
|
+
end
|
|
26
|
+
|
|
27
|
+
end
|
|
28
|
+
|
|
29
|
+
end
|
|
@@ -0,0 +1,46 @@
|
|
|
1
|
+
# ISO <<Class>> MD_Resolution
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-11-19 original script
|
|
6
|
+
|
|
7
|
+
class MD_Resolution
|
|
8
|
+
|
|
9
|
+
def initialize(xml)
|
|
10
|
+
@xml = xml
|
|
11
|
+
end
|
|
12
|
+
|
|
13
|
+
def writeXML(hResolution)
|
|
14
|
+
|
|
15
|
+
@xml.tag!('gmd:MD_Resolution') do
|
|
16
|
+
|
|
17
|
+
# resolution - specific equivalent scale
|
|
18
|
+
# resolution - distance
|
|
19
|
+
# one or the other is required, but not both
|
|
20
|
+
scale = hResolution[:equivalentScale]
|
|
21
|
+
distance = hResolution[:distance]
|
|
22
|
+
uom = hResolution[:distanceUOM]
|
|
23
|
+
if !scale.nil?
|
|
24
|
+
@xml.tag!('gmd:equivalentScale') do
|
|
25
|
+
@xml.tag!('gmd:MD_RepresentativeFraction') do
|
|
26
|
+
@xml.tag!('gmd:denominator') do
|
|
27
|
+
@xml.tag!('gco:Integer',scale)
|
|
28
|
+
end
|
|
29
|
+
end
|
|
30
|
+
end
|
|
31
|
+
elsif !distance.nil?
|
|
32
|
+
@xml.tag!('gmd:distance') do
|
|
33
|
+
attributes = {}
|
|
34
|
+
attributes['uom'] = uom if uom
|
|
35
|
+
@xml.tag!('gco:Distance',attributes,distance)
|
|
36
|
+
end
|
|
37
|
+
else
|
|
38
|
+
@xml.tag!('gmd:equivalentScale',{'gco:nilReason'=>'missing'})
|
|
39
|
+
@xml.tag!('gmd:distance',{'gco:nilReason'=>'missing'})
|
|
40
|
+
end
|
|
41
|
+
|
|
42
|
+
end
|
|
43
|
+
|
|
44
|
+
end
|
|
45
|
+
|
|
46
|
+
end
|
|
@@ -0,0 +1,90 @@
|
|
|
1
|
+
# ISO <<Class>> CI_ResponsibleParty
|
|
2
|
+
# writer output in XML
|
|
3
|
+
|
|
4
|
+
# History:
|
|
5
|
+
# Stan Smith 2013-08-13 original script
|
|
6
|
+
# Stan Smith 2014-05-14 modified for JSON schema 0.4.0
|
|
7
|
+
# Stan Smith 2014-07-08 modify require statements to function in RubyGem structure
|
|
8
|
+
|
|
9
|
+
require 'code_role'
|
|
10
|
+
require 'class_contact'
|
|
11
|
+
|
|
12
|
+
class CI_ResponsibleParty
|
|
13
|
+
|
|
14
|
+
def initialize(xml)
|
|
15
|
+
@xml = xml
|
|
16
|
+
end
|
|
17
|
+
|
|
18
|
+
def writeXML(rParty)
|
|
19
|
+
|
|
20
|
+
# classes used in MD_Metadata
|
|
21
|
+
ciContactClass = CI_Contact.new(@xml)
|
|
22
|
+
ciRoleCode = CI_RoleCode.new(@xml)
|
|
23
|
+
|
|
24
|
+
# search array of responsible party for matches in contact object
|
|
25
|
+
rpID = rParty[:contactID]
|
|
26
|
+
unless rpID.nil?
|
|
27
|
+
hContact = ciContactClass.getContact(rpID)
|
|
28
|
+
unless hContact.empty?
|
|
29
|
+
@xml.tag!('gmd:CI_ResponsibleParty') do
|
|
30
|
+
|
|
31
|
+
# responsible party - individual name
|
|
32
|
+
s = hContact[:indName]
|
|
33
|
+
if !s.nil?
|
|
34
|
+
@xml.tag!('gmd:individualName') do
|
|
35
|
+
@xml.tag!('gco:CharacterString', hContact[:indName])
|
|
36
|
+
end
|
|
37
|
+
elsif $showAllTags
|
|
38
|
+
@xml.tag!('gmd:individualName')
|
|
39
|
+
end
|
|
40
|
+
|
|
41
|
+
# responsible party - organization name
|
|
42
|
+
s = hContact[:orgName]
|
|
43
|
+
if !s.nil?
|
|
44
|
+
@xml.tag!('gmd:organisationName') do
|
|
45
|
+
@xml.tag!('gco:CharacterString', hContact[:orgName])
|
|
46
|
+
end
|
|
47
|
+
elsif $showAllTags
|
|
48
|
+
@xml.tag!('gmd:organisationName')
|
|
49
|
+
end
|
|
50
|
+
|
|
51
|
+
# responsible party - position name
|
|
52
|
+
s = hContact[:position]
|
|
53
|
+
if !s.nil?
|
|
54
|
+
@xml.tag!('gmd:positionName') do
|
|
55
|
+
@xml.tag!('gco:CharacterString', hContact[:position])
|
|
56
|
+
end
|
|
57
|
+
elsif $showAllTags
|
|
58
|
+
@xml.tag!('gmd:positionName')
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
# responsible party - contact info
|
|
62
|
+
# the following elements belong to CI_Contact
|
|
63
|
+
if !(hContact[:phones].empty? &&
|
|
64
|
+
hContact[:address].empty? &&
|
|
65
|
+
hContact[:onlineRes].empty? &&
|
|
66
|
+
hContact[:contactInstructions].nil?)
|
|
67
|
+
@xml.tag!('gmd:contactInfo') do
|
|
68
|
+
ciContactClass.writeXML(hContact)
|
|
69
|
+
end
|
|
70
|
+
elsif $showAllTags
|
|
71
|
+
@xml.tag!('gmd:contactInfo')
|
|
72
|
+
end
|
|
73
|
+
|
|
74
|
+
# responsible party - role - required
|
|
75
|
+
s = rParty[:roleName]
|
|
76
|
+
if s.nil?
|
|
77
|
+
xml.tag!('gmd:role', {'gco:nilReason' => 'missing'})
|
|
78
|
+
else
|
|
79
|
+
@xml.tag! 'gmd:role' do
|
|
80
|
+
ciRoleCode.writeXML(s)
|
|
81
|
+
end
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
end
|
|
85
|
+
end
|
|
86
|
+
end
|
|
87
|
+
|
|
88
|
+
end
|
|
89
|
+
|
|
90
|
+
end
|