@@ -9,38 +9,67 @@ module RedmineGtt
9
9
# between.
10
10
module Conversions
11
11
12
- class WkbToJson
12
+ class GeomToJson
13
13
def initialize ( )
14
14
@factory = RGeo ::GeoJSON ::EntityFactory . instance
15
- @parser = RGeo ::WKRep ::WKBParser . new (
16
- support_ewkb : true ,
17
- default_srid : 4326
18
- )
19
15
end
20
16
21
- def to_json ( wkb , id : nil , properties : nil )
22
- RGeo ::GeoJSON . encode feature ( wkb , id , properties )
17
+ def to_json ( object , id : nil , properties : nil )
18
+ RGeo ::GeoJSON . encode feature ( object , id , properties )
23
19
end
24
20
25
21
def collection_to_json ( data )
26
22
RGeo ::GeoJSON . encode @factory . feature_collection (
27
- data . map { |wkb , id , props | feature wkb , id , props }
23
+ data . map { |object , id , props | feature object , id , props }
28
24
)
29
25
end
30
26
31
27
private
32
28
33
- def feature ( wkb , id , properties = nil )
34
- @factory . feature @parser . parse ( wkb ) , id , ( properties || { } )
29
+ def feature ( object , id , properties = nil )
30
+ @factory . feature object , id , ( properties || { } )
35
31
end
32
+ end
36
33
34
+ class WkbToGeom
35
+ def initialize ( )
36
+ @parser = RGeo ::WKRep ::WKBParser . new (
37
+ support_ewkb : true ,
38
+ default_srid : 4326
39
+ )
40
+ end
41
+
42
+ def self . call ( wkb )
43
+ new . call wkb
44
+ end
45
+
46
+ def call ( wkb )
47
+ @parser . parse ( wkb )
48
+ end
37
49
end
38
50
51
+
39
52
# Turns database WKB into geometry attribute string
40
53
def self . wkb_to_json ( wkb , id : nil , properties : nil )
41
- WkbToJson . new . to_json ( wkb , id : id , properties : properties )
54
+ geom_to_json WkbToGeom . ( wkb ) , id : id , properties : properties
42
55
end
43
56
57
+ # turns Rgeo object into GeoJSON
58
+ def self . geom_to_json ( object , id : nil , properties : nil )
59
+ GeomToJson . new . to_json ( object , id : id , properties : properties )
60
+ end
61
+
62
+ # Turn geometry attribute string (GeoJSON) into Rgeo object for database
63
+ # use
64
+ def self . to_geom ( geometry )
65
+ geojson = JSON . parse ( geometry )
66
+ RGeo ::GeoJSON . decode (
67
+ geojson ,
68
+ json_parser : :json ,
69
+ geo_factory : RGeo ::Cartesian . preferred_factory ( srid : 4326 )
70
+ ) . geometry
71
+ end
72
+
44
73
# Turn geometry attribute string into WKB for database use
45
74
def self . to_wkb ( geometry )
46
75
geojson = JSON . parse ( geometry )
0 commit comments