geosparql_to_geojson 0.1.2 → 0.1.3

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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
2
  SHA1:
3
- metadata.gz: bc5084f15f2da1cc5ef42f4f29aa1f001151d77a
4
- data.tar.gz: ae87d6a4f40d7a1502f7155ffe9dfda4552d941b
3
+ metadata.gz: 8745dbc21bfac65f5e4ff1e9a195d561d9f15d5c
4
+ data.tar.gz: 3f52ce971cf31c957258a911506ff2c76f714ef8
5
5
  SHA512:
6
- metadata.gz: 9d0dd1c7732ff288f982b72f3c05060e3d2a55ed73c0e64bb8dd45c57bf5c2360800ba31342455c7257a63dad26922a8a9c575d572c7cb18759c69c994661b6a
7
- data.tar.gz: bb1dc96ea5309043a5d9c4df095d76273ba3600b4e77ef65ee0e043e5ae6a547bdd6124013f430e070a607be0376d4a3c13252d59fb5f34aae4affafa292076b
6
+ metadata.gz: 4614f07cac499f359243bc66a76c952914995a51ca834ffd0fc5f02f5f2ea2c23c298bd18e1a52b12b2dc192572fbeec4563e763f74bf177e122d08915e8909a
7
+ data.tar.gz: 5c64b4b1db9f453052e9ed53b80bcb034df71d7097cdcf7950e9c405c113a424caff02a71bfe0b0bce66af27110fc2c2fa8e0683541ada4f6cdeb5f1e04aeb9c
@@ -5,8 +5,19 @@ module GeosparqlToGeojson
5
5
  #
6
6
  # @since 0.1.0
7
7
  class Converter
8
- # Constant contains every GeoSparql data type.
9
- GEOMETRY_TYPES = %w[Point Multipoint LineString Multiline Polygon MultiPolygon GeometryCollection].freeze
8
+ # Constant containing hash of GeoSparql types and the correctly formatted version.
9
+ GEOSPARQL_TYPES = {
10
+ polygon: :Polygon,
11
+ point: :Point,
12
+ multipoint: :MultiPoint,
13
+ linestring: :LineString,
14
+ multipolygon: :MultiPolygon,
15
+ geometrycollection: :GeometryCollection,
16
+ multiline: :Multiline
17
+ }.freeze
18
+
19
+ # Constant regex containing every GeoSparql data type that finds the type and the type's values.
20
+ GEOMETRY_REGEX = /(#{GEOSPARQL_TYPES.values.join('|')})\(+(.*?)\)+/i
10
21
 
11
22
  # Creates a new instance of GeosparqlToGeojson::Converter
12
23
  #
@@ -39,17 +50,40 @@ module GeosparqlToGeojson
39
50
  GeosparqlToGeojson::GeoJson.new(collect_geosparql_data)
40
51
  end
41
52
 
53
+ private
54
+
42
55
  # Creates a hash of each GeoSparql type present and it's values.
43
56
  def collect_geosparql_data
44
57
  @data_store = {}
45
- GEOMETRY_TYPES.each do |geometry_type|
46
- geosparql_data_match = @geosparql_values.scan(/#{geometry_type}\(+(.*?)\)+/i)
47
- @data_store[geometry_type.to_sym] = geosparql_data_match unless geosparql_data_match.empty?
58
+
59
+ if @geosparql_values.is_a?(Array)
60
+ @geosparql_values.each do |value|
61
+ scanned_data = value.scan(GEOMETRY_REGEX)
62
+ populate_data_hash(scanned_data)
63
+ end
64
+ else
65
+ scanned_data = @geosparql_values.scan(GEOMETRY_REGEX)
66
+ populate_data_hash(scanned_data)
48
67
  end
49
68
 
50
69
  format_geosparql_data
51
70
  end
52
71
 
72
+ # Sets the hash key to the GeoSparql type if it isn't already set and adds the GeoSparql values
73
+ def populate_data_hash(scanned_geosparql_data)
74
+ scanned_geosparql_data.each do |data|
75
+ key = convert_key_to_correct_format(data[0])
76
+ @data_store[key] = [] unless @data_store[key]
77
+ @data_store[key] << data[1]
78
+ end
79
+ end
80
+
81
+ # Converts the key that's captured by the regex into the correct format
82
+ def convert_key_to_correct_format(key)
83
+ key = key.downcase
84
+ GEOSPARQL_TYPES[key.to_sym]
85
+ end
86
+
53
87
  # Splits values into arrays and converts them into floats.
54
88
  def format_geosparql_data
55
89
  @data_store.keys.each do |key|
@@ -69,7 +103,9 @@ module GeosparqlToGeojson
69
103
  #
70
104
  # @return [Array]
71
105
  def format_data(values, key)
72
- values = @reverse ? values[0].split(/[\s]|[,]/).map!(&:to_f).reverse : values[0].split(/[\s]|[,]/).map!(&:to_f)
106
+ values = values.first if values.is_a?(Array)
107
+ values = values.split(/[\s]|[,]/).map!(&:to_f)
108
+ values.reverse! if @reverse
73
109
 
74
110
  values = values.each_slice(2).to_a if key != :Point
75
111
  values = [values] if key != :Point && key != :LineString
@@ -81,7 +117,7 @@ module GeosparqlToGeojson
81
117
  @data_hash_array = []
82
118
  @data_store.keys.each do |key|
83
119
  @data_store[key.to_sym].each do |data|
84
- @data_hash_array << generate_feature_hash({ type: key.to_s, coordinates: data })
120
+ @data_hash_array << generate_feature_hash(type: key.to_s, coordinates: data)
85
121
  end
86
122
  end
87
123
 
@@ -103,11 +139,10 @@ module GeosparqlToGeojson
103
139
  #
104
140
  # @return [String] a string of GeoJSON
105
141
  def generate_feature_collection
106
- data_hash = {
107
- type: 'FeatureCollection',
108
- features: @data_hash_array
109
- }
110
- data_hash.to_json
142
+ {
143
+ type: 'FeatureCollection',
144
+ features: @data_hash_array
145
+ }.to_json
111
146
  end
112
147
  end
113
148
  end
@@ -1,3 +1,3 @@
1
1
  module GeosparqlToGeojson
2
- VERSION = '0.1.2'
2
+ VERSION = '0.1.3'
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geosparql_to_geojson
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.2
4
+ version: 0.1.3
5
5
  platform: ruby
6
6
  authors:
7
7
  - Callum Neve-Jones
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-07-06 00:00:00.000000000 Z
11
+ date: 2017-07-17 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: json-schema