charta 0.2.3 → 0.3.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 (37) hide show
  1. checksums.yaml +4 -4
  2. data/charta.gemspec +20 -20
  3. data/lib/charta.rb +36 -89
  4. data/lib/charta/coordinates.rb +17 -17
  5. data/lib/charta/ewkt_serializer.rb +10 -1
  6. data/lib/charta/factory/ewkt_feature_builder.rb +17 -0
  7. data/lib/charta/factory/feature_factory_base.rb +15 -0
  8. data/lib/charta/factory/simple_feature_factory.rb +50 -0
  9. data/lib/charta/factory/simple_geometry_factory.rb +46 -0
  10. data/lib/charta/factory/srid_provider.rb +36 -0
  11. data/lib/charta/factory/transformers/ewkt_passthrough.rb +20 -0
  12. data/lib/charta/factory/transformers/ewkt_transformer.rb +20 -0
  13. data/lib/charta/factory/transformers/ewkt_transformer_chain.rb +42 -0
  14. data/lib/charta/factory/transformers/from_geo_json_transformer.rb +20 -0
  15. data/lib/charta/factory/transformers/from_gml_transformer.rb +20 -0
  16. data/lib/charta/factory/transformers/from_kml_transformer.rb +20 -0
  17. data/lib/charta/factory/transformers/from_wkb_transformer.rb +24 -0
  18. data/lib/charta/factory/transformers/transformation_error.rb +10 -0
  19. data/lib/charta/geo_json.rb +4 -1
  20. data/lib/charta/geometry.rb +22 -12
  21. data/lib/charta/geometry_collection.rb +6 -4
  22. data/lib/charta/gml.rb +18 -2
  23. data/lib/charta/gml_import.rb +24 -24
  24. data/lib/charta/kml.rb +21 -3
  25. data/lib/charta/multi_polygon.rb +1 -1
  26. data/lib/charta/point.rb +2 -1
  27. data/lib/charta/version.rb +1 -1
  28. data/lib/rgeo/svg.rb +44 -44
  29. metadata +65 -46
  30. data/.gitignore +0 -13
  31. data/.gitlab-ci.yml +0 -14
  32. data/.travis.yml +0 -7
  33. data/CODE_OF_CONDUCT.md +0 -74
  34. data/Gemfile +0 -4
  35. data/LICENSE.txt +0 -21
  36. data/README.md +0 -44
  37. data/Rakefile +0 -10
data/lib/charta/kml.rb CHANGED
@@ -22,7 +22,9 @@ module Charta
22
22
  end
23
23
 
24
24
  def to_ewkt
25
- "SRID=#{@srid};" + self.class.document_to_ewkt(@kml)
25
+ srid_part = @srid.nil? ? '' : "SRID=#{@srid};"
26
+
27
+ srid_part + self.class.document_to_ewkt(@kml)
26
28
  end
27
29
 
28
30
  def valid?
@@ -46,15 +48,18 @@ module Charta
46
48
 
47
49
  def document_to_ewkt(kml)
48
50
  return 'GEOMETRYCOLLECTION EMPTY' if kml.css('Document').nil?
51
+
49
52
  'GEOMETRYCOLLECTION(' + kml.css('Placemark').collect do |placemark|
50
53
  TAGS.collect do |tag|
51
54
  next if placemark.css(tag).empty?
55
+
52
56
  placemark.css(tag).collect do |fragment|
53
57
  object_to_ewkt(fragment)
54
58
  end.compact.join(', ')
55
59
  end.compact.join(', ')
56
60
  end.compact.join(', ') + ')'
57
61
  end
62
+
58
63
  alias geometry_collection_to_ewkt document_to_ewkt
59
64
 
60
65
  def feature_to_ewkt(kml)
@@ -63,13 +68,14 @@ module Charta
63
68
 
64
69
  def point_to_ewkt(kml)
65
70
  return 'POINT EMPTY' if kml.css('coordinates').nil?
71
+
66
72
  'POINT(' + kml.css('coordinates').collect { |coords| coords.content.split ',' }.flatten.join(' ') + ')'
67
73
  end
68
74
 
69
75
  def line_string_to_ewkt(kml)
70
76
  return 'LINESTRING EMPTY' if kml.css('coordinates').nil?
71
77
 
72
- 'LINESTRING(' + kml.css('coordinates').collect { |coords| coords.content.split(/\r\n|\n| /) }.flatten.reject(&:empty?).collect { |c| c.split ',' }.collect { |dimension| %(#{dimension.first} #{dimension[1]}) }.join(', ') + ')'
78
+ "LINESTRING(#{transform_coordinates(kml)})"
73
79
  end
74
80
 
75
81
  def polygon_to_ewkt(kml)
@@ -79,7 +85,7 @@ module Charta
79
85
  next if kml.css(boundary).empty?
80
86
 
81
87
  kml.css(boundary).collect do |hole|
82
- '(' + hole.css('coordinates').collect { |coords| coords.content.split(/\r\n|\n| /) }.flatten.reject(&:empty?).collect { |c| c.split ',' }.collect { |dimension| %(#{dimension.first} #{dimension[1]}) }.join(', ') + ')'
88
+ "(#{transform_coordinates(hole)})"
83
89
  end.join(', ')
84
90
  end.compact.join(', ') + ')'
85
91
  end
@@ -87,6 +93,18 @@ module Charta
87
93
  def multigeometry_to_ewkt(_kml)
88
94
  raise :not_implemented
89
95
  end
96
+
97
+ private
98
+
99
+ def transform_coordinates(coordinates)
100
+ coordinates.css('coordinates')
101
+ .collect { |coords| coords.content.split(/\r\n|\n| /) }
102
+ .flatten
103
+ .reject(&:empty?)
104
+ .collect { |c| c.split ',' }
105
+ .collect { |dimension| %(#{dimension.first} #{dimension[1]}) }
106
+ .join(', ')
107
+ end
90
108
  end
91
109
  end
92
110
  end
@@ -15,7 +15,7 @@ module Charta
15
15
 
16
16
  # Extract polygons ordered by 'PointOnSurface' position
17
17
  def polygons
18
- @polygons ||= feature._elements.map do |polygon|
18
+ @polygons ||= feature.elements.map do |polygon|
19
19
  Polygon.new(polygon)
20
20
  end || []
21
21
  end
data/lib/charta/point.rb CHANGED
@@ -12,7 +12,8 @@ module Charta
12
12
  alias latitude y
13
13
 
14
14
  def distance(point)
15
- raise ArgumentError, "wrong type: Charta::Point required" if point.class.name != "Charta::Point"
15
+ raise ArgumentError.new('wrong type: Charta::Point required') if point.class.name != 'Charta::Point'
16
+
16
17
  to_rgeo.distance(point.to_rgeo)
17
18
  end
18
19
  end
@@ -1,3 +1,3 @@
1
1
  module Charta
2
- VERSION = '0.2.3'.freeze
2
+ VERSION = '0.3.0'.freeze
3
3
  end
data/lib/rgeo/svg.rb CHANGED
@@ -7,63 +7,63 @@ module RGeo
7
7
 
8
8
  protected
9
9
 
10
- def encode_point(feature)
11
- 'M' + coordinates(feature)
12
- end
10
+ def encode_point(feature)
11
+ 'M' + coordinates(feature)
12
+ end
13
13
 
14
- def encode_multi_point(feature)
15
- points = []
16
- feature.each do |point|
17
- points << encode_point(point)
14
+ def encode_multi_point(feature)
15
+ points = []
16
+ feature.each do |point|
17
+ points << encode_point(point)
18
+ end
19
+ points.join(' ')
18
20
  end
19
- points.join(' ')
20
- end
21
21
 
22
- def encode_line_string(feature)
23
- points = []
24
- feature.points.each do |point|
25
- points << coordinates(point)
22
+ def encode_line_string(feature)
23
+ points = []
24
+ feature.points.each do |point|
25
+ points << coordinates(point)
26
+ end
27
+ 'M' + points.join('L')
26
28
  end
27
- 'M' + points.join('L')
28
- end
29
29
 
30
- def encode_multi_line_string(feature)
31
- line_strings = []
32
- feature.each do |line_string|
33
- line_strings << encode_line_string(line_string)
30
+ def encode_multi_line_string(feature)
31
+ line_strings = []
32
+ feature.each do |line_string|
33
+ line_strings << encode_line_string(line_string)
34
+ end
35
+ line_strings.join(' ')
34
36
  end
35
- line_strings.join(' ')
36
- end
37
37
 
38
- def encode_polygon(feature)
39
- rings = []
40
- # TODO: Optimize useless last point repetition
41
- rings << encode_line_string(feature.exterior_ring) + 'Z'
42
- feature.interior_rings.each do |ring|
43
- rings << encode_line_string(ring) + 'Z'
38
+ def encode_polygon(feature)
39
+ rings = []
40
+ # TODO: Optimize useless last point repetition
41
+ rings << encode_line_string(feature.exterior_ring) + 'Z'
42
+ feature.interior_rings.each do |ring|
43
+ rings << encode_line_string(ring) + 'Z'
44
+ end
45
+ rings.join(' ')
44
46
  end
45
- rings.join(' ')
46
- end
47
47
 
48
- def encode_multi_polygon(feature)
49
- polygons = []
50
- feature.each do |polygon|
51
- polygons << encode_polygon(polygon)
48
+ def encode_multi_polygon(feature)
49
+ polygons = []
50
+ feature.each do |polygon|
51
+ polygons << encode_polygon(polygon)
52
+ end
53
+ polygons.join(' ')
52
54
  end
53
- polygons.join(' ')
54
- end
55
55
 
56
- def encode_geometry_collection(feature)
57
- geometries = []
58
- feature.each do |geometry|
59
- geometries << encode(geometry)
56
+ def encode_geometry_collection(feature)
57
+ geometries = []
58
+ feature.each do |geometry|
59
+ geometries << encode(geometry)
60
+ end
61
+ geometries.join(' ')
60
62
  end
61
- geometries.join(' ')
62
- end
63
63
 
64
- def coordinates(feature)
65
- feature.x.to_s + ',' + feature.y.to_s
66
- end
64
+ def coordinates(feature)
65
+ feature.x.to_s + ',' + feature.y.to_s
66
+ end
67
67
  end
68
68
  end
69
69
  end
metadata CHANGED
@@ -1,99 +1,113 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: charta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.2.3
4
+ version: 0.3.0
5
5
  platform: ruby
6
6
  authors:
7
- - Brice TEXIER
7
+ - Ekylibre developers
8
8
  autorequire:
9
9
  bindir: bin
10
10
  cert_chain: []
11
- date: 2020-09-08 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
- name: nokogiri
14
+ name: activesupport
15
15
  requirement: !ruby/object:Gem::Requirement
16
16
  requirements:
17
- - - ">="
17
+ - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: 1.7.0
19
+ version: '5.0'
20
20
  type: :runtime
21
21
  prerelease: false
22
22
  version_requirements: !ruby/object:Gem::Requirement
23
23
  requirements:
24
- - - ">="
24
+ - - "~>"
25
25
  - !ruby/object:Gem::Version
26
- version: 1.7.0
26
+ version: '5.0'
27
27
  - !ruby/object:Gem::Dependency
28
- name: rgeo
28
+ name: json
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
- - - "~>"
31
+ - - ">="
32
32
  - !ruby/object:Gem::Version
33
- version: '1.0'
33
+ version: 1.8.0
34
34
  type: :runtime
35
35
  prerelease: false
36
36
  version_requirements: !ruby/object:Gem::Requirement
37
37
  requirements:
38
- - - "~>"
38
+ - - ">="
39
39
  - !ruby/object:Gem::Version
40
- version: '1.0'
40
+ version: 1.8.0
41
41
  - !ruby/object:Gem::Dependency
42
- name: json
42
+ name: nokogiri
43
43
  requirement: !ruby/object:Gem::Requirement
44
44
  requirements:
45
45
  - - ">="
46
46
  - !ruby/object:Gem::Version
47
- version: 1.8.0
47
+ version: 1.7.0
48
48
  type: :runtime
49
49
  prerelease: false
50
50
  version_requirements: !ruby/object:Gem::Requirement
51
51
  requirements:
52
52
  - - ">="
53
53
  - !ruby/object:Gem::Version
54
- version: 1.8.0
54
+ version: 1.7.0
55
+ - !ruby/object:Gem::Dependency
56
+ name: rgeo
57
+ requirement: !ruby/object:Gem::Requirement
58
+ requirements:
59
+ - - "~>"
60
+ - !ruby/object:Gem::Version
61
+ version: '2.0'
62
+ type: :runtime
63
+ prerelease: false
64
+ version_requirements: !ruby/object:Gem::Requirement
65
+ requirements:
66
+ - - "~>"
67
+ - !ruby/object:Gem::Version
68
+ version: '2.0'
55
69
  - !ruby/object:Gem::Dependency
56
70
  name: rgeo-geojson
57
71
  requirement: !ruby/object:Gem::Requirement
58
72
  requirements:
59
73
  - - "~>"
60
74
  - !ruby/object:Gem::Version
61
- version: '1.0'
75
+ version: '2.0'
62
76
  type: :runtime
63
77
  prerelease: false
64
78
  version_requirements: !ruby/object:Gem::Requirement
65
79
  requirements:
66
80
  - - "~>"
67
81
  - !ruby/object:Gem::Version
68
- version: '1.0'
82
+ version: '2.0'
69
83
  - !ruby/object:Gem::Dependency
70
84
  name: rgeo-proj4
71
85
  requirement: !ruby/object:Gem::Requirement
72
86
  requirements:
73
87
  - - "~>"
74
88
  - !ruby/object:Gem::Version
75
- version: '1.0'
89
+ version: '2.0'
76
90
  type: :runtime
77
91
  prerelease: false
78
92
  version_requirements: !ruby/object:Gem::Requirement
79
93
  requirements:
80
94
  - - "~>"
81
95
  - !ruby/object:Gem::Version
82
- version: '1.0'
96
+ version: '2.0'
83
97
  - !ruby/object:Gem::Dependency
84
- name: activesupport
98
+ name: zeitwerk
85
99
  requirement: !ruby/object:Gem::Requirement
86
100
  requirements:
87
101
  - - "~>"
88
102
  - !ruby/object:Gem::Version
89
- version: '5.0'
103
+ version: 2.4.0
90
104
  type: :runtime
91
105
  prerelease: false
92
106
  version_requirements: !ruby/object:Gem::Requirement
93
107
  requirements:
94
108
  - - "~>"
95
109
  - !ruby/object:Gem::Version
96
- version: '5.0'
110
+ version: 2.4.0
97
111
  - !ruby/object:Gem::Dependency
98
112
  name: bundler
99
113
  requirement: !ruby/object:Gem::Requirement
@@ -109,67 +123,72 @@ dependencies:
109
123
  - !ruby/object:Gem::Version
110
124
  version: '2.0'
111
125
  - !ruby/object:Gem::Dependency
112
- name: rake
126
+ name: minitest
113
127
  requirement: !ruby/object:Gem::Requirement
114
128
  requirements:
115
129
  - - "~>"
116
130
  - !ruby/object:Gem::Version
117
- version: '10.0'
131
+ version: '5.0'
118
132
  type: :development
119
133
  prerelease: false
120
134
  version_requirements: !ruby/object:Gem::Requirement
121
135
  requirements:
122
136
  - - "~>"
123
137
  - !ruby/object:Gem::Version
124
- version: '10.0'
138
+ version: '5.0'
125
139
  - !ruby/object:Gem::Dependency
126
- name: minitest
140
+ name: rake
127
141
  requirement: !ruby/object:Gem::Requirement
128
142
  requirements:
129
143
  - - "~>"
130
144
  - !ruby/object:Gem::Version
131
- version: '5.0'
145
+ version: '12.0'
132
146
  type: :development
133
147
  prerelease: false
134
148
  version_requirements: !ruby/object:Gem::Requirement
135
149
  requirements:
136
150
  - - "~>"
137
151
  - !ruby/object:Gem::Version
138
- version: '5.0'
152
+ version: '12.0'
139
153
  - !ruby/object:Gem::Dependency
140
- name: byebug
154
+ name: rubocop
141
155
  requirement: !ruby/object:Gem::Requirement
142
156
  requirements:
143
- - - ">="
157
+ - - '='
144
158
  - !ruby/object:Gem::Version
145
- version: '0'
159
+ version: 1.3.1
146
160
  type: :development
147
161
  prerelease: false
148
162
  version_requirements: !ruby/object:Gem::Requirement
149
163
  requirements:
150
- - - ">="
164
+ - - '='
151
165
  - !ruby/object:Gem::Version
152
- version: '0'
166
+ version: 1.3.1
153
167
  description:
154
168
  email:
155
- - brice@ekylibre.com
169
+ - dev@ekylibre.com
156
170
  executables: []
157
171
  extensions: []
158
172
  extra_rdoc_files: []
159
173
  files:
160
- - ".gitignore"
161
- - ".gitlab-ci.yml"
162
- - ".travis.yml"
163
- - CODE_OF_CONDUCT.md
164
- - Gemfile
165
- - LICENSE.txt
166
- - README.md
167
- - Rakefile
168
174
  - charta.gemspec
169
175
  - lib/charta.rb
170
176
  - lib/charta/bounding_box.rb
171
177
  - lib/charta/coordinates.rb
172
178
  - lib/charta/ewkt_serializer.rb
179
+ - lib/charta/factory/ewkt_feature_builder.rb
180
+ - lib/charta/factory/feature_factory_base.rb
181
+ - lib/charta/factory/simple_feature_factory.rb
182
+ - lib/charta/factory/simple_geometry_factory.rb
183
+ - lib/charta/factory/srid_provider.rb
184
+ - lib/charta/factory/transformers/ewkt_passthrough.rb
185
+ - lib/charta/factory/transformers/ewkt_transformer.rb
186
+ - lib/charta/factory/transformers/ewkt_transformer_chain.rb
187
+ - lib/charta/factory/transformers/from_geo_json_transformer.rb
188
+ - lib/charta/factory/transformers/from_gml_transformer.rb
189
+ - lib/charta/factory/transformers/from_kml_transformer.rb
190
+ - lib/charta/factory/transformers/from_wkb_transformer.rb
191
+ - lib/charta/factory/transformers/transformation_error.rb
173
192
  - lib/charta/geo_json.rb
174
193
  - lib/charta/geojson_import.rb
175
194
  - lib/charta/geometry.rb
@@ -183,9 +202,9 @@ files:
183
202
  - lib/charta/polygon.rb
184
203
  - lib/charta/version.rb
185
204
  - lib/rgeo/svg.rb
186
- homepage: https://github.com/ekylibre/charta
205
+ homepage: https://gitlab.com/ekylibre
187
206
  licenses:
188
- - MIT
207
+ - AGPL-3.0-only
189
208
  metadata: {}
190
209
  post_install_message:
191
210
  rdoc_options: []
@@ -195,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
195
214
  requirements:
196
215
  - - ">="
197
216
  - !ruby/object:Gem::Version
198
- version: '0'
217
+ version: 2.6.0
199
218
  required_rubygems_version: !ruby/object:Gem::Requirement
200
219
  requirements:
201
220
  - - ">="