geojson2image 0.1.4 → 0.2.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 CHANGED
@@ -1,7 +1,7 @@
1
1
  ---
2
- SHA1:
3
- metadata.gz: 869a6ee505c2bfc4d2e11f74058260f1f04f2ad6
4
- data.tar.gz: 61ca037b25096bbe65f48ee08f4e871d5a1f3dba
2
+ SHA256:
3
+ metadata.gz: 4d57d980e7f20c09aff8e48a7d87719d8479c46e408434be90572d0906a88a6e
4
+ data.tar.gz: e2161ec9208b0bdbbcf5894b22c58cfe304060c67ac5108816e4bf21ac0b0e80
5
5
  SHA512:
6
- metadata.gz: a555567cfbf41468cfb5b00ba0de420522b5fb9eaed393dbfa9527a9a4732a17b1b3cd226458a816688d175286a9b4d58598d930dec6506abe71cba4daaa2257
7
- data.tar.gz: 918a91049e936dc9eb1f7d41fa652465c68640de2a4155b8db1b2e4c3e96b5b6d42f5f7f0158825215bf791bb8efad6ddb336b652db25ec17d2d3a2f879ad50b
6
+ metadata.gz: 7bc18885348912a802dc18ecf1e01a846069da43256662ec1b8280e120b189caff4fa9b565c32c57270d1646275653a856197874ab900ba5e3f46cfd68831e41
7
+ data.tar.gz: 1bc17400680e42e23bd805cfff2b935ca36c9be6fd98188ede76a16851f35b50dd4b728803af08ee36657797a6c6d93fd7f6bd1cb7caa39b6f7f94a41391b188
data/.gitignore CHANGED
@@ -10,4 +10,5 @@
10
10
  /*.png
11
11
  /*.jpg
12
12
  /*.gif
13
+ /*.json
13
14
  /example/*.json
@@ -1,5 +1,5 @@
1
1
  sudo: false
2
2
  language: ruby
3
3
  rvm:
4
- - 2.3.3
4
+ - 2.5.0
5
5
  before_install: gem install bundler -v 1.13.7
@@ -1,6 +1,6 @@
1
1
  The MIT License (MIT)
2
2
 
3
- Copyright (c) 2017 Bryce Johnston
3
+ Copyright (c) 2018 Bryce Johnston
4
4
 
5
5
  Permission is hereby granted, free of charge, to any person obtaining a copy
6
6
  of this software and associated documentation files (the "Software"), to deal
data/README.md CHANGED
@@ -4,13 +4,11 @@
4
4
 
5
5
  [gem]: https://rubygems.org/gems/geojson2image
6
6
 
7
- Ruby library for generating images from GeoJSON.
8
-
9
- Currently, MultiPolygon and Polygon GeoJSON types should output images properly. Other GeoJSON types have not been thoroughly tested.
7
+ Ruby library for generating images from GeoJSON using the [ChunkyPNG library](https://github.com/wvanbergen/chunky_png).
10
8
 
11
9
  ## Installation
12
10
 
13
- You will need [ImageMagick](http://imagemagick.org/) installed. Then Add this line to your application's Gemfile:
11
+ Add this line to your application's Gemfile:
14
12
 
15
13
  ```ruby
16
14
  gem 'geojson2image'
@@ -34,10 +32,9 @@ g2i = Geojson2image::Convert.new(
34
32
  width: 500,
35
33
  height: 500,
36
34
  padding: 50,
37
- background_color: 'white',
38
- fill_color: 'rgba(0, 158, 40, 0.3)',
39
- stroke_color: 'rgb(0, 107, 27)',
40
- stroke_width: 3,
35
+ background_color: "#ffffff",
36
+ fill_color: "#008000",
37
+ stroke_color: "#006400",
41
38
  output: "output.jpg"
42
39
  )
43
40
  g2i.to_image
@@ -49,8 +46,7 @@ g2i.to_image
49
46
 
50
47
  ### Stroke and Fill Color Options
51
48
 
52
- Valid color values are defined in the ImageMagick Color Names Reference:
53
- https://www.imagemagick.org/script/color.php
49
+ Accepts hex color format
54
50
 
55
51
  Stroke and fill color options can be globally set when initializing a
56
52
  new Geojson2image::Convert object, or you can override them by adding
@@ -59,9 +55,8 @@ feature. Example:
59
55
 
60
56
  ```json
61
57
  "properties": {
62
- "fill_color": "rgba(0, 158, 40, 0.3)",
63
- "stroke_color": "rgb(0, 107, 27)",
64
- "stoke_width": "3",
58
+ "fill_color": "#008000",
59
+ "stroke_color": "#006400"
65
60
  },
66
61
  ```
67
62
  **Example Output**
@@ -76,7 +71,7 @@ To install this gem onto your local machine, run `bundle exec rake install`. To
76
71
 
77
72
  ## Contributing
78
73
 
79
- Bug reports and pull requests are welcome on GitHub at https://github.com/CropQuest/geojson2image.
74
+ Bug reports and pull requests are welcome on GitHub at https://github.com/beaorn/geojson2image.
80
75
 
81
76
 
82
77
  ## License
@@ -7,11 +7,11 @@ Gem::Specification.new do |spec|
7
7
  spec.name = "geojson2image"
8
8
  spec.version = Geojson2image::VERSION
9
9
  spec.authors = ["Bryce Johnston"]
10
- spec.email = ["bryce@agdeveloper.com"]
10
+ spec.email = ["bryce@beaorn.com"]
11
11
 
12
12
  spec.summary = %q{Ruby library for generating images from GeoJSON}
13
13
  spec.description = %q{Ruby library for generating images from GeoJSON}
14
- spec.homepage = "https://github.com/CropQuest/geojson2image"
14
+ spec.homepage = "https://github.com/beaorn/geojson2image"
15
15
  spec.license = "MIT"
16
16
 
17
17
  spec.files = `git ls-files -z`.split("\x0").reject do |f|
@@ -21,8 +21,8 @@ Gem::Specification.new do |spec|
21
21
  spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
22
22
  spec.require_paths = ["lib"]
23
23
 
24
- spec.add_dependency "oj", "~> 3.0"
25
- spec.add_dependency "mini_magick", "~> 4.6"
24
+ spec.add_dependency "oj", "~> 3.6"
25
+ spec.add_dependency "chunky_png", "~> 1.3"
26
26
  spec.add_development_dependency "bundler", "~> 1.13"
27
27
  spec.add_development_dependency "rake", "~> 10.0"
28
28
  spec.add_development_dependency "rspec", "~> 3.0"
@@ -1,25 +1,21 @@
1
1
  require "geojson2image/version"
2
2
  require "oj"
3
- require "mini_magick"
3
+ require "chunky_png"
4
4
 
5
5
  module Geojson2image
6
6
  class Convert
7
- attr_accessor :parsed_json, :width, :height, :background_color,
8
- :border_color, :border_width, :padding, :output, :min_xy, :max_xy,
9
- :coordinates, :width_padding, :height_padding, :global_ratio
10
7
 
11
8
  def initialize(json: nil, width: nil, height: nil, padding: nil,
12
9
  background_color: nil, fill_color: nil, stroke_color: nil,
13
- stroke_width: nil, output: nil)
10
+ output: nil)
14
11
  begin
15
12
  @parsed_json = Oj.load(json)
16
13
  @width = width || 500
17
14
  @height = height || 500
18
15
  @padding = padding || 50
19
- @background_color = background_color || 'white'
20
- @fill_color = fill_color || 'white'
21
- @stroke_color = stroke_color || 'black'
22
- @stroke_width = stroke_width || 3
16
+ @background_color = (background_color.nil? ? ChunkyPNG::Color::WHITE : ChunkyPNG::Color.from_hex(background_color))
17
+ @fill_color = (fill_color.nil? ? ChunkyPNG::Color::TRANSPARENT : ChunkyPNG::Color.from_hex(fill_color))
18
+ @stroke_color = (stroke_color.nil? ? ChunkyPNG::Color::BLACK : ChunkyPNG::Color.from_hex(stroke_color))
23
19
  @output = output || "output.jpg"
24
20
  @min_xy = [-1, -1]
25
21
  @max_xy = [-1, -1]
@@ -27,6 +23,7 @@ module Geojson2image
27
23
  @width_padding = 0
28
24
  @height_padding = 0
29
25
  @global_ratio = 0
26
+ @png = ChunkyPNG::Image.new(@width, @height, @background_color)
30
27
  rescue Oj::ParseError
31
28
  puts "GeoJSON parse error"
32
29
  end
@@ -98,16 +95,16 @@ module Geojson2image
98
95
  @coordinates[i][0] = lon
99
96
  @coordinates[i][1] = Math.log(Math.tan(quarter_pi + 0.5 * lat))
100
97
 
101
- @min_xy[0] = (min_xy[0] == -1 ? @coordinates[i][0] : [min_xy[0], @coordinates[i][0]].min)
102
- @min_xy[1] = (min_xy[1] == -1 ? @coordinates[i][1] : [min_xy[1], @coordinates[i][1]].min)
98
+ @min_xy[0] = (@min_xy[0] == -1 ? @coordinates[i][0] : [@min_xy[0], @coordinates[i][0]].min)
99
+ @min_xy[1] = (@min_xy[1] == -1 ? @coordinates[i][1] : [@min_xy[1], @coordinates[i][1]].min)
103
100
  end
104
101
 
105
102
  @coordinates.each_with_index do |point,i|
106
103
  @coordinates[i][0] = @coordinates[i][0] - @min_xy[0]
107
104
  @coordinates[i][1] = @coordinates[i][1] - @min_xy[1]
108
105
 
109
- @max_xy[0] = (max_xy[0] == -1 ? @coordinates[i][0] : [max_xy[0], @coordinates[i][0]].max)
110
- @max_xy[1] = (max_xy[1] == -1 ? @coordinates[i][1] : [max_xy[1], @coordinates[i][1]].max)
106
+ @max_xy[0] = (@max_xy[0] == -1 ? @coordinates[i][0] : [@max_xy[0], @coordinates[i][0]].max)
107
+ @max_xy[1] = (@max_xy[1] == -1 ? @coordinates[i][1] : [@max_xy[1], @coordinates[i][1]].max)
111
108
  end
112
109
  end
113
110
 
@@ -149,10 +146,16 @@ module Geojson2image
149
146
  end
150
147
 
151
148
  when 'Point'
149
+ tmp_stroke_color = @stroke_color
150
+ if !properties.nil?
151
+ if properties.key?('stroke_color') && !properties['stroke_color'].nil?
152
+ tmp_stroke_color = ChunkyPNG::Color.from_hex(properties['stroke_color'])
153
+ end
154
+ end
155
+
152
156
  point = json['coordinates']
153
157
  new_point = transform_point(point)
154
- draw_point = "color #{new_point[0]},#{new_point[1]} point"
155
- @convert.draw(draw_point)
158
+ @png.compose_pixel(new_point[0], new_point[1], tmp_stroke_color)
156
159
 
157
160
  when 'MultiPoint'
158
161
  json['coordinates'].each do |coordinate|
@@ -164,15 +167,10 @@ module Geojson2image
164
167
  end
165
168
 
166
169
  when 'LineString'
170
+ tmp_stroke_color = @stroke_color
167
171
  if !properties.nil?
168
- if properties.key?('fill_color')
169
- @convert.fill(properties['fill_color'])
170
- end
171
- if properties.key?('stroke_color')
172
- @convert.stroke(properties['stroke_color'])
173
- end
174
- if properties.key?('stroke_width')
175
- @convert.strokewidth(properties['stroke_width'])
172
+ if properties.key?('stroke_color') && !properties['stroke_color'].nil?
173
+ tmp_stroke_color = ChunkyPNG::Color.from_hex(properties['stroke_color'])
176
174
  end
177
175
  end
178
176
 
@@ -181,8 +179,7 @@ module Geojson2image
181
179
  json['coordinates'].each do |point|
182
180
  new_point = transform_point(point)
183
181
  if !last_point.nil?
184
- polyline = "polyline #{last_point[0]},#{last_point[1]}, #{new_point[0]},#{new_point[1]}"
185
- @convert.draw(polyline)
182
+ @png.line(last_point[0], last_point[1], new_point[0], new_point[1], tmp_stroke_color)
186
183
  end
187
184
  last_point = new_point
188
185
  end
@@ -197,15 +194,14 @@ module Geojson2image
197
194
  end
198
195
 
199
196
  when 'Polygon'
197
+ tmp_fill_color = @fill_color
198
+ tmp_stroke_color = @stroke_color
200
199
  if !properties.nil?
201
200
  if properties.key?('fill_color') && !properties['fill_color'].nil?
202
- @convert.fill(properties['fill_color'])
201
+ tmp_fill_color = ChunkyPNG::Color.from_hex(properties['fill_color'])
203
202
  end
204
203
  if properties.key?('stroke_color') && !properties['stroke_color'].nil?
205
- @convert.stroke(properties['stroke_color'])
206
- end
207
- if properties.key?('stroke_width') && !properties['stroke_width'].nil?
208
- @convert.strokewidth(properties['stroke_width'])
204
+ tmp_stroke_color = ChunkyPNG::Color.from_hex(properties['stroke_color'])
209
205
  end
210
206
  end
211
207
 
@@ -220,8 +216,8 @@ module Geojson2image
220
216
  border_points << "#{new_point[0]},#{new_point[1]}"
221
217
  end
222
218
 
223
- border = "polygon " + border_points.join(", ")
224
- @convert.draw(border)
219
+ points = ChunkyPNG::Vector.multiple_from_string(border_points.join(", "))
220
+ @png.polygon(points, tmp_stroke_color, tmp_fill_color)
225
221
  end
226
222
 
227
223
  when 'MultiPolygon'
@@ -239,13 +235,6 @@ module Geojson2image
239
235
  end
240
236
 
241
237
  def to_image
242
- @convert = MiniMagick::Tool::Convert.new
243
- @convert.size("#{@width}x#{@height}")
244
- @convert.xc(@background_color)
245
- @convert.fill(@fill_color)
246
- @convert.stroke(@stroke_color)
247
- @convert.strokewidth(@stroke_width)
248
-
249
238
  get_points(@parsed_json)
250
239
  get_boundary
251
240
 
@@ -262,9 +251,7 @@ module Geojson2image
262
251
  @height_padding = (@height - (@global_ratio * @max_xy[1])) / 2
263
252
 
264
253
  draw(@parsed_json)
265
-
266
- @convert << @output
267
- @convert.call
254
+ @png.save(@output)
268
255
  end
269
256
 
270
257
  end
@@ -1,3 +1,3 @@
1
1
  module Geojson2image
2
- VERSION = "0.1.4"
2
+ VERSION = "0.2.0"
3
3
  end
metadata CHANGED
@@ -1,14 +1,14 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: geojson2image
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.1.4
4
+ version: 0.2.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Bryce Johnston
8
8
  autorequire:
9
9
  bindir: exe
10
10
  cert_chain: []
11
- date: 2017-08-25 00:00:00.000000000 Z
11
+ date: 2018-08-13 00:00:00.000000000 Z
12
12
  dependencies:
13
13
  - !ruby/object:Gem::Dependency
14
14
  name: oj
@@ -16,28 +16,28 @@ dependencies:
16
16
  requirements:
17
17
  - - "~>"
18
18
  - !ruby/object:Gem::Version
19
- version: '3.0'
19
+ version: '3.6'
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: '3.0'
26
+ version: '3.6'
27
27
  - !ruby/object:Gem::Dependency
28
- name: mini_magick
28
+ name: chunky_png
29
29
  requirement: !ruby/object:Gem::Requirement
30
30
  requirements:
31
31
  - - "~>"
32
32
  - !ruby/object:Gem::Version
33
- version: '4.6'
33
+ version: '1.3'
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: '4.6'
40
+ version: '1.3'
41
41
  - !ruby/object:Gem::Dependency
42
42
  name: bundler
43
43
  requirement: !ruby/object:Gem::Requirement
@@ -82,7 +82,7 @@ dependencies:
82
82
  version: '3.0'
83
83
  description: Ruby library for generating images from GeoJSON
84
84
  email:
85
- - bryce@agdeveloper.com
85
+ - bryce@beaorn.com
86
86
  executables: []
87
87
  extensions: []
88
88
  extra_rdoc_files: []
@@ -101,7 +101,7 @@ files:
101
101
  - geojson2image.gemspec
102
102
  - lib/geojson2image.rb
103
103
  - lib/geojson2image/version.rb
104
- homepage: https://github.com/CropQuest/geojson2image
104
+ homepage: https://github.com/beaorn/geojson2image
105
105
  licenses:
106
106
  - MIT
107
107
  metadata: {}
@@ -121,7 +121,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
121
121
  version: '0'
122
122
  requirements: []
123
123
  rubyforge_project:
124
- rubygems_version: 2.6.8
124
+ rubygems_version: 2.7.6
125
125
  signing_key:
126
126
  specification_version: 4
127
127
  summary: Ruby library for generating images from GeoJSON