adiwg-mdtranslator 0.8.0
Sign up to get free protection for your applications and to get access to all the features.
- 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
|