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.
- checksums.yaml +4 -4
- data/charta.gemspec +20 -20
- data/lib/charta.rb +36 -89
- data/lib/charta/coordinates.rb +17 -17
- data/lib/charta/ewkt_serializer.rb +10 -1
- data/lib/charta/factory/ewkt_feature_builder.rb +17 -0
- data/lib/charta/factory/feature_factory_base.rb +15 -0
- data/lib/charta/factory/simple_feature_factory.rb +50 -0
- data/lib/charta/factory/simple_geometry_factory.rb +46 -0
- data/lib/charta/factory/srid_provider.rb +36 -0
- data/lib/charta/factory/transformers/ewkt_passthrough.rb +20 -0
- data/lib/charta/factory/transformers/ewkt_transformer.rb +20 -0
- data/lib/charta/factory/transformers/ewkt_transformer_chain.rb +42 -0
- data/lib/charta/factory/transformers/from_geo_json_transformer.rb +20 -0
- data/lib/charta/factory/transformers/from_gml_transformer.rb +20 -0
- data/lib/charta/factory/transformers/from_kml_transformer.rb +20 -0
- data/lib/charta/factory/transformers/from_wkb_transformer.rb +24 -0
- data/lib/charta/factory/transformers/transformation_error.rb +10 -0
- data/lib/charta/geo_json.rb +4 -1
- data/lib/charta/geometry.rb +22 -12
- data/lib/charta/geometry_collection.rb +6 -4
- data/lib/charta/gml.rb +18 -2
- data/lib/charta/gml_import.rb +24 -24
- data/lib/charta/kml.rb +21 -3
- data/lib/charta/multi_polygon.rb +1 -1
- data/lib/charta/point.rb +2 -1
- data/lib/charta/version.rb +1 -1
- data/lib/rgeo/svg.rb +44 -44
- metadata +65 -46
- data/.gitignore +0 -13
- data/.gitlab-ci.yml +0 -14
- data/.travis.yml +0 -7
- data/CODE_OF_CONDUCT.md +0 -74
- data/Gemfile +0 -4
- data/LICENSE.txt +0 -21
- data/README.md +0 -44
- 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};"
|
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
|
-
|
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
|
-
|
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
|
data/lib/charta/multi_polygon.rb
CHANGED
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
|
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
|
data/lib/charta/version.rb
CHANGED
data/lib/rgeo/svg.rb
CHANGED
@@ -7,63 +7,63 @@ module RGeo
|
|
7
7
|
|
8
8
|
protected
|
9
9
|
|
10
|
-
|
11
|
-
|
12
|
-
|
10
|
+
def encode_point(feature)
|
11
|
+
'M' + coordinates(feature)
|
12
|
+
end
|
13
13
|
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
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
|
-
|
23
|
-
|
24
|
-
|
25
|
-
|
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
|
-
|
31
|
-
|
32
|
-
|
33
|
-
|
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
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
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
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
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
|
-
|
57
|
-
|
58
|
-
|
59
|
-
|
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
|
-
|
65
|
-
|
66
|
-
|
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.
|
4
|
+
version: 0.3.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
|
-
-
|
7
|
+
- Ekylibre developers
|
8
8
|
autorequire:
|
9
9
|
bindir: bin
|
10
10
|
cert_chain: []
|
11
|
-
date:
|
11
|
+
date: 2021-02-15 00:00:00.000000000 Z
|
12
12
|
dependencies:
|
13
13
|
- !ruby/object:Gem::Dependency
|
14
|
-
name:
|
14
|
+
name: activesupport
|
15
15
|
requirement: !ruby/object:Gem::Requirement
|
16
16
|
requirements:
|
17
|
-
- - "
|
17
|
+
- - "~>"
|
18
18
|
- !ruby/object:Gem::Version
|
19
|
-
version:
|
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:
|
26
|
+
version: '5.0'
|
27
27
|
- !ruby/object:Gem::Dependency
|
28
|
-
name:
|
28
|
+
name: json
|
29
29
|
requirement: !ruby/object:Gem::Requirement
|
30
30
|
requirements:
|
31
|
-
- - "
|
31
|
+
- - ">="
|
32
32
|
- !ruby/object:Gem::Version
|
33
|
-
version:
|
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:
|
40
|
+
version: 1.8.0
|
41
41
|
- !ruby/object:Gem::Dependency
|
42
|
-
name:
|
42
|
+
name: nokogiri
|
43
43
|
requirement: !ruby/object:Gem::Requirement
|
44
44
|
requirements:
|
45
45
|
- - ">="
|
46
46
|
- !ruby/object:Gem::Version
|
47
|
-
version: 1.
|
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.
|
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: '
|
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: '
|
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: '
|
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: '
|
96
|
+
version: '2.0'
|
83
97
|
- !ruby/object:Gem::Dependency
|
84
|
-
name:
|
98
|
+
name: zeitwerk
|
85
99
|
requirement: !ruby/object:Gem::Requirement
|
86
100
|
requirements:
|
87
101
|
- - "~>"
|
88
102
|
- !ruby/object:Gem::Version
|
89
|
-
version:
|
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:
|
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:
|
126
|
+
name: minitest
|
113
127
|
requirement: !ruby/object:Gem::Requirement
|
114
128
|
requirements:
|
115
129
|
- - "~>"
|
116
130
|
- !ruby/object:Gem::Version
|
117
|
-
version: '
|
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: '
|
138
|
+
version: '5.0'
|
125
139
|
- !ruby/object:Gem::Dependency
|
126
|
-
name:
|
140
|
+
name: rake
|
127
141
|
requirement: !ruby/object:Gem::Requirement
|
128
142
|
requirements:
|
129
143
|
- - "~>"
|
130
144
|
- !ruby/object:Gem::Version
|
131
|
-
version: '
|
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: '
|
152
|
+
version: '12.0'
|
139
153
|
- !ruby/object:Gem::Dependency
|
140
|
-
name:
|
154
|
+
name: rubocop
|
141
155
|
requirement: !ruby/object:Gem::Requirement
|
142
156
|
requirements:
|
143
|
-
- -
|
157
|
+
- - '='
|
144
158
|
- !ruby/object:Gem::Version
|
145
|
-
version:
|
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:
|
166
|
+
version: 1.3.1
|
153
167
|
description:
|
154
168
|
email:
|
155
|
-
-
|
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://
|
205
|
+
homepage: https://gitlab.com/ekylibre
|
187
206
|
licenses:
|
188
|
-
-
|
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:
|
217
|
+
version: 2.6.0
|
199
218
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
200
219
|
requirements:
|
201
220
|
- - ">="
|