charta 0.1.18 → 0.3.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (37) hide show
  1. checksums.yaml +4 -4
  2. data/charta.gemspec +21 -19
  3. data/lib/charta.rb +38 -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 +45 -25
  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 +84 -37
  30. data/.gitignore +0 -12
  31. data/.gitlab-ci.yml +0 -13
  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
@@ -63,30 +63,30 @@ class GmlImport
63
63
 
64
64
  private
65
65
 
66
- def featurize(node)
67
- if node.element? && node.xpath('.//gml:Polygon')
68
- geojson_feature = {}
69
-
70
- geometry = node.xpath('.//gml:Polygon')
71
- geometry.first['srsName'] = 'EPSG:2154'
72
-
73
- if ::Charta::GML.valid?(geometry)
74
-
75
- # properties
76
- id = (Time.zone.now.to_i.to_s + Time.zone.now.usec.to_s)
77
-
78
- geojson_feature = {
79
- type: 'Feature',
80
- properties: {
81
- internal_id: id
82
- }.reject { |_, v| v.nil? },
83
- geometry: ::Charta.new_geometry(geometry.to_xml, nil, 'gml').transform(:WGS84).to_geojson
84
- }.reject { |_, v| v.nil? }
85
-
86
- return geojson_feature
87
- else
88
- return false
66
+ def featurize(node)
67
+ if node.element? && node.xpath('.//gml:Polygon')
68
+ geojson_feature = {}
69
+
70
+ geometry = node.xpath('.//gml:Polygon')
71
+ geometry.first['srsName'] = 'EPSG:2154'
72
+
73
+ if ::Charta::GML.valid?(geometry)
74
+
75
+ # properties
76
+ id = (Time.zone.now.to_i.to_s + Time.zone.now.usec.to_s)
77
+
78
+ geojson_feature = {
79
+ type: 'Feature',
80
+ properties: {
81
+ internal_id: id
82
+ }.reject { |_, v| v.nil? },
83
+ geometry: ::Charta.new_geometry(geometry.to_xml, nil, 'gml').transform(:WGS84).to_geojson
84
+ }.reject { |_, v| v.nil? }
85
+
86
+ return geojson_feature
87
+ else
88
+ return false
89
+ end
89
90
  end
90
91
  end
91
- end
92
92
  end
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.1.18'.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,15 +1,43 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: charta
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.18
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-12-09 00:00:00.000000000 Z
11
+ date: 2021-02-15 00:00:00.000000000 Z
12
12
  dependencies:
13
+ - !ruby/object:Gem::Dependency
14
+ name: activesupport
15
+ requirement: !ruby/object:Gem::Requirement
16
+ requirements:
17
+ - - "~>"
18
+ - !ruby/object:Gem::Version
19
+ version: '5.0'
20
+ type: :runtime
21
+ prerelease: false
22
+ version_requirements: !ruby/object:Gem::Requirement
23
+ requirements:
24
+ - - "~>"
25
+ - !ruby/object:Gem::Version
26
+ version: '5.0'
27
+ - !ruby/object:Gem::Dependency
28
+ name: json
29
+ requirement: !ruby/object:Gem::Requirement
30
+ requirements:
31
+ - - ">="
32
+ - !ruby/object:Gem::Version
33
+ version: 1.8.0
34
+ type: :runtime
35
+ prerelease: false
36
+ version_requirements: !ruby/object:Gem::Requirement
37
+ requirements:
38
+ - - ">="
39
+ - !ruby/object:Gem::Version
40
+ version: 1.8.0
13
41
  - !ruby/object:Gem::Dependency
14
42
  name: nokogiri
15
43
  requirement: !ruby/object:Gem::Requirement
@@ -30,70 +58,70 @@ dependencies:
30
58
  requirements:
31
59
  - - "~>"
32
60
  - !ruby/object:Gem::Version
33
- version: 0.6.0
61
+ version: '2.0'
34
62
  type: :runtime
35
63
  prerelease: false
36
64
  version_requirements: !ruby/object:Gem::Requirement
37
65
  requirements:
38
66
  - - "~>"
39
67
  - !ruby/object:Gem::Version
40
- version: 0.6.0
68
+ version: '2.0'
41
69
  - !ruby/object:Gem::Dependency
42
- name: json
70
+ name: rgeo-geojson
43
71
  requirement: !ruby/object:Gem::Requirement
44
72
  requirements:
45
- - - ">="
73
+ - - "~>"
46
74
  - !ruby/object:Gem::Version
47
- version: 1.8.0
75
+ version: '2.0'
48
76
  type: :runtime
49
77
  prerelease: false
50
78
  version_requirements: !ruby/object:Gem::Requirement
51
79
  requirements:
52
- - - ">="
80
+ - - "~>"
53
81
  - !ruby/object:Gem::Version
54
- version: 1.8.0
82
+ version: '2.0'
55
83
  - !ruby/object:Gem::Dependency
56
- name: rgeo-geojson
84
+ name: rgeo-proj4
57
85
  requirement: !ruby/object:Gem::Requirement
58
86
  requirements:
59
87
  - - "~>"
60
88
  - !ruby/object:Gem::Version
61
- version: 0.4.3
89
+ version: '2.0'
62
90
  type: :runtime
63
91
  prerelease: false
64
92
  version_requirements: !ruby/object:Gem::Requirement
65
93
  requirements:
66
94
  - - "~>"
67
95
  - !ruby/object:Gem::Version
68
- version: 0.4.3
96
+ version: '2.0'
69
97
  - !ruby/object:Gem::Dependency
70
- name: bundler
98
+ name: zeitwerk
71
99
  requirement: !ruby/object:Gem::Requirement
72
100
  requirements:
73
101
  - - "~>"
74
102
  - !ruby/object:Gem::Version
75
- version: '1.14'
76
- type: :development
103
+ version: 2.4.0
104
+ type: :runtime
77
105
  prerelease: false
78
106
  version_requirements: !ruby/object:Gem::Requirement
79
107
  requirements:
80
108
  - - "~>"
81
109
  - !ruby/object:Gem::Version
82
- version: '1.14'
110
+ version: 2.4.0
83
111
  - !ruby/object:Gem::Dependency
84
- name: rake
112
+ name: bundler
85
113
  requirement: !ruby/object:Gem::Requirement
86
114
  requirements:
87
115
  - - "~>"
88
116
  - !ruby/object:Gem::Version
89
- version: '10.0'
117
+ version: '2.0'
90
118
  type: :development
91
119
  prerelease: false
92
120
  version_requirements: !ruby/object:Gem::Requirement
93
121
  requirements:
94
122
  - - "~>"
95
123
  - !ruby/object:Gem::Version
96
- version: '10.0'
124
+ version: '2.0'
97
125
  - !ruby/object:Gem::Dependency
98
126
  name: minitest
99
127
  requirement: !ruby/object:Gem::Requirement
@@ -109,39 +137,58 @@ dependencies:
109
137
  - !ruby/object:Gem::Version
110
138
  version: '5.0'
111
139
  - !ruby/object:Gem::Dependency
112
- name: byebug
140
+ name: rake
141
+ requirement: !ruby/object:Gem::Requirement
142
+ requirements:
143
+ - - "~>"
144
+ - !ruby/object:Gem::Version
145
+ version: '12.0'
146
+ type: :development
147
+ prerelease: false
148
+ version_requirements: !ruby/object:Gem::Requirement
149
+ requirements:
150
+ - - "~>"
151
+ - !ruby/object:Gem::Version
152
+ version: '12.0'
153
+ - !ruby/object:Gem::Dependency
154
+ name: rubocop
113
155
  requirement: !ruby/object:Gem::Requirement
114
156
  requirements:
115
- - - ">="
157
+ - - '='
116
158
  - !ruby/object:Gem::Version
117
- version: '0'
159
+ version: 1.3.1
118
160
  type: :development
119
161
  prerelease: false
120
162
  version_requirements: !ruby/object:Gem::Requirement
121
163
  requirements:
122
- - - ">="
164
+ - - '='
123
165
  - !ruby/object:Gem::Version
124
- version: '0'
166
+ version: 1.3.1
125
167
  description:
126
168
  email:
127
- - brice@ekylibre.com
169
+ - dev@ekylibre.com
128
170
  executables: []
129
171
  extensions: []
130
172
  extra_rdoc_files: []
131
173
  files:
132
- - ".gitignore"
133
- - ".gitlab-ci.yml"
134
- - ".travis.yml"
135
- - CODE_OF_CONDUCT.md
136
- - Gemfile
137
- - LICENSE.txt
138
- - README.md
139
- - Rakefile
140
174
  - charta.gemspec
141
175
  - lib/charta.rb
142
176
  - lib/charta/bounding_box.rb
143
177
  - lib/charta/coordinates.rb
144
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
145
192
  - lib/charta/geo_json.rb
146
193
  - lib/charta/geojson_import.rb
147
194
  - lib/charta/geometry.rb
@@ -155,9 +202,9 @@ files:
155
202
  - lib/charta/polygon.rb
156
203
  - lib/charta/version.rb
157
204
  - lib/rgeo/svg.rb
158
- homepage: https://github.com/ekylibre/charta
205
+ homepage: https://gitlab.com/ekylibre
159
206
  licenses:
160
- - MIT
207
+ - AGPL-3.0-only
161
208
  metadata: {}
162
209
  post_install_message:
163
210
  rdoc_options: []
@@ -167,7 +214,7 @@ required_ruby_version: !ruby/object:Gem::Requirement
167
214
  requirements:
168
215
  - - ">="
169
216
  - !ruby/object:Gem::Version
170
- version: '0'
217
+ version: 2.6.0
171
218
  required_rubygems_version: !ruby/object:Gem::Requirement
172
219
  requirements:
173
220
  - - ">="