armg 0.5.2 → 0.6.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/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
|