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.
Files changed (135) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +23 -0
  3. data/.travis.yml +7 -0
  4. data/Gemfile +4 -0
  5. data/LICENSE.txt +24 -0
  6. data/README.md +31 -0
  7. data/Rakefile +13 -0
  8. data/adiwg-mdtranslator.gemspec +31 -0
  9. data/bin/mdtranslator +164 -0
  10. data/lib/adiwg/mdtranslator/internal/internal_metadata_obj.rb +499 -0
  11. data/lib/adiwg/mdtranslator/internal/module_dateTimeFun.rb +98 -0
  12. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_reader.rb +80 -0
  13. data/lib/adiwg/mdtranslator/readers/adiwgJson/adiwgJson_validator.rb +115 -0
  14. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_address.rb +71 -0
  15. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_associatedResource.rb +57 -0
  16. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_boundingBox.rb +51 -0
  17. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_browseGraphic.rb +52 -0
  18. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_citation.rb +104 -0
  19. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_contacts.rb +121 -0
  20. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_coordinates.rb +52 -0
  21. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dataQuality.rb +40 -0
  22. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_dateTime.rb +27 -0
  23. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_descriptiveKeyword.rb +49 -0
  24. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_distributionInfo.rb +150 -0
  25. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_extent.rb +62 -0
  26. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoCoordSystem.rb +46 -0
  27. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geoProperties.rb +89 -0
  28. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_geographicElement.rb +168 -0
  29. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_legalConstraint.rb +45 -0
  30. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineString.rb +25 -0
  31. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_lineage.rb +50 -0
  32. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadata.rb +76 -0
  33. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataExtension.rb +40 -0
  34. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_metadataInfo.rb +119 -0
  35. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_onlineResource.rb +62 -0
  36. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_phone.rb +59 -0
  37. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_point.rb +25 -0
  38. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_polygon.rb +55 -0
  39. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_processStep.rb +64 -0
  40. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resolution.rb +42 -0
  41. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceFormat.rb +35 -0
  42. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceIdentifier.rb +49 -0
  43. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceInfo.rb +298 -0
  44. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceMaintenance.rb +50 -0
  45. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_resourceSpecificUsage.rb +50 -0
  46. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_responsibleParty.rb +37 -0
  47. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_securityConstraint.rb +52 -0
  48. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_source.rb +48 -0
  49. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_spatialReference.rb +48 -0
  50. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonClass.rb +43 -0
  51. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_taxonomy.rb +83 -0
  52. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_temporalElement.rb +71 -0
  53. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timeInstant.rb +45 -0
  54. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_timePeriod.rb +53 -0
  55. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_verticalElement.rb +53 -0
  56. data/lib/adiwg/mdtranslator/readers/adiwgJson/modules_0.8.0/module_voucher.rb +38 -0
  57. data/lib/adiwg/mdtranslator/validator.rb +43 -0
  58. data/lib/adiwg/mdtranslator/version.rb +7 -0
  59. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_address.rb +91 -0
  60. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_aggregateInformation.rb +68 -0
  61. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_boundingPolygon.rb +75 -0
  62. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_browseGraphic.rb +51 -0
  63. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_citation.rb +157 -0
  64. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_contact.rb +85 -0
  65. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataIdentification.rb +338 -0
  66. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_dataQuality.rb +55 -0
  67. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_date.rb +60 -0
  68. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_digitalTransferOptions.rb +51 -0
  69. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distribution.rb +36 -0
  70. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_distributor.rb +80 -0
  71. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_extent.rb +94 -0
  72. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_format.rb +40 -0
  73. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_genericMetaData.rb +65 -0
  74. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicBoundingBox.rb +74 -0
  75. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicDescription.rb +29 -0
  76. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_geographicElement.rb +36 -0
  77. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_identifier.rb +51 -0
  78. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_keyword.rb +63 -0
  79. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_legalConstraints.rb +63 -0
  80. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineString.rb +74 -0
  81. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_lineage.rb +63 -0
  82. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_maintenanceInformation.rb +64 -0
  83. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_medium.rb +59 -0
  84. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadata.rb +277 -0
  85. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_metadataExtension.rb +156 -0
  86. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_multiGeometry.rb +140 -0
  87. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_onlineResource.rb +78 -0
  88. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_point.rb +74 -0
  89. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_polygon.rb +94 -0
  90. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_processStep.rb +81 -0
  91. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceIdentifier.rb +42 -0
  92. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_referenceSystem.rb +29 -0
  93. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_resolution.rb +46 -0
  94. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_responsibleParty.rb +90 -0
  95. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_securityConstraints.rb +68 -0
  96. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_source.rb +59 -0
  97. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_standardOrderProcess.rb +74 -0
  98. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonClassification.rb +65 -0
  99. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_taxonSystem.rb +100 -0
  100. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_telephone.rb +77 -0
  101. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_temporalExtent.rb +58 -0
  102. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timeInstant.rb +47 -0
  103. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_timePeriod.rb +54 -0
  104. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_usage.rb +59 -0
  105. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_useConstraints.rb +30 -0
  106. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_verticalExtent.rb +59 -0
  107. data/lib/adiwg/mdtranslator/writers/iso19115_2/classes/class_vouchers.rb +48 -0
  108. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_associationType.rb +35 -0
  109. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_characterSet.rb +58 -0
  110. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_classification.rb +35 -0
  111. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_datatype.rb +45 -0
  112. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_dateType.rb +29 -0
  113. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_initiativeType.rb +35 -0
  114. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_keywordType.rb +33 -0
  115. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_maintenanceFrequency.rb +42 -0
  116. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumFormat.rb +32 -0
  117. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_mediumName.rb +44 -0
  118. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_obligation.rb +32 -0
  119. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_onlineFunction.rb +31 -0
  120. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_presentationForm.rb +44 -0
  121. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_progress.rb +33 -0
  122. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_restriction.rb +38 -0
  123. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_role.rb +37 -0
  124. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_scope.rb +46 -0
  125. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_spatialRepresentationType.rb +36 -0
  126. data/lib/adiwg/mdtranslator/writers/iso19115_2/codelists/code_topicCategory.rb +50 -0
  127. data/lib/adiwg/mdtranslator/writers/iso19115_2/iso19115_2_writer.rb +131 -0
  128. data/lib/adiwg/mdtranslator.rb +97 -0
  129. data/lib/adiwg-mdtranslator.rb +1 -0
  130. data/mdtranslator.rb +178 -0
  131. data/test/adiwgJson_full_test_example.json +1717 -0
  132. data/test/adiwgJson_template.json +977 -0
  133. data/test/dev.rb +32 -0
  134. data/test/tc_translation.rb +31 -0
  135. 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