armg 0.5.2 → 0.6.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/README.md +6 -1
- data/lib/armg.rb +2 -1
- data/lib/armg/utils.rb +15 -0
- data/lib/armg/version.rb +1 -1
- data/lib/armg/wkb_deserializer.rb +3 -6
- data/lib/armg/wkb_serializer.rb +2 -2
- data/lib/armg/wkt_deserializer.rb +15 -9
- data/lib/armg/wkt_serializer.rb +14 -7
- metadata +2 -1
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 96bf61ee4daaa6960675b6f6101419636ecc4a7f
|
4
|
+
data.tar.gz: 6e2c5da9a1c844b0ac43ab44ab3d7b460f904adc
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 2900aa7568ee144478e6ae4c4da3323693b6bb9a764676ed1a5f32580b8908ae12cb81e642cb695e2d9360a8698266b38b569671a56b6f82e4a86f5c26388270
|
7
|
+
data.tar.gz: 268ea2385fd6e0c6ccfa634c64889812c9d708a402eac724ea26dacfffecd02e7b9d6b5d6b97e704fa0a8b670eae98ae9b2f17c4718fe5d789242d990897f354
|
data/README.md
CHANGED
@@ -77,7 +77,7 @@ Geom.take
|
|
77
77
|
#=> #<Geom id: 1, location: #<RGeo::Geographic::SphericalPointImpl:0x... "POINT (-122.1 47.3)">>
|
78
78
|
```
|
79
79
|
|
80
|
-
## Using custom
|
80
|
+
## Using custom serializer
|
81
81
|
|
82
82
|
```ruby
|
83
83
|
class CustomSerializer
|
@@ -112,3 +112,8 @@ bundle exec appraisal ar51 rake
|
|
112
112
|
# ARMG_TEST_MYSQL_PORT=10057 bundle exec appraisal ar51 rake # MySQL 5.7
|
113
113
|
# ARMG_TEST_MYSQL_PORT=10057 ARMG_TEST_MYSQL_ENGINE=InnoDB bundle exec appraisal ar51 rake
|
114
114
|
```
|
115
|
+
|
116
|
+
## Related links
|
117
|
+
|
118
|
+
* [rgeo/rgeo: Geospatial data library for Ruby](https://github.com/rgeo/rgeo)
|
119
|
+
* [MySQL :: MySQL 5.7 Reference Manual :: 11.5.3 Supported Spatial Data Formats](https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html)
|
data/lib/armg.rb
CHANGED
@@ -4,6 +4,7 @@ require 'armg/version'
|
|
4
4
|
|
5
5
|
ActiveSupport.on_load(:active_record) do
|
6
6
|
require 'active_record/connection_adapters/abstract_mysql_adapter'
|
7
|
+
require 'armg/utils'
|
7
8
|
require 'armg/wkb_serializer'
|
8
9
|
require 'armg/wkb_deserializer'
|
9
10
|
require 'armg/wkt_serializer'
|
@@ -13,7 +14,7 @@ ActiveSupport.on_load(:active_record) do
|
|
13
14
|
require 'armg/table_definition_ext'
|
14
15
|
require 'armg/armg'
|
15
16
|
|
16
|
-
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::NATIVE_DATABASE_TYPES[:geometry] = { name:
|
17
|
+
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter::NATIVE_DATABASE_TYPES[:geometry] = { name: 'geometry' }
|
17
18
|
ActiveRecord::ConnectionAdapters::AbstractMysqlAdapter.prepend(Armg::AbstractMysqlAdapterExt)
|
18
19
|
ActiveRecord::Type.register(:geometry, Armg::MysqlGeometry, adapter: :mysql2)
|
19
20
|
ActiveRecord::ConnectionAdapters::MySQL::TableDefinition.prepend(Armg::TableDefinitionExt)
|
data/lib/armg/utils.rb
ADDED
@@ -0,0 +1,15 @@
|
|
1
|
+
# see https://dev.mysql.com/doc/refman/5.7/en/gis-data-formats.html
|
2
|
+
module Armg::Utils
|
3
|
+
def mysql_geometry_to_wkb(wkb)
|
4
|
+
wkb = wkb.b
|
5
|
+
srid = wkb.slice!(0..3)
|
6
|
+
wkb[4] = "\x20"
|
7
|
+
wkb.insert(5, srid)
|
8
|
+
end
|
9
|
+
module_function :mysql_geometry_to_wkb
|
10
|
+
|
11
|
+
def pack_srid(srid)
|
12
|
+
[srid].pack('L<')
|
13
|
+
end
|
14
|
+
module_function :pack_srid
|
15
|
+
end
|
data/lib/armg/version.rb
CHANGED
@@ -3,16 +3,13 @@ class Armg::WkbDeserializer
|
|
3
3
|
support_ewkb: true,
|
4
4
|
}
|
5
5
|
|
6
|
-
def initialize(factory
|
6
|
+
def initialize(factory: nil, **options)
|
7
7
|
options = DEFAULT_OPTIONS.merge(options)
|
8
8
|
@wkb_parser = RGeo::WKRep::WKBParser.new(factory, options)
|
9
9
|
end
|
10
10
|
|
11
|
-
def deserialize(
|
12
|
-
wkb =
|
13
|
-
srid = wkb.slice!(0..3)
|
14
|
-
wkb[4] = "\x20"
|
15
|
-
wkb.insert(5, srid)
|
11
|
+
def deserialize(mysql_geometry)
|
12
|
+
wkb = Armg::Utils.mysql_geometry_to_wkb(mysql_geometry)
|
16
13
|
@wkb_parser.parse(wkb)
|
17
14
|
end
|
18
15
|
end
|
data/lib/armg/wkb_serializer.rb
CHANGED
@@ -4,13 +4,13 @@ class Armg::WkbSerializer
|
|
4
4
|
little_endian: true,
|
5
5
|
}
|
6
6
|
|
7
|
-
def initialize(options
|
7
|
+
def initialize(**options)
|
8
8
|
options = DEFAULT_OPTIONS.merge(options)
|
9
9
|
@wkb_generator = RGeo::WKRep::WKBGenerator.new(options)
|
10
10
|
end
|
11
11
|
|
12
12
|
def serialize(obj)
|
13
|
-
srid =
|
13
|
+
srid = Armg::Utils.pack_srid(obj.srid)
|
14
14
|
srid + @wkb_generator.generate(obj)
|
15
15
|
end
|
16
16
|
end
|
@@ -1,17 +1,23 @@
|
|
1
|
-
class Armg::WktDeserializer
|
2
|
-
|
1
|
+
class Armg::WktDeserializer
|
2
|
+
DEFAULT_WKB_PARSER_OPTIONS = {
|
3
|
+
support_ewkb: true,
|
4
|
+
}
|
5
|
+
|
6
|
+
DEFAULT_WKT_GENERATOR_OPTIONS = {
|
3
7
|
tag_format: :ewkt,
|
4
8
|
#emit_ewkt_srid: true,
|
5
9
|
}
|
6
10
|
|
7
|
-
def initialize(factory
|
8
|
-
|
9
|
-
|
10
|
-
@
|
11
|
+
def initialize(factory: nil, wkb_parser_options: {}, wkt_generator_options: {})
|
12
|
+
@wkb_parser = RGeo::WKRep::WKBParser.new(factory,
|
13
|
+
DEFAULT_WKB_PARSER_OPTIONS.merge(wkb_parser_options))
|
14
|
+
@wkt_generator = RGeo::WKRep::WKTGenerator.new(
|
15
|
+
DEFAULT_WKT_GENERATOR_OPTIONS.merge(wkt_generator_options))
|
11
16
|
end
|
12
17
|
|
13
|
-
def deserialize(
|
14
|
-
|
15
|
-
@
|
18
|
+
def deserialize(mysql_geometry)
|
19
|
+
wkb = Armg::Utils.mysql_geometry_to_wkb(mysql_geometry)
|
20
|
+
obj = @wkb_parser.parse(wkb)
|
21
|
+
@wkt_generator.generate(obj)
|
16
22
|
end
|
17
23
|
end
|
data/lib/armg/wkt_serializer.rb
CHANGED
@@ -1,16 +1,23 @@
|
|
1
|
-
class Armg::WktSerializer
|
2
|
-
|
1
|
+
class Armg::WktSerializer
|
2
|
+
DEFAULT_WKB_GENERATOR_OPTIONS = {
|
3
|
+
type_format: :ewkb,
|
4
|
+
little_endian: true,
|
5
|
+
}
|
6
|
+
|
7
|
+
DEFAULT_WKT_PARSER_OPTIONS = {
|
3
8
|
support_ewkt: true
|
4
9
|
}
|
5
10
|
|
6
|
-
def initialize(factory
|
7
|
-
|
8
|
-
|
9
|
-
@wkt_parser = RGeo::WKRep::WKTParser.new(factory,
|
11
|
+
def initialize(factory: nil, wkb_generator_options: {}, wkt_parser_options: {})
|
12
|
+
@wkb_generator = RGeo::WKRep::WKBGenerator.new(
|
13
|
+
DEFAULT_WKB_GENERATOR_OPTIONS.merge(wkb_generator_options))
|
14
|
+
@wkt_parser = RGeo::WKRep::WKTParser.new(factory,
|
15
|
+
DEFAULT_WKT_PARSER_OPTIONS.merge(wkt_parser_options))
|
10
16
|
end
|
11
17
|
|
12
18
|
def serialize(wkt)
|
13
19
|
obj = @wkt_parser.parse(wkt)
|
14
|
-
|
20
|
+
srid = Armg::Utils.pack_srid(obj.srid)
|
21
|
+
srid + @wkb_generator.generate(obj)
|
15
22
|
end
|
16
23
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: armg
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.6.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Genki Sugawara
|
@@ -148,6 +148,7 @@ files:
|
|
148
148
|
- lib/armg/armg.rb
|
149
149
|
- lib/armg/mysql_geometry.rb
|
150
150
|
- lib/armg/table_definition_ext.rb
|
151
|
+
- lib/armg/utils.rb
|
151
152
|
- lib/armg/version.rb
|
152
153
|
- lib/armg/wkb_deserializer.rb
|
153
154
|
- lib/armg/wkb_serializer.rb
|