sos-core 0.1.3 → 0.1.6

Sign up to get free protection for your applications and to get access to all the features.
checksums.yaml CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: 85ae9bdcf11f275345ab0febe9babc2fc6e1ee4d
4
- data.tar.gz: 14b9535b4163e422ca2d8cc925edfcb4aac61733
3
+ metadata.gz: d24d9de1e66d3babc6b47ae1a25f7b54aeb48301
4
+ data.tar.gz: 8088d4d5254b2488abf5d3f0389bd02bb40c5ebe
5
5
  SHA512:
6
- metadata.gz: 6452ef5ed1118a368e190bf6910d92585e5360b42e9d641a017ef2391f122d5c07d53c327b15f4b4d70d38f4e2ebedd589336daefeb17caa2e2128ac5565df17
7
- data.tar.gz: ccda52c496fff348755b52cb6c0ab659b6783ce43e6697907535b4a9a8b499ecb394f6de2e1f2432de80fcf1e6ac68034ce8908ab765143bb58fc216f48a2962
6
+ metadata.gz: a420feec4eb02fe24c44231b70bae0bae77767c307c8499e246022dedc9615a276f7dd845a6a74a47a6b4612de59b54a5a405f5694ca357bda106ee216e16a09
7
+ data.tar.gz: 8a643d43183318cc9da7f6b93d674d12459f77b4fff9ad72a2851c45013a663f3ddfd4783897109467c127fdf2c4136a8287b317985f2ae5edbf7e576762e4f2
@@ -1,3 +1,5 @@
1
+ require_relative 'company.rb'
2
+
1
3
  module SOSHelper
2
4
 
3
5
  # Boss Assign the tasks
@@ -19,6 +21,7 @@ module SOSHelper
19
21
  results = pm.done
20
22
  summarize @base, results.dup
21
23
  end
24
+ # p @base.to_xml
22
25
 
23
26
  @base
24
27
  end
@@ -42,7 +45,8 @@ module SOSHelper
42
45
  end
43
46
 
44
47
  def recognize_employee
45
- Object.const_get(capitalize @employee).new
48
+ employee = capitalize @employee
49
+ eval( employee + ".new")
46
50
  end
47
51
 
48
52
  def capitalize(employee)
@@ -1,23 +1,44 @@
1
+ require 'nokogiri'
2
+ require_relative 'employees/sos/contents.rb'
3
+
1
4
  module SOSHelper
5
+ class Capability
6
+ def initialize(args={})
7
+ @root = args[:root].dup
8
+ end
9
+
10
+ def contents
11
+ contents = @root.xpath("//sos:Contents")
12
+ Contents.new(contents)
13
+ end
14
+
15
+ def filterCapabilities
16
+
17
+ end
18
+
19
+ def extension
20
+
21
+ end
22
+
23
+ end
24
+
2
25
  class GetCapability
3
26
 
27
+ attr_reader :capabilities
4
28
  def initialize(args={})
5
29
  @request = args[:request]
6
30
  @url = args[:url]
7
31
  @query = {}
8
- @allowedValue = {}
9
32
  @capabilities = nil
10
33
  end
11
34
 
12
35
  def send(query={})
13
36
  query[:service] = query[:service] || "SOS"
14
37
  query[:request] = query[:request] || "GetCapabilities"
15
- @capabilities = request.get(query) { |str| next Nokogiri::XML(str) }
16
- end
17
-
18
- def checkAllowedValues(capabilities=nil)
19
-
20
- @allowedValue = check Relics
38
+ query[:version] = query[:version] || "2.0.0"
39
+ @capabilities = request.get(query) do |str| xml = Nokogiri::XML(str)
40
+ Capability.new(root: xml)
41
+ end
21
42
  end
22
43
 
23
44
  private
@@ -0,0 +1,4 @@
1
+ require_relative 'employees/man.rb'
2
+ require_relative 'employees/fes.rb'
3
+ require_relative 'employees/gml.rb'
4
+ require_relative 'employees/sos.rb'
@@ -1,4 +1,3 @@
1
- require_relative 'man.rb'
2
1
  Dir[ File.dirname(__FILE__) + "/fes/expression/*.rb"].each {|file| require file }
3
2
  Dir[ File.dirname(__FILE__) + "/fes/comparisonOps/*.rb"].each {|file| require file }
4
3
  Dir[ File.dirname(__FILE__) + "/fes/extensionOps/*.rb"].each {|file| require file }
@@ -1,2 +1 @@
1
- require_relative 'man.rb'
2
1
  Dir[ File.dirname(__FILE__) + "/gml/*.rb"].each {|file| require file }
@@ -0,0 +1,26 @@
1
+ require 'time'
2
+
3
+
4
+ class Time
5
+ def toTimeZone(time=nil)
6
+ return time.utc.iso8601 unless time.nil?
7
+ self.utc.iso8601
8
+ end
9
+ end
10
+
11
+ class GMLTime < Time
12
+ def initialize(time)
13
+ @time = toDateTime time
14
+ super *(@time.to_a[0..5].reverse)
15
+ end
16
+
17
+ def toTimeZone(time=nil)
18
+ return time.utc.iso8601 unless time.nil?
19
+ @time.utc.iso8601
20
+ end
21
+
22
+ def toDateTime(time=nil)
23
+ return Time.parse(time).localtime unless time.nil?
24
+ Time.parse(@time).localtime
25
+ end
26
+ end
@@ -11,7 +11,7 @@ class TimePeriod < Complicated
11
11
  end
12
12
 
13
13
  def custom(value)
14
- begin_time, end_time = splitPosition(value)
14
+ begin_time, end_time = value.split " "
15
15
  position("begin", begin_time) + position("end", end_time)
16
16
  end
17
17
 
@@ -19,10 +19,6 @@ class TimePeriod < Complicated
19
19
  "<gml:#{where}Position>#{time}</gml:#{where}Position>"
20
20
  end
21
21
 
22
- def splitPosition(value)
23
- value.split " "
24
- end
25
-
26
22
  def tag_name
27
23
  class_name
28
24
  end
@@ -1,6 +1,5 @@
1
1
  class People
2
- def initialize(tasks=nil)
3
- @tasks = tasks.to_a
2
+ def initialize()
4
3
  @attributes = ""
5
4
  end
6
5
 
@@ -16,7 +15,7 @@ class People
16
15
  end
17
16
 
18
17
  def inspect
19
- tag
18
+ self.to_s
20
19
  end
21
20
 
22
21
  def inject(task)
@@ -44,6 +43,7 @@ class People
44
43
  end
45
44
 
46
45
  def attributes(attrs)
46
+ p attrs
47
47
  attrs.each { |k, v| @attributes += " #{namespace}" + k.to_s + "=\"" + v.to_a[0] + "\"" }
48
48
  end
49
49
 
@@ -1,2 +1 @@
1
- require_relative 'man.rb'
2
1
  Dir[ File.dirname(__FILE__) + "/sos/*.rb"].each {|file| require file }
@@ -0,0 +1,41 @@
1
+ require_relative '../swes/offering.rb'
2
+
3
+
4
+ class Contents
5
+ def initialize(contents)
6
+ @contents = contents
7
+ end
8
+
9
+ def offerings
10
+ offerings = @contents.xpath("//swes:offering")
11
+ @offering = @offering || get(offerings) || []
12
+ end
13
+
14
+ def get(offerings)
15
+ offerings.map { |offering| SWES::Offering.new(offering) }
16
+ end
17
+
18
+ def procedureDescriptionFormat
19
+
20
+ end
21
+
22
+ def observableProperty
23
+
24
+ end
25
+
26
+ def relatedFeature
27
+
28
+ end
29
+
30
+ def responseFormat
31
+
32
+ end
33
+
34
+ def featureOfInterestType
35
+
36
+ end
37
+
38
+ def observationType
39
+
40
+ end
41
+ end
@@ -1,3 +1,5 @@
1
+ require_relative '../mankind/simple.rb'
2
+
1
3
  class Offering < Simple
2
4
 
3
5
  end
@@ -0,0 +1,58 @@
1
+ require_relative '../gml/gmlTime.rb'
2
+
3
+ class SOSTime
4
+ def initialize(time)
5
+ @time = checkTimeType time
6
+ end
7
+
8
+ def timeInstant(time)
9
+ time.xpath(".//gml:TimeInstant")
10
+ end
11
+
12
+ def timePeriod(time)
13
+ time.xpath(".//gml:TimePeriod")
14
+ end
15
+
16
+ def range(beginTime=beginPosition, endTime=endPosition)
17
+ beginTime.toTimeZone + " " + endTime.toTimeZone
18
+ end
19
+
20
+ def timePosition
21
+ @instant ||= gmlTime find("gml:timePosition")
22
+ end
23
+
24
+ def beginPosition
25
+ @begin ||= gmlTime find("gml:beginPosition")
26
+ end
27
+
28
+ def endPosition
29
+
30
+ @end ||= gmlTime find("gml:endPosition")
31
+ end
32
+
33
+ def gmlTime(time)
34
+ GMLTime.new time unless time.empty?
35
+ end
36
+
37
+ def find(tag)
38
+ @time.xpath(".//" + tag).text
39
+ end
40
+
41
+ def checkTimeType(time)
42
+ type = timeInstant time
43
+ type = timePeriod time if type.empty?
44
+ end
45
+
46
+ def inspect
47
+ time = timePosition.nil? ? "@begin: #{beginPosition}, @end: #{endPosition}" : "@intant: #{@instant}"
48
+ "PhenomenonTime: #{time}"
49
+ end
50
+ end
51
+
52
+ class PhenomenonTime < SOSTime
53
+
54
+ end
55
+
56
+ class ResultTime < SOSTime
57
+
58
+ end
@@ -0,0 +1,79 @@
1
+ require_relative '../mankind/Complicated.rb'
2
+ require_relative '../sos/time.rb'
3
+
4
+ module SWES
5
+ class Offering < Complicated
6
+ attr_accessor :keys
7
+ def initialize(offering)
8
+ @offering = offering
9
+ @keys = [ :identifier,
10
+ :procedure,
11
+ :procedureDescriptionFormats,
12
+ :observableProperty,
13
+ :phenomenonTime,
14
+ :resultTime,
15
+ :responseFormat ]
16
+ end
17
+
18
+ def identifier
19
+ @identifier ||= find("swes:identifier")
20
+ end
21
+
22
+ def procedure
23
+ @procedure ||= find("swes:procedure")
24
+ end
25
+
26
+ def procedureDescriptionFormats
27
+ @procedureDescriptionFormats ||=
28
+ findAll("swes:procedureDescriptionFormat")
29
+ end
30
+
31
+ def observableProperty
32
+ @observableProperty ||=
33
+ findAll("swes:observableProperty")
34
+ end
35
+
36
+ def observedArea
37
+ @observedArea
38
+ end
39
+
40
+ def responseFormat
41
+ @responseFormat ||=
42
+ findAll "sos:responseFormat"
43
+ end
44
+
45
+ def phenomenonTime
46
+ PhenomenonTime.new find("sos:phenomenonTime", false)
47
+ end
48
+
49
+ def resultTime
50
+ ResultTime.new find("sos:resultTime", false)
51
+ end
52
+
53
+ def find(tag, text=true)
54
+ return @offering.xpath(".//" + tag).text if text
55
+ @offering.xpath(".//" + tag)
56
+ end
57
+
58
+ def findAll(tag)
59
+ @offering.xpath(".//" + tag).map { |tag| tag.text }
60
+ end
61
+
62
+ def inspect
63
+ id = identifier.ascii_only? ? identifier : "UTF-16"
64
+ "Offering: @id='#{id}'"
65
+ end
66
+
67
+ def self.name
68
+ self.new().class.to_s
69
+ end
70
+
71
+ def tag_name
72
+ self.class.to_s.split("::")[1]
73
+ end
74
+
75
+ def namespace
76
+ "swes:"
77
+ end
78
+ end
79
+ end
@@ -1,3 +1,4 @@
1
+ require_relative 'boss.rb'
1
2
  require_relative 'hashMerge.rb'
2
3
  require 'set'
3
4
 
File without changes
@@ -1,8 +1,23 @@
1
+ require 'json'
2
+
1
3
  module SOSHelper
2
4
 
3
5
  class Observation
4
- def initialize(args)
5
-
6
+ def initialize(str)
7
+ @xml = Nokogiri::XML(str)
8
+ end
9
+
10
+ def parse
11
+ datalist = @xml.xpath("//sos:observationData")
12
+ @output = datalist.map { |data| [data.xpath(".//gml:timePosition").text, data.xpath(".//om:result").text] }
13
+ end
14
+
15
+ def to_json
16
+ { data: output }.to_json
17
+ end
18
+
19
+ def output
20
+ @output ||= []
6
21
  end
7
22
  end
8
23
 
@@ -15,6 +30,7 @@ module SOSHelper
15
30
  @request = args[:request]
16
31
  @xml = ObservationRequest.dup
17
32
  @request_body = nil
33
+ @tp = []
18
34
  @body = ""
19
35
  end
20
36
 
@@ -35,7 +51,7 @@ module SOSHelper
35
51
  raise ArgumentError, 'Filters need to be hash' unless custom.is_a? Hash
36
52
  return condition.to_s if custom == {}
37
53
  condition.merge! custom
38
-
54
+ p condition
39
55
  self
40
56
  end
41
57
 
@@ -47,19 +63,29 @@ module SOSHelper
47
63
  @condition ||= Factory.new()
48
64
  end
49
65
 
50
- def offering(text)
51
- filter({offering: text})
66
+ def offering=(list)
67
+ filter({offering: list})
68
+ end
69
+
70
+ def procedure=(list)
71
+ filter({procedure: list})
52
72
  end
53
73
 
54
- def procedure(text)
55
- filter({procedure: text})
74
+ def observedProperty=(list)
75
+ filter({observedProperty: list})
56
76
  end
57
77
 
58
- def observedProperty(text)
59
- filter({observedProperty: text})
78
+ def randomID
79
+ tp = "tp_" + rand(100000000).to_s
80
+ (unique? tp) ? tp : randomID
60
81
  end
61
82
 
62
- def temporalFilter(id, range)
83
+ def unique?(tp)
84
+ not @tp.include? tp
85
+ end
86
+
87
+ def temporalFilter=(id=randomID, range)
88
+ @tp << randomID
63
89
  filter({ temporalFilter: {
64
90
  during: {
65
91
  valueReference: "phenomenonTime",
@@ -68,10 +94,6 @@ module SOSHelper
68
94
  })
69
95
  end
70
96
 
71
- def responseFormat(text)
72
- filter({responseFormat: text})
73
- end
74
-
75
97
  end
76
98
 
77
99
  end
@@ -1,35 +1,37 @@
1
- require_relative 'sos-helper.rb'
1
+ require_relative 'xmlRequest.rb'
2
+ require_relative 'sosHelper.rb'
2
3
 
3
- class SOS
4
+ # Usage:
5
+ # s = SOS.new("Url")
6
+ # s.getCapabilities => return All capabilities
7
+ # s.getObservations(condition)
8
+ # => set the filter to get observations
9
+ # s.offering => return all offerings from @capability
10
+
11
+ # url = "http://cgis.csrsr.ncu.edu.tw:8080/swcb-sos-new/service"
12
+ # s = SOS.new("YourService")
4
13
 
14
+ class SOS
15
+ attr_reader :capabilities
5
16
  def initialize(url, args={})
6
17
  # request to http://cgis.csrsr.ncu.edu.tw:8080/swcb-sos-new/service
7
18
  @request = XmlRequest.new(url)
8
- @capabilities = getCapabilities
19
+ @capabilities = nil
9
20
  @observations, @gc, @go = nil
10
- end
11
21
 
12
- def allowedValue
13
- @allowedValue ||= checkAllowedValues
14
22
  end
15
-
23
+
16
24
  def getCapabilities(query={})
17
25
  @gc = SOSHelper::GetCapability.new(request: @request)
18
- @capabilities = @gc.send
19
- end
20
-
21
- def checkAllowedValues
22
- @gc.checkAllowedValues
26
+ @gc.send
27
+ @capabilities = @gc.capabilities
23
28
  end
24
29
 
25
- def getObservations(condition={})
30
+ def getObservations
26
31
  @go = SOSHelper::GetObservation.new(request: @request)
27
- filter condition unless condition == {}
28
- @go
29
32
  end
30
33
 
31
- def offering
32
- @offerings = @offerings || @capabilities.xpath("//sos:Contents//swes:offering").map { |node| Offering.new(node) } unless @capabilities.nil?
34
+ def offerings
35
+ @offerings ||= @capabilities.contents.offerings
33
36
  end
34
-
35
37
  end
@@ -0,0 +1,26 @@
1
+ require 'nokogiri'
2
+ require 'set'
3
+ require_relative 'boss'
4
+ require_relative 'factory'
5
+ require_relative 'capability'
6
+ require_relative 'observation'
7
+
8
+ module SOSHelper
9
+ Urls = ["http://cgis.csrsr.ncu.edu.tw:8080/swcb-sos-new/service",
10
+ "http://cgis.csrsr.ncu.edu.tw:8080/epa-sos/service",
11
+ "http://cgis.csrsr.ncu.edu.tw:8080/epa-aqx-sos/service"].freeze
12
+
13
+ Relics = ["offering","observedProperty",
14
+ "featureOfInterest",
15
+ "procedure", "spatialFilter",
16
+ "temporalFilter", "responseFormat"].freeze
17
+
18
+ fpath = File.dirname(__FILE__) + "/request/getObservation.xml"
19
+ ObservationRequest = File.open( fpath ) { |f| Nokogiri::XML(f) }.freeze
20
+
21
+ end
22
+
23
+ # o = SOSHelper::GetObservation.new
24
+ # o.filter({:offering => "鳳義坑"}).filter({:observedProperty => "urn:ogc:def:phenomenon:OGC:1.0.30:rainfall_1day"})
25
+ # c = o.filter({:temporalFilter => :during })
26
+ # p c
@@ -0,0 +1,17 @@
1
+ module SOSHelper
2
+ Ruler = {offering: "sos:offering",
3
+ procedure: "sos:procedure",
4
+ observedProperty: "sos:observedProperty",
5
+ featureOfInterest: "sos:featureOfInterest",
6
+ spatialFilter: "sos:spatialFilter",
7
+ temporalFilter: "sos:temporalFilter",
8
+ responseFormat: "sos:responseFormat",
9
+ after: "fes:After",
10
+ during: "fes:During",
11
+ tequals: "fes:TEquals",
12
+ valueReference: "fes:ValueReference",
13
+ timePeriod: "gml:TimePeriod",
14
+ beginPosition: "gml:beginPosition",
15
+ endPosition: "gml:endPosition" }
16
+
17
+ end
@@ -0,0 +1,64 @@
1
+ require "uri"
2
+ require "net/http"
3
+ require "json"
4
+
5
+ # To send get or post request with custom payload.
6
+ #
7
+ # Usage:
8
+ # => hello = XmlRequest.new( uri )
9
+ # => hello.get({service: "SOS", request: "GetCapabilities"})
10
+ #
11
+ class XmlRequest
12
+
13
+ attr_accessor :uri, :packet, :post
14
+
15
+ def initialize(url)
16
+ @uri = url
17
+ @packet = Net::HTTP.new(uri.host, uri.port)
18
+ @query = nil
19
+ end
20
+
21
+ def post(body=nil, &block)
22
+ @post = Net::HTTP::Post.new(uri.path)
23
+ @post["Content-type"] = "application/xml"
24
+ @post.body = body
25
+ File.new("./response/send_post", "w").write body
26
+ @res = send @post
27
+ @result = yield @res.body if block_given?
28
+ end
29
+
30
+ def get(query={}, &block)
31
+ fullPath = path_combine query
32
+ @get = Net::HTTP::Get.new(fullPath)
33
+ @res = send @get
34
+ File.new("./response/tmp_GetCapability", "w").write @res.body
35
+ @result = yield @res.body if block_given?
36
+ end
37
+
38
+ private
39
+
40
+ def uri
41
+ URI(@uri)
42
+ end
43
+
44
+ def path_combine(query={})
45
+ params = URI.encode_www_form(query)
46
+ [uri.path, params].join('?')
47
+ end
48
+
49
+ def send(action)
50
+ @packet.request( action )
51
+ end
52
+
53
+ end
54
+
55
+ # xml = '<?xml version="1.0" encoding="UTF-8"?>
56
+ # <GetObservation service="SOS" version="2.0.0" xmlns="http://www.opengis.net/sos/2.0" xmlns:wsa="http://www.w3.org/2005/08/addressing" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xmlns:swe="http://www.opengis.net/swe/2.0" xmlns:swes="http://www.opengis.net/swes/2.0" xmlns:fes="http://www.opengis.net/fes/2.0" xmlns:gml="http://www.opengis.net/gml/32" xmlns:ogc="http://www.opengis.net/ogc" xmlns:om="http://www.opengis.net/om/1.0" xsi:schemaLocation="http://www.w3.org/2003/05/soap-envelope http://www.w3.org/2003/05/soap-envelope/soap-envelope.xsd http://www.opengis.net/sos/2.0 http://schemas.opengis.net/sos/2.0/sos.xsd">
57
+ # <procedure>urn:ogc:object:feature:Sensor:SWCB:sensor鳳義坑</procedure>
58
+ # <offering>鳳義坑</offering>
59
+ # <observedProperty>urn:ogc:def:phenomenon:OGC:1.0.30:rainfall_1day</observedProperty>
60
+
61
+ # <responseFormat>application/json</responseFormat>
62
+ # </GetObservation>'
63
+
64
+
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: sos-core
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.3
4
+ version: 0.1.6
5
5
  platform: ruby
6
6
  authors:
7
7
  - Zil
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2016-03-17 00:00:00.000000000 Z
11
+ date: 2016-04-26 00:00:00.000000000 Z
12
12
  dependencies: []
13
13
  description: A helper for Sensor Observation Service
14
14
  email: k471352@gmail.com
@@ -16,9 +16,9 @@ executables: []
16
16
  extensions: []
17
17
  extra_rdoc_files: []
18
18
  files:
19
- - lib/board_of_directors/boss.rb
20
- - lib/board_of_directors/factory/factory.rb
21
- - lib/board_of_directors/factory/hashMerge.rb
19
+ - lib/boss.rb
20
+ - lib/capability.rb
21
+ - lib/company.rb
22
22
  - lib/employees/fes.rb
23
23
  - lib/employees/fes/comparisonOps/propertyIsBetween.rb
24
24
  - lib/employees/fes/comparisonOps/propertyIsEqualTo.rb
@@ -66,6 +66,7 @@ files:
66
66
  - lib/employees/gml/end.rb
67
67
  - lib/employees/gml/envelope.rb
68
68
  - lib/employees/gml/exterior.rb
69
+ - lib/employees/gml/gmlTime.rb
69
70
  - lib/employees/gml/linearRing.rb
70
71
  - lib/employees/gml/lowerCorner.rb
71
72
  - lib/employees/gml/polygon.rb
@@ -79,16 +80,20 @@ files:
79
80
  - lib/employees/mankind/people.rb
80
81
  - lib/employees/mankind/simple.rb
81
82
  - lib/employees/sos.rb
83
+ - lib/employees/sos/contents.rb
82
84
  - lib/employees/sos/offering.rb
83
85
  - lib/employees/sos/temporalFilter.rb
86
+ - lib/employees/sos/time.rb
87
+ - lib/employees/swes/offering.rb
88
+ - lib/factory.rb
89
+ - lib/hashMerge.rb
90
+ - lib/node.rb
91
+ - lib/observation.rb
92
+ - lib/request/getObservation.xml
84
93
  - lib/sos-core.rb
85
- - lib/sos-helper.rb
86
- - lib/sos_helper/capability.rb
87
- - lib/sos_helper/getObservation.xml
88
- - lib/sos_helper/node.rb
89
- - lib/sos_helper/observation.rb
90
- - lib/sos_helper/offering.rb
91
- - lib/sos_helper/xmlRequest.rb
94
+ - lib/sosHelper.rb
95
+ - lib/tags.rb
96
+ - lib/xmlRequest.rb
92
97
  homepage: https://github.com/MOSapeizer/SOS
93
98
  licenses:
94
99
  - MIT
@@ -1,21 +0,0 @@
1
- require 'set'
2
- require 'nokogiri'
3
- Dir[ File.dirname(__FILE__) + "/employees/*.rb"].each {|file| require file }
4
- require_relative 'board_of_directors/factory/factory.rb'
5
- require_relative 'board_of_directors/boss.rb'
6
- Dir[ File.dirname(__FILE__) + "/sos_helper/*.rb"].each {|file| require file }
7
-
8
- module SOSHelper
9
- Dir[ File.dirname(__FILE__) + "/sos_helper/*.rb"]
10
- Urls = ["http://cgis.csrsr.ncu.edu.tw:8080/swcb-sos-new/service",
11
- "http://cgis.csrsr.ncu.edu.tw:8080/epa-sos/service",
12
- "http://cgis.csrsr.ncu.edu.tw:8080/epa-aqx-sos/service"].freeze
13
-
14
- Relics = ["offering","observedProperty",
15
- "featureOfInterest",
16
- "procedure", "spatialFilter",
17
- "temporalFilter", "responseFormat"].freeze
18
-
19
- ObservationRequest = File.open(File.dirname(__FILE__) + '/sos_helper/getObservation.xml') { |f| Nokogiri::XML(f) }.freeze
20
-
21
- end
@@ -1,49 +0,0 @@
1
- require_relative 'node'
2
-
3
- module SOSHelper
4
- class Offering
5
- ATRRIBUTES = [ :identifier, :procedure, :observableProperty, :observedArea, :resultTime, :phenomenonTime, :node ]
6
- ATRRIBUTES.each { |t| attr_reader t }
7
-
8
- def initialize(xml_offer)
9
- @node = Node.new xml_offer
10
- @id, @procedure = getText(:id), getText(:procedure)
11
- @observableProperty = getList(:observableProperty)
12
- @observedArea = getHash(:observedArea, [:lowerCorner, :upperCorner])
13
- @phenomenonTime = getHash(:phenomenonTime, [:begin, :end])
14
- @resultTime = getHash(:resultTime, [:begin, :end])
15
-
16
- end
17
-
18
- def getText(name)
19
- @node[name].text
20
- end
21
-
22
- def getList(name)
23
- @node[name].children.map { |node| node.text }
24
- end
25
-
26
- def getHash(name, scope=[])
27
- hash = {}
28
- scope.each { |s| hash.store(s, @node[name][s].text )} unless scope.empty?
29
- hash
30
- end
31
-
32
- def to_json
33
- { "identifier": @id,
34
- "procedure": @procedure,
35
- "observableProperty": @observableProperty,
36
- "observedArea": @observedArea,
37
- "phenomenonTime": @phenomenonTime,
38
- "resultTime": @resultTime }
39
- end
40
-
41
- def to_s
42
- to_json.to_s
43
- end
44
-
45
- end
46
-
47
- end
48
- # p a.node.inspect
49
- # p a.to_json
@@ -1,54 +0,0 @@
1
- require "uri"
2
- require "net/http"
3
- require "json"
4
-
5
- # To send get or post request with custom payload.
6
- #
7
- # Usage:
8
- # => hello = XmlRequest.new( uri )
9
- # => hello.get({service: "SOS", request: "GetCapabilities"})
10
- #
11
- class XmlRequest
12
-
13
- attr_accessor :uri, :packet, :post
14
-
15
- def initialize(url)
16
- @uri = url
17
- @packet = Net::HTTP.new(uri.host, uri.port)
18
- @query = nil
19
- end
20
-
21
- def post(body=nil, &block)
22
- @post = Net::HTTP::Post.new(uri.path)
23
- @post["Content-type"] = "application/xml"
24
- @post.body = body
25
- # File.new("./request/request-tmp", "w").write body.dup
26
- p body, "packet sending, it may take times to get response..."
27
- @res = send @post
28
- @result = yield @res.body if block_given?
29
- end
30
-
31
- def get(query={}, &block)
32
- fullPath = path_combine query
33
- @get = Net::HTTP::Get.new(fullPath)
34
- @res = send @get
35
- @result = yield @res.body if block_given?
36
- end
37
-
38
- private
39
-
40
- def uri
41
- URI(@uri)
42
- end
43
-
44
- def path_combine(query={})
45
- params = URI.encode_www_form(query)
46
- [uri.path, params].join('?')
47
- end
48
-
49
- def send(action)
50
- @packet.request( action )
51
- end
52
-
53
- end
54
-