cartocss_helper 1.0.1 → 1.2.1
Sign up to get free protection for your applications and to get access to all the features.
- data/lib/cartocss_helper/data_file_handling.rb +4 -0
- data/lib/cartocss_helper/downloader.rb +33 -13
- data/lib/cartocss_helper/heuristic.rb +1 -1
- data/lib/cartocss_helper/image_generator.rb +1 -1
- data/lib/cartocss_helper/style_specific/default_osm_style.rb +0 -1
- data/lib/cartocss_helper/tag_lister.rb +6 -6
- data/lib/cartocss_helper/tilemill_handler.rb +6 -4
- data/lib/cartocss_helper/visualise_changes_diff_from_images.rb +1 -1
- data/lib/cartocss_helper/visualise_changes_image_generation.rb +20 -28
- data/lib/cartocss_helper.rb +40 -21
- metadata +6 -6
@@ -10,11 +10,13 @@ module CartoCSSHelper
|
|
10
10
|
end
|
11
11
|
return @@loaded_filename
|
12
12
|
end
|
13
|
+
|
13
14
|
def self.load_data_into_database(data_filename, debug=false)
|
14
15
|
if get_filename_of_recently_loaded_file == data_filename
|
15
16
|
puts "\tavoided reloading the same file! <#{data_filename}>"
|
16
17
|
return
|
17
18
|
end
|
19
|
+
start_time = Time.now
|
18
20
|
puts "\tloading data into database <#{data_filename}>"
|
19
21
|
@@loaded_filename = nil
|
20
22
|
silence = '> /dev/null 2>&1'
|
@@ -36,6 +38,8 @@ module CartoCSSHelper
|
|
36
38
|
end
|
37
39
|
end
|
38
40
|
@@loaded_filename = data_filename
|
41
|
+
time_in_seconds = Time.now - start_time
|
42
|
+
puts "\tloading lasted #{time_in_seconds.to_i}s"
|
39
43
|
end
|
40
44
|
end
|
41
45
|
|
@@ -11,14 +11,13 @@ module CartoCSSHelper
|
|
11
11
|
return get_overpass_query_results_file_location(query, "download data for #{latitude} #{longitude} (#{size})")
|
12
12
|
end
|
13
13
|
|
14
|
-
|
15
14
|
def self.download_osm_data_for_location(latitude, longitude, size, accept_cache=true)
|
16
15
|
filename = CartoCSSHelper::Configuration.get_path_to_folder_for_cache + "#{latitude} #{longitude} #{size}.osm"
|
17
16
|
if File.exists?(filename)
|
18
17
|
if accept_cache
|
19
18
|
return filename
|
20
19
|
end
|
21
|
-
|
20
|
+
delete_file(filename, 'query refusing to accept cache was used')
|
22
21
|
end
|
23
22
|
query = get_query_to_download_data_around_location(latitude, longitude, size)
|
24
23
|
text = get_overpass_query_results(query, "download data for #{latitude} #{longitude} (#{size})")
|
@@ -38,7 +37,7 @@ module CartoCSSHelper
|
|
38
37
|
query += "\n"
|
39
38
|
query += "(node(#{bb});<;);"
|
40
39
|
query += "\n"
|
41
|
-
query += 'out
|
40
|
+
query += 'out;'
|
42
41
|
query += "\n"
|
43
42
|
query += '/*'
|
44
43
|
query += "\nbbox size: #{size}"
|
@@ -134,7 +133,9 @@ module CartoCSSHelper
|
|
134
133
|
def self.get_overpass_query_results(query, description, debug=false)
|
135
134
|
cached = get_overpass_query_results_from_cache(query)
|
136
135
|
if cached == ''
|
137
|
-
|
136
|
+
if File.exists?(get_query_cache_refused_response_filename(query))
|
137
|
+
raise OverpassRefusedResponse
|
138
|
+
end
|
138
139
|
end
|
139
140
|
return cached unless cached == nil
|
140
141
|
|
@@ -148,6 +149,7 @@ module CartoCSSHelper
|
|
148
149
|
begin
|
149
150
|
cached = Downloader.run_overpass_query query, description
|
150
151
|
rescue OverpassRefusedResponse
|
152
|
+
mark_query_as_refused(query)
|
151
153
|
write_to_cache(query, '')
|
152
154
|
raise OverpassRefusedResponse
|
153
155
|
end
|
@@ -155,6 +157,16 @@ module CartoCSSHelper
|
|
155
157
|
return cached
|
156
158
|
end
|
157
159
|
|
160
|
+
def self.get_query_cache_refused_response_filename(query)
|
161
|
+
return get_query_cache_filename(query)+'_response_refused'
|
162
|
+
end
|
163
|
+
|
164
|
+
def self.mark_query_as_refused(query)
|
165
|
+
file = File.new(get_query_cache_refused_response_filename(query), 'w')
|
166
|
+
file.write ''
|
167
|
+
file.close
|
168
|
+
end
|
169
|
+
|
158
170
|
def self.write_to_cache(query, response)
|
159
171
|
file = File.new(get_query_cache_filename(query), 'w')
|
160
172
|
file.write response
|
@@ -199,7 +211,7 @@ module CartoCSSHelper
|
|
199
211
|
end
|
200
212
|
|
201
213
|
def self.not_enough_free_space
|
202
|
-
minimum_gb =
|
214
|
+
minimum_gb = 1
|
203
215
|
return get_available_space_for_cache_in_gb < minimum_gb
|
204
216
|
end
|
205
217
|
|
@@ -210,22 +222,30 @@ module CartoCSSHelper
|
|
210
222
|
|
211
223
|
def self.attempt_cleanup
|
212
224
|
if not_enough_free_space
|
213
|
-
delete_large_overpass_caches
|
225
|
+
delete_large_overpass_caches 500
|
226
|
+
end
|
227
|
+
if not_enough_free_space
|
228
|
+
delete_large_overpass_caches 100
|
229
|
+
end
|
230
|
+
if not_enough_free_space
|
231
|
+
delete_large_overpass_caches 50
|
214
232
|
end
|
215
233
|
end
|
216
234
|
|
217
|
-
def self.delete_file(
|
218
|
-
open(CartoCSSHelper::Configuration.
|
219
|
-
|
235
|
+
def self.delete_file(filename, reason)
|
236
|
+
open(CartoCSSHelper::Configuration.get_path_to_folder_for_output+'log.txt', 'a') { |file|
|
237
|
+
message = "deleting #{filename}, #{File.size(filename)/1024/1024}MB - #{reason}"
|
238
|
+
puts message
|
239
|
+
file.puts(message)
|
240
|
+
File.delete(filename)
|
220
241
|
}
|
221
|
-
File.delete(file)
|
222
242
|
end
|
223
243
|
|
224
|
-
def self.delete_large_overpass_caches
|
244
|
+
def self.delete_large_overpass_caches(threshold_in_MB)
|
225
245
|
#todo - find library that deals with caches like this, bug here may be unfunny
|
226
246
|
Dir.glob(CartoCSSHelper::Configuration.get_path_to_folder_for_overpass_cache+'*') {|file|
|
227
|
-
if File.size(file) > (1024 * 1024 *
|
228
|
-
delete_file(file)
|
247
|
+
if File.size(file) > (1024 * 1024 * threshold_in_MB)
|
248
|
+
delete_file(file, "removing everpass cache entries larger than #{threshold_in_MB} MB to make free space on the disk")
|
229
249
|
end
|
230
250
|
}
|
231
251
|
end
|
@@ -87,7 +87,7 @@ module CartoCSSHelper
|
|
87
87
|
def generate_image(lat, lon, debug)
|
88
88
|
export_filename = self.get_filename
|
89
89
|
bbox_size = self.get_bbox_size
|
90
|
-
TilemillHandler.run_tilemill_export_image(lat, lon, @zlevel, bbox_size, 200, export_filename, debug)
|
90
|
+
TilemillHandler.run_tilemill_export_image(lat, lon, @zlevel, [bbox_size, bbox_size], 200, export_filename, debug)
|
91
91
|
end
|
92
92
|
end
|
93
93
|
end
|
@@ -154,7 +154,6 @@ module CartoCSSHelper
|
|
154
154
|
TagRenderingStatus.new('highway', 'platform', :primary),
|
155
155
|
TagRenderingStatus.new('highway', 'primary', :primary),
|
156
156
|
TagRenderingStatus.new('highway', 'primary_link', :primary),
|
157
|
-
TagRenderingStatus.new('highway', 'proposed', :primary),
|
158
157
|
TagRenderingStatus.new('highway', 'raceway', :primary),
|
159
158
|
TagRenderingStatus.new('highway', 'residential', :primary),
|
160
159
|
TagRenderingStatus.new('highway', 'rest_area', :primary),
|
@@ -104,7 +104,7 @@ module CartoCSSHelper
|
|
104
104
|
[false, true].each { |on_water|
|
105
105
|
[Configuration.get_max_z].each { |zlevel|
|
106
106
|
['area', 'closed_way', 'way', 'node'].each{ |type|
|
107
|
-
if rendered_on_zlevel({key => value}, type, zlevel, on_water)
|
107
|
+
if CartoCSSHelper::Info.rendered_on_zlevel({key => value}, type, zlevel, on_water)
|
108
108
|
if !is_key_rendered_and_value_ignored_set(key, value, type, zlevel, on_water)
|
109
109
|
return false
|
110
110
|
end
|
@@ -123,9 +123,9 @@ module CartoCSSHelper
|
|
123
123
|
|
124
124
|
def is_rendered(key, value)
|
125
125
|
[false, true].each { |on_water|
|
126
|
-
[Configuration.get_max_z].each { |zlevel|
|
126
|
+
[Configuration.get_max_z].each { |zlevel| #TODO - note that some tags may be rendered up to X zoom level, but checking all zlevels would take too much time
|
127
127
|
['area', 'closed_way', 'way', 'node'].each{ |type|
|
128
|
-
if rendered_on_zlevel({key => value}, type, zlevel, on_water)
|
128
|
+
if CartoCSSHelper::Info.rendered_on_zlevel({key => value}, type, zlevel, on_water)
|
129
129
|
return true
|
130
130
|
end
|
131
131
|
}
|
@@ -142,8 +142,6 @@ module CartoCSSHelper
|
|
142
142
|
return true
|
143
143
|
end
|
144
144
|
|
145
|
-
protected
|
146
|
-
|
147
145
|
def how_rendered_as_composite(key, value, suggested_composite)
|
148
146
|
[false, true].each { |on_water|
|
149
147
|
[Configuration.get_max_z].each { |zlevel|
|
@@ -167,12 +165,14 @@ module CartoCSSHelper
|
|
167
165
|
return nil
|
168
166
|
end
|
169
167
|
|
170
|
-
def rendered_on_zlevel(tags, type, zlevel, on_water)
|
168
|
+
def self.rendered_on_zlevel(tags, type, zlevel, on_water)
|
171
169
|
empty = Scene.new({}, zlevel, on_water, type)
|
172
170
|
tested = Scene.new(tags, zlevel, on_water, type)
|
173
171
|
return tested.is_output_different(empty)
|
174
172
|
end
|
175
173
|
|
174
|
+
protected
|
175
|
+
|
176
176
|
def how_rendered_on_zlevel_as_composite(tags, type, zlevel, on_water, suggested_composite)
|
177
177
|
if suggested_composite != nil
|
178
178
|
if is_rendered_with_this_composite tags, type, suggested_composite, zlevel, on_water
|
@@ -11,11 +11,13 @@ module CartoCSSHelper
|
|
11
11
|
if debug
|
12
12
|
silence = ''
|
13
13
|
end
|
14
|
+
latitude_bb_size = bbox_size[0]
|
15
|
+
longitude_bb_size = bbox_size[0]
|
14
16
|
#--bbox=[xmin,ymin,xmax,ymax]
|
15
|
-
xmin = lon-
|
16
|
-
ymin = lat-
|
17
|
-
xmax = lon+
|
18
|
-
ymax = lat+
|
17
|
+
xmin = lon-longitude_bb_size/2
|
18
|
+
ymin = lat-latitude_bb_size/2
|
19
|
+
xmax = lon+longitude_bb_size/2
|
20
|
+
ymax = lat+latitude_bb_size/2
|
19
21
|
bbox = "#{xmin},#{ymin},#{xmax},#{ymax}"
|
20
22
|
params = "--format=png --width=#{image_size} --height=#{image_size} --static_zoom=#{zlevel} --bbox=\"#{bbox}\""
|
21
23
|
project_name = CartoCSSHelper::Configuration.get_tilemill_project_name
|
@@ -47,8 +47,8 @@ module CartoCSSHelper
|
|
47
47
|
end
|
48
48
|
end
|
49
49
|
|
50
|
-
def self.add_job(filename, latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size)
|
51
|
-
print
|
50
|
+
def self.add_job(filename, latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size, prefix)
|
51
|
+
print prefix
|
52
52
|
new_job = MapGenerationJob.new(filename, latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size)
|
53
53
|
new_job.print
|
54
54
|
|
@@ -79,8 +79,8 @@ module CartoCSSHelper
|
|
79
79
|
@@jobs = []
|
80
80
|
end
|
81
81
|
|
82
|
-
def self.shuffle_jobs
|
83
|
-
@@jobs.shuffle!
|
82
|
+
def self.shuffle_jobs(seed)
|
83
|
+
@@jobs.shuffle!(random: Random.new(seed))
|
84
84
|
end
|
85
85
|
|
86
86
|
def self.visualise_changes_synthethic_test(tags, type, on_water, zlevel_range, new_branch, old_branch)
|
@@ -143,17 +143,19 @@ module CartoCSSHelper
|
|
143
143
|
|
144
144
|
def self.visualise_changes_on_real_data(tags, type, wanted_latitude, wanted_longitude, zlevels, new_branch, old_branch='master')
|
145
145
|
#special support for following tag values: :any_value
|
146
|
-
|
147
|
-
|
146
|
+
header_prefix = "#{ VisualDiff.dict_to_pretty_tag_list(tags) } #{type} [#{ wanted_latitude }, #{ wanted_longitude }] -> "
|
147
|
+
target_location = '[?, ?]'
|
148
|
+
header_sufix = " #{old_branch}->#{new_branch} #{zlevels}"
|
149
|
+
puts "visualise_changes_on_real_data <#{header_prefix}#{header_sufix}> #{old_branch} -> #{new_branch}"
|
148
150
|
begin
|
149
151
|
latitude, longitude = Downloader.locate_element_with_given_tags_and_type tags, type, wanted_latitude, wanted_longitude
|
152
|
+
target_location = "[#{latitude}, #{longitude}]"
|
150
153
|
rescue Downloader::OverpassRefusedResponse
|
151
154
|
puts 'No nearby instances of tags and tag is not extremely rare - no generation of nearby location and wordwide search was impossible. No diff image will be generated for this location.'
|
152
155
|
return false
|
153
156
|
end
|
154
|
-
header = "#{ VisualDiff.dict_to_pretty_tag_list(tags) } #{type} #{ wanted_latitude } #{ wanted_longitude } #{zlevels}"
|
155
157
|
download_bbox_size = 0.4
|
156
|
-
visualise_changes_for_location(latitude, longitude, zlevels,
|
158
|
+
visualise_changes_for_location(latitude, longitude, zlevels, header_prefix+target_location+header_sufix, new_branch, old_branch, download_bbox_size)
|
157
159
|
return true
|
158
160
|
end
|
159
161
|
|
@@ -167,7 +169,7 @@ module CartoCSSHelper
|
|
167
169
|
if @@job_pooling
|
168
170
|
prefix = 'pool <- '
|
169
171
|
end
|
170
|
-
add_job(filename, latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size)
|
172
|
+
add_job(filename, latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size, prefix)
|
171
173
|
if !@@job_pooling
|
172
174
|
run_jobs
|
173
175
|
end
|
@@ -187,27 +189,17 @@ module CartoCSSHelper
|
|
187
189
|
return reference_value*rescaler
|
188
190
|
end
|
189
191
|
|
190
|
-
def self.
|
192
|
+
def self.get_render_bbox_size(zlevel, wanted_image_size, latitude)
|
193
|
+
longitude_equator_rendered_length_in_pixels = 256 * 2**zlevel
|
194
|
+
longitude_size = 360*wanted_image_size.to_f/longitude_equator_rendered_length_in_pixels
|
195
|
+
latitude_size = longitude_size * Math.cos(latitude*Math::PI/180)
|
196
|
+
return [latitude_size, longitude_size]
|
197
|
+
end
|
198
|
+
|
199
|
+
def self.collect_images_for_real_data_test(latitude, longitude, zlevels, source, image_size=400)
|
191
200
|
collection = []
|
192
201
|
zlevels.each { |zlevel|
|
193
|
-
|
194
|
-
image_size = (VisualDiff.scale zlevel, image_size_for_16_zoom_level, 16)
|
195
|
-
mutiplier = 1000
|
196
|
-
image_size = (image_size*mutiplier).to_int
|
197
|
-
render_bbox_size = 0.015
|
198
|
-
ratio = 1.0*image_size/(wanted_image_size*mutiplier)
|
199
|
-
image_size /= ratio
|
200
|
-
render_bbox_size /= ratio
|
201
|
-
image_size /= mutiplier
|
202
|
-
image_size = image_size.to_i
|
203
|
-
if image_size!=wanted_image_size
|
204
|
-
puts VisualDiff.scale zlevel, image_size_for_16_zoom_level, 16
|
205
|
-
puts zlevel
|
206
|
-
puts image_size
|
207
|
-
puts wanted_image_size
|
208
|
-
puts ratio
|
209
|
-
raise "#{image_size} mismatches #{wanted_image_size}"
|
210
|
-
end
|
202
|
+
render_bbox_size = VisualDiff.get_render_bbox_size(zlevel, image_size, latitude)
|
211
203
|
cache_folder = CartoCSSHelper::Configuration.get_path_to_folder_for_branch_specific_cache
|
212
204
|
filename = "#{cache_folder+"#{latitude} #{longitude} #{zlevel}zlevel #{image_size}px #{source.get_timestamp} #{source.download_bbox_size}.png"}"
|
213
205
|
if !File.exists?(filename)
|
data/lib/cartocss_helper.rb
CHANGED
@@ -14,33 +14,41 @@ include CartoCSSHelper::Validator
|
|
14
14
|
include CartoCSSHelper::Git
|
15
15
|
|
16
16
|
module CartoCSSHelper
|
17
|
-
def
|
17
|
+
def self.test_tag_on_real_data(tags, new_branch, old_branch, zlevels, types=['node', 'closed_way', 'way'], min = 4, skip = 0)
|
18
18
|
types.each {|type|
|
19
|
-
test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type)
|
19
|
+
test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type, min, skip)
|
20
20
|
}
|
21
21
|
end
|
22
22
|
|
23
|
-
def self.test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type)
|
24
|
-
|
23
|
+
def self.test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type, min = 4, skip = 0)
|
24
|
+
if type.kind_of?(Array)
|
25
|
+
type = type[0]
|
26
|
+
end
|
25
27
|
generated = 0
|
26
28
|
|
27
29
|
n = 0
|
28
30
|
max_n = get_maxn_for_nth_location
|
31
|
+
max_n -= skip
|
32
|
+
skip_string = ''
|
33
|
+
if skip > 0
|
34
|
+
skip_string = " (#{skip} locations skipped)"
|
35
|
+
end
|
29
36
|
while generated < min
|
30
|
-
location = get_nth_location(n)
|
37
|
+
location = get_nth_location(n + skip)
|
31
38
|
generated +=1 if CartoCSSHelper::VisualDiff.visualise_changes_on_real_data(tags, type, location[0], location[1], zlevels, new_branch, old_branch)
|
32
39
|
n+=1
|
33
40
|
if n > max_n
|
34
41
|
return
|
35
42
|
end
|
43
|
+
puts "#{n}/#{max_n} locations checked #{skip_string}. #{generated}/#{min} testing location found"
|
36
44
|
end
|
37
45
|
end
|
38
46
|
|
39
|
-
def get_maxn_for_nth_location
|
47
|
+
def self.get_maxn_for_nth_location
|
40
48
|
return get_list_of_testing_locations.length-1
|
41
49
|
end
|
42
50
|
|
43
|
-
def get_nth_location(n)
|
51
|
+
def self.get_nth_location(n)
|
44
52
|
return get_list_of_testing_locations[n]
|
45
53
|
end
|
46
54
|
|
@@ -70,29 +78,40 @@ module CartoCSSHelper
|
|
70
78
|
}
|
71
79
|
end
|
72
80
|
|
73
|
-
def
|
74
|
-
|
75
|
-
|
76
|
-
|
77
|
-
|
78
|
-
|
79
|
-
|
80
|
-
|
81
|
+
def self.get_latitude_longitude_from_url(url)
|
82
|
+
if(url.scan(/[\/]((-|)\d+(\.\d+))/)).length >= 2
|
83
|
+
latitude = url.scan(/[\/]((-|)\d+(\.\d+))/)[0][0].to_f
|
84
|
+
longitude = url.scan(/[\/]((-|)\d+(\.\d+))/)[1][0].to_f
|
85
|
+
return latitude, longitude
|
86
|
+
end
|
87
|
+
latitude = url.scan(/[\/=]((-|)\d+(\.\d+))/)[0][0].to_f
|
88
|
+
longitude = url.scan(/[\/=]((-|)\d+(\.\d+))/)[1][0].to_f
|
89
|
+
return latitude, longitude
|
90
|
+
end
|
81
91
|
|
82
|
-
|
83
|
-
longitude = url.scan(/\/((-|)\d+(\.\d+))/)[1][0].to_f
|
92
|
+
def self.visualise_place_by_url(url, zlevels, new_branch, old_branch='master', header=nil, download_bbox_size=0.04, image_size = 350)
|
84
93
|
if header == nil
|
85
94
|
header = url
|
86
95
|
end
|
96
|
+
|
97
|
+
raise "#{url} is not a string, it is #{url.class}" unless url.class == String
|
98
|
+
raise "#{zlevels} is not a range, it is #{zlevels.class}" unless zlevels.class == Range
|
99
|
+
raise "#{new_branch} is not a string, it is #{new_branch.class}" unless new_branch.class == String
|
100
|
+
raise "#{old_branch} is not a string, it is #{old_branch.class}" unless old_branch.class == String
|
101
|
+
raise "#{header} is not a string, it is #{header.class}" unless header.class == String
|
102
|
+
raise "#{download_bbox_size} is not a number" unless download_bbox_size.kind_of? Numeric
|
103
|
+
raise "#{image_size} is not a integer" unless image_size.kind_of? Integer
|
104
|
+
|
105
|
+
latitude, longitude = get_latitude_longitude_from_url(url)
|
87
106
|
header += ' ' + old_branch + '->' + new_branch + ' ' + zlevels.to_s + ' '+ image_size.to_s + 'px'
|
88
107
|
CartoCSSHelper::VisualDiff.visualise_changes_for_location(latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size)
|
89
108
|
end
|
90
109
|
|
91
|
-
def get_place_of_storage_of_resource_under_url(url)
|
110
|
+
def self.get_place_of_storage_of_resource_under_url(url)
|
92
111
|
return CartoCSSHelper::Configuration.get_path_to_folder_for_overpass_cache + '.manual.cache' + FileHelper::make_string_usable_as_filename(url)
|
93
112
|
end
|
94
113
|
|
95
|
-
def download_remote_file(url)
|
114
|
+
def self.download_remote_file(url)
|
96
115
|
filename = get_place_of_storage_of_resource_under_url(url)
|
97
116
|
if !File.exists?(filename)
|
98
117
|
begin
|
@@ -109,13 +128,13 @@ module CartoCSSHelper
|
|
109
128
|
end
|
110
129
|
end
|
111
130
|
|
112
|
-
def visualise_place_by_remote_file(url, latitude, longitude, zlevels, new_branch, old_branch='master', header=nil, bb=0.04, image_size = 350)
|
131
|
+
def self.visualise_place_by_remote_file(url, latitude, longitude, zlevels, new_branch, old_branch='master', header=nil, bb=0.04, image_size = 350)
|
113
132
|
download_remote_file(url)
|
114
133
|
filename = get_place_of_storage_of_resource_under_url(url)
|
115
134
|
visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch, header, bb, image_size)
|
116
135
|
end
|
117
136
|
|
118
|
-
def visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch='master', header=nil, bb=0.04, image_size = 350)
|
137
|
+
def self.visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch='master', header=nil, bb=0.04, image_size = 350)
|
119
138
|
raise "#{filename} does not exists" unless File.exists?(filename)
|
120
139
|
raise "#{latitude} is not a number" unless latitude.kind_of? Numeric
|
121
140
|
raise "#{longitude} is not a number" unless longitude.kind_of? Numeric
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: cartocss_helper
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 1.
|
4
|
+
version: 1.2.1
|
5
5
|
prerelease:
|
6
6
|
platform: ruby
|
7
7
|
authors:
|
@@ -9,7 +9,7 @@ authors:
|
|
9
9
|
autorequire:
|
10
10
|
bindir: bin
|
11
11
|
cert_chain: []
|
12
|
-
date: 2015-07-
|
12
|
+
date: 2015-07-29 00:00:00.000000000 Z
|
13
13
|
dependencies:
|
14
14
|
- !ruby/object:Gem::Dependency
|
15
15
|
name: rest-client
|
@@ -18,7 +18,7 @@ dependencies:
|
|
18
18
|
requirements:
|
19
19
|
- - ~>
|
20
20
|
- !ruby/object:Gem::Version
|
21
|
-
version: 1.
|
21
|
+
version: 1.8.0
|
22
22
|
type: :runtime
|
23
23
|
prerelease: false
|
24
24
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -26,7 +26,7 @@ dependencies:
|
|
26
26
|
requirements:
|
27
27
|
- - ~>
|
28
28
|
- !ruby/object:Gem::Version
|
29
|
-
version: 1.
|
29
|
+
version: 1.8.0
|
30
30
|
- !ruby/object:Gem::Dependency
|
31
31
|
name: sys-filesystem
|
32
32
|
requirement: !ruby/object:Gem::Requirement
|
@@ -50,7 +50,7 @@ dependencies:
|
|
50
50
|
requirements:
|
51
51
|
- - ~>
|
52
52
|
- !ruby/object:Gem::Version
|
53
|
-
version: 2.
|
53
|
+
version: 2.15.2
|
54
54
|
type: :runtime
|
55
55
|
prerelease: false
|
56
56
|
version_requirements: !ruby/object:Gem::Requirement
|
@@ -58,7 +58,7 @@ dependencies:
|
|
58
58
|
requirements:
|
59
59
|
- - ~>
|
60
60
|
- !ruby/object:Gem::Version
|
61
|
-
version: 2.
|
61
|
+
version: 2.15.2
|
62
62
|
description: Tool to make development of CartoCSS styles more efficient. Automates
|
63
63
|
actions necessary to produce test images and validates style. Loading data using
|
64
64
|
osm2pgsql, rendering with TileMill, obtaining test data from overpass turbo.
|