cartocss_helper 1.2.1 → 4.0.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 +7 -0
- data/lib/cartocss_helper.rb +56 -71
- data/lib/cartocss_helper/configuration.rb +84 -37
- data/lib/cartocss_helper/data_file_handling.rb +32 -35
- data/lib/cartocss_helper/git.rb +17 -27
- data/lib/cartocss_helper/heuristic.rb +39 -41
- data/lib/cartocss_helper/image_generator.rb +36 -38
- data/lib/cartocss_helper/notes_downloader.rb +46 -0
- data/lib/cartocss_helper/overpass_downloader.rb +42 -0
- data/lib/cartocss_helper/overpass_query_generator.rb +248 -0
- data/lib/cartocss_helper/renderer_handler.rb +116 -0
- data/lib/cartocss_helper/style_specific/default_osm_style.rb +722 -546
- data/lib/cartocss_helper/style_specific/style_specific.rb +4 -3
- data/lib/cartocss_helper/tag_lister.rb +136 -112
- data/lib/cartocss_helper/util/filehelper.rb +1 -1
- data/lib/cartocss_helper/util/generic_cached_downloader.rb +49 -0
- data/lib/cartocss_helper/util/generic_downloader.rb +65 -0
- data/lib/cartocss_helper/util/logger.rb +30 -0
- data/lib/cartocss_helper/util/rest-client_wrapper.rb +53 -0
- data/lib/cartocss_helper/util/systemhelper.rb +55 -0
- data/lib/cartocss_helper/validator.rb +142 -81
- data/lib/cartocss_helper/visualise_changes_diff_from_images.rb +36 -34
- data/lib/cartocss_helper/visualise_changes_image_generation.rb +72 -100
- data/lib/data/testing_locations.rb +17 -15
- data/readme.md +34 -9
- metadata +140 -39
- data/lib/cartocss_helper/downloader.rb +0 -301
- data/lib/cartocss_helper/tilemill_handler.rb +0 -38
checksums.yaml
ADDED
@@ -0,0 +1,7 @@
|
|
1
|
+
---
|
2
|
+
SHA1:
|
3
|
+
metadata.gz: 8686f0a5acb7db504aec14f93f683c89dfd06248
|
4
|
+
data.tar.gz: 1f482eba9f389cdceb37e5253c2520a47725128b
|
5
|
+
SHA512:
|
6
|
+
metadata.gz: f23d8415d318009faf84f70e3f6ae1fb63b80033227c340ba3d647c45a0cc86314c4ec76dc4e07e3d5a2a751415b0cb60affa2a6db92351f1cd031492af54a19
|
7
|
+
data.tar.gz: e86b7bca3b6b4f9f1a84aee7d861d121bb276b1667e7a005d86fc052e1bfe858266da79c2f256de19c3824802fbbcdcf4f33ce2ddd6889f758ff199a0c11d7db
|
data/lib/cartocss_helper.rb
CHANGED
@@ -5,150 +5,135 @@ module CartoCSSHelper
|
|
5
5
|
end
|
6
6
|
require_relative 'cartocss_helper/tag_lister.rb'
|
7
7
|
require_relative 'cartocss_helper/visualise_changes_image_generation.rb'
|
8
|
-
require_relative 'cartocss_helper/
|
8
|
+
require_relative 'cartocss_helper/overpass_query_generator.rb'
|
9
9
|
require_relative 'cartocss_helper/data_file_handling.rb'
|
10
10
|
require_relative 'cartocss_helper/validator.rb'
|
11
11
|
require_relative 'cartocss_helper/git.rb'
|
12
|
+
require_relative 'cartocss_helper/util/generic_downloader.rb'
|
13
|
+
require_relative 'cartocss_helper/notes_downloader.rb'
|
14
|
+
require_relative 'cartocss_helper/style_specific/default_osm_style.rb'
|
12
15
|
require_relative 'data/testing_locations'
|
16
|
+
|
13
17
|
include CartoCSSHelper::Validator
|
14
18
|
include CartoCSSHelper::Git
|
15
19
|
|
16
20
|
module CartoCSSHelper
|
17
|
-
def self.test_tag_on_real_data(tags, new_branch, old_branch, zlevels, types=['node', 'closed_way', 'way'], min = 4, skip = 0)
|
18
|
-
types.each
|
21
|
+
def self.test_tag_on_real_data(tags, new_branch, old_branch, zlevels, types = ['node', 'closed_way', 'way'], min = 4, skip = 0)
|
22
|
+
types.each do |type|
|
19
23
|
test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type, min, skip)
|
20
|
-
|
24
|
+
end
|
21
25
|
end
|
22
26
|
|
23
27
|
def self.test_tag_on_real_data_for_this_type(tags, new_branch, old_branch, zlevels, type, min = 4, skip = 0)
|
24
|
-
if type.
|
25
|
-
type = type[0]
|
26
|
-
end
|
28
|
+
type = type[0] if type.is_a?(Array)
|
27
29
|
generated = 0
|
28
30
|
|
29
31
|
n = 0
|
30
|
-
max_n = get_maxn_for_nth_location
|
32
|
+
max_n = CartoCSSHelper.get_maxn_for_nth_location
|
31
33
|
max_n -= skip
|
32
34
|
skip_string = ''
|
33
|
-
if skip > 0
|
34
|
-
skip_string = " (#{skip} locations skipped)"
|
35
|
-
end
|
35
|
+
skip_string = " (#{skip} locations skipped)" if skip > 0
|
36
36
|
while generated < min
|
37
|
-
location = get_nth_location(n + skip)
|
38
|
-
generated +=1 if CartoCSSHelper::VisualDiff.
|
39
|
-
n+=1
|
40
|
-
if n > max_n
|
41
|
-
return
|
42
|
-
end
|
37
|
+
location = CartoCSSHelper.get_nth_location(n + skip)
|
38
|
+
generated += 1 if CartoCSSHelper::VisualDiff.visualise_on_overpass_data(tags, type, location[0], location[1], zlevels, new_branch, old_branch)
|
39
|
+
n += 1
|
40
|
+
return if n > max_n
|
43
41
|
puts "#{n}/#{max_n} locations checked #{skip_string}. #{generated}/#{min} testing location found"
|
44
42
|
end
|
45
43
|
end
|
46
44
|
|
47
45
|
def self.get_maxn_for_nth_location
|
48
|
-
return get_list_of_testing_locations.length-1
|
46
|
+
return get_list_of_testing_locations.length - 1
|
49
47
|
end
|
50
48
|
|
51
49
|
def self.get_nth_location(n)
|
52
50
|
return get_list_of_testing_locations[n]
|
53
51
|
end
|
54
52
|
|
55
|
-
|
56
53
|
def self.add_common_secondary_tags(tags)
|
57
|
-
added_tags = {'name' => 'ÉÉÉÉÉÉ ÉÉÉÉÉÉ', 'ref' => '1', 'ele' => '8000', 'operator' => 'ÉÉ ÉÉ ÉÉ operator', 'brand' => 'ÉÉ ÉÉ ÉÉ brand'}
|
54
|
+
added_tags = { 'name' => 'ÉÉÉÉÉÉ ÉÉÉÉÉÉ', 'ref' => '1', 'ele' => '8000', 'operator' => 'ÉÉ ÉÉ ÉÉ operator', 'brand' => 'ÉÉ ÉÉ ÉÉ brand' }
|
58
55
|
return tags.merge(added_tags)
|
59
56
|
end
|
60
57
|
|
61
|
-
def self.test_tag_on_sythetic_data(tags, new_branch, old_branch='master', zlevels=Configuration.get_min_z..Configuration.get_max_z, types=['node', 'closed_way', 'way'], test_on_water=false)
|
58
|
+
def self.test_tag_on_sythetic_data(tags, new_branch, old_branch = 'master', zlevels = Configuration.get_min_z..Configuration.get_max_z, types = ['node', 'closed_way', 'way'], test_on_water = false)
|
62
59
|
syn_tags = add_common_secondary_tags(tags)
|
63
|
-
types.each
|
64
|
-
CartoCSSHelper::VisualDiff.
|
65
|
-
|
60
|
+
types.each do |type|
|
61
|
+
CartoCSSHelper::VisualDiff.visualise_on_synthethic_data(syn_tags, type, test_on_water, zlevels, new_branch, old_branch)
|
62
|
+
end
|
66
63
|
end
|
67
64
|
|
68
|
-
def self.test(tags, new_branch, old_branch='master', zlevels=Configuration.get_min_z..Configuration.get_max_z, types=['node', 'closed_way', 'way'], test_on_water=false)
|
69
|
-
puts "processing #{VisualDiff.
|
65
|
+
def self.test(tags, new_branch, old_branch = 'master', zlevels = Configuration.get_min_z..Configuration.get_max_z, types = ['node', 'closed_way', 'way'], test_on_water = false)
|
66
|
+
puts "processing #{VisualDiff.tag_dict_to_string(tags)}"
|
70
67
|
test_tag_on_sythetic_data(tags, new_branch, old_branch, zlevels, types, test_on_water)
|
71
68
|
test_tag_on_real_data(tags, new_branch, old_branch, zlevels, types)
|
72
69
|
end
|
73
70
|
|
74
|
-
def self.probe(tags, new_branch, old_branch='master', zlevels=Configuration.get_min_z..Configuration.get_max_z, types=['node', 'closed_way', 'way'], test_on_water=false)
|
71
|
+
def self.probe(tags, new_branch, old_branch = 'master', zlevels = Configuration.get_min_z..Configuration.get_max_z, types = ['node', 'closed_way', 'way'], test_on_water = false)
|
75
72
|
syn_tags = add_common_secondary_tags(tags)
|
76
|
-
types.each
|
77
|
-
CartoCSSHelper::VisualDiff.
|
78
|
-
|
73
|
+
types.each do |type|
|
74
|
+
CartoCSSHelper::VisualDiff.visualise_on_synthethic_data(syn_tags, type, test_on_water, zlevels, new_branch, old_branch)
|
75
|
+
end
|
79
76
|
end
|
80
77
|
|
81
78
|
def self.get_latitude_longitude_from_url(url)
|
82
|
-
|
83
|
-
|
84
|
-
|
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
|
79
|
+
lat_lon = url.scan(/[\/=]((-|)\d+(\.\d+))/)
|
80
|
+
latitude = lat_lon[0][0].to_f
|
81
|
+
longitude = lat_lon[1][0].to_f
|
89
82
|
return latitude, longitude
|
90
83
|
end
|
91
84
|
|
92
|
-
def self.visualise_place_by_url(url, zlevels, new_branch, old_branch='master', header=nil, download_bbox_size=0.04, image_size = 350)
|
93
|
-
if header == nil
|
94
|
-
header = url
|
95
|
-
end
|
85
|
+
def self.visualise_place_by_url(url, zlevels, new_branch, old_branch = 'master', header = nil, download_bbox_size = 0.04, image_size = 350)
|
86
|
+
header = url if header == nil
|
96
87
|
|
97
88
|
raise "#{url} is not a string, it is #{url.class}" unless url.class == String
|
98
89
|
raise "#{zlevels} is not a range, it is #{zlevels.class}" unless zlevels.class == Range
|
99
90
|
raise "#{new_branch} is not a string, it is #{new_branch.class}" unless new_branch.class == String
|
100
91
|
raise "#{old_branch} is not a string, it is #{old_branch.class}" unless old_branch.class == String
|
101
92
|
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.
|
103
|
-
raise "#{image_size} is not a integer" unless image_size.
|
93
|
+
raise "#{download_bbox_size} is not a number" unless download_bbox_size.is_a? Numeric
|
94
|
+
raise "#{image_size} is not a integer" unless image_size.is_a? Integer
|
104
95
|
|
105
96
|
latitude, longitude = get_latitude_longitude_from_url(url)
|
106
|
-
header += ' ' + old_branch + '->' + new_branch + ' ' + zlevels.to_s + ' '+ image_size.to_s + 'px'
|
107
|
-
CartoCSSHelper::VisualDiff.
|
97
|
+
header += ' ' + old_branch + '->' + new_branch + ' ' + zlevels.to_s + ' ' + image_size.to_s + 'px'
|
98
|
+
CartoCSSHelper::VisualDiff.visualise_for_location(latitude, longitude, zlevels, header, new_branch, old_branch, download_bbox_size, image_size)
|
108
99
|
end
|
109
100
|
|
110
101
|
def self.get_place_of_storage_of_resource_under_url(url)
|
111
|
-
return CartoCSSHelper::Configuration.get_path_to_folder_for_overpass_cache + '.manual.cache' + FileHelper
|
102
|
+
return CartoCSSHelper::Configuration.get_path_to_folder_for_overpass_cache + '.manual.cache' + FileHelper.make_string_usable_as_filename(url)
|
112
103
|
end
|
113
104
|
|
114
|
-
def self.download_remote_file(url)
|
105
|
+
def self.download_remote_file(url, clear_cache = false)
|
115
106
|
filename = get_place_of_storage_of_resource_under_url(url)
|
116
|
-
if
|
117
|
-
|
118
|
-
|
119
|
-
|
120
|
-
|
121
|
-
|
122
|
-
|
123
|
-
|
124
|
-
end
|
125
|
-
file = File.new(filename, 'w')
|
126
|
-
file.write data
|
127
|
-
file.close
|
107
|
+
if clear_cache
|
108
|
+
File.delete(filename) if File.exist?(filename)
|
109
|
+
end
|
110
|
+
unless File.exist?(filename)
|
111
|
+
url = url
|
112
|
+
timeout = 600
|
113
|
+
downloader = GenericCachedDownloader.new(timeout: timeout)
|
114
|
+
return downloader.get_specified_resource(url, filename)
|
128
115
|
end
|
129
116
|
end
|
130
117
|
|
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)
|
118
|
+
def self.visualise_place_by_remote_file(url, latitude, longitude, zlevels, new_branch, old_branch = 'master', header = nil, bb = 0.04, image_size = 350)
|
132
119
|
download_remote_file(url)
|
133
120
|
filename = get_place_of_storage_of_resource_under_url(url)
|
134
121
|
visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch, header, bb, image_size)
|
135
122
|
end
|
136
123
|
|
137
|
-
def self.visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch='master', header=nil, bb=0.04, image_size = 350)
|
138
|
-
raise "#{filename} does not exists" unless File.
|
139
|
-
raise "#{latitude} is not a number" unless latitude.
|
140
|
-
raise "#{longitude} is not a number" unless longitude.
|
124
|
+
def self.visualise_place_by_file(filename, latitude, longitude, zlevels, new_branch, old_branch = 'master', header = nil, bb = 0.04, image_size = 350)
|
125
|
+
raise "#{filename} does not exists" unless File.exist?(filename)
|
126
|
+
raise "#{latitude} is not a number" unless latitude.is_a? Numeric
|
127
|
+
raise "#{longitude} is not a number" unless longitude.is_a? Numeric
|
141
128
|
raise "#{zlevels} is not a range" unless zlevels.class == Range
|
142
129
|
raise "#{new_branch} is not a string" unless new_branch.class == String
|
143
130
|
raise "#{old_branch} is not a string" unless old_branch.class == String
|
144
131
|
raise "#{header} is not a string" unless header.class == String
|
145
|
-
raise "#{bb} is not a number" unless bb.
|
146
|
-
raise "#{image_size} is not a integer" unless image_size.
|
132
|
+
raise "#{bb} is not a number" unless bb.is_a? Numeric
|
133
|
+
raise "#{image_size} is not a integer" unless image_size.is_a? Integer
|
147
134
|
|
148
|
-
if header == nil
|
149
|
-
header = filename
|
150
|
-
end
|
135
|
+
header = filename if header == nil
|
151
136
|
header += ' ' + old_branch + '->' + new_branch + '[' + latitude.to_s + ',' + longitude.to_s + ']' + ' ' + image_size.to_s + 'px'
|
152
|
-
CartoCSSHelper::VisualDiff.
|
137
|
+
CartoCSSHelper::VisualDiff.visualise_for_location_from_file(filename, latitude, longitude, zlevels, header, new_branch, old_branch, bb, image_size)
|
153
138
|
end
|
154
|
-
end
|
139
|
+
end
|
@@ -16,88 +16,135 @@ module CartoCSSHelper::Configuration
|
|
16
16
|
return @style_specific_data
|
17
17
|
end
|
18
18
|
|
19
|
-
|
19
|
+
def get_max_z
|
20
20
|
return get_style_specific_data.max_z
|
21
|
-
|
21
|
+
end
|
22
22
|
|
23
|
-
|
23
|
+
def get_min_z
|
24
24
|
if @style_specific_data == nil
|
25
25
|
raise 'Set your configuration data using CartoCSSHelper::Configuration.set_style_specific_data(data)'
|
26
26
|
end
|
27
27
|
return get_style_specific_data.min_z
|
28
|
-
|
28
|
+
end
|
29
29
|
|
30
|
-
|
30
|
+
# Link to project folder itself, not to folder containing various projects.
|
31
|
+
def set_path_to_cartocss_project_folder(path)
|
31
32
|
@style_path = path
|
32
33
|
end
|
33
34
|
|
34
|
-
|
35
|
+
def get_path_to_cartocss_project_folder
|
35
36
|
if @style_path == nil
|
36
37
|
raise 'Set your configuration data using CartoCSSHelper::Configuration.set_style_path(path)'
|
37
38
|
end
|
38
|
-
|
39
|
-
|
39
|
+
return @style_path
|
40
|
+
end
|
40
41
|
|
41
|
-
def
|
42
|
-
return
|
42
|
+
def get_cartocss_project_name
|
43
|
+
return get_path_to_cartocss_project_folder.split(File::SEPARATOR)[-1]
|
43
44
|
end
|
44
45
|
|
45
46
|
def get_style_file_location
|
46
|
-
if @style_file == nil
|
47
|
-
@style_file = find_style_file_location
|
48
|
-
end
|
47
|
+
@style_file = find_style_file_location if @style_file == nil
|
49
48
|
return @style_file
|
50
49
|
end
|
51
50
|
|
52
51
|
def find_style_file_location
|
53
|
-
Find.find(
|
54
|
-
if path =~ /.*\.style$/
|
55
|
-
|
56
|
-
|
52
|
+
Find.find(get_path_to_cartocss_project_folder) do |path|
|
53
|
+
return path if path =~ /.*\.style$/
|
54
|
+
end
|
55
|
+
end
|
56
|
+
|
57
|
+
def project_file_location
|
58
|
+
Find.find(get_path_to_cartocss_project_folder) do |path|
|
59
|
+
return path if path =~ /.*\.yaml$/
|
57
60
|
end
|
58
61
|
end
|
59
62
|
|
60
63
|
def set_path_to_folder_for_output(path)
|
61
64
|
@path_to_folder_for_output = path
|
62
|
-
puts @path_to_folder_for_output
|
63
|
-
puts @path_to_folder_for_cache
|
64
65
|
end
|
65
66
|
|
66
67
|
def get_path_to_folder_for_output
|
67
68
|
if @path_to_folder_for_output == nil
|
68
69
|
raise 'Set your configuration data using CartoCSSHelper::Configuration.set_path_to_folder_for_output(path)'
|
69
70
|
end
|
70
|
-
FileUtils
|
71
|
+
FileUtils.mkdir_p @path_to_folder_for_output
|
71
72
|
return @path_to_folder_for_output
|
72
73
|
end
|
73
74
|
|
74
75
|
def set_path_to_folder_for_cache(path)
|
75
76
|
@path_to_folder_for_cache = path
|
76
|
-
puts @path_to_folder_for_output
|
77
|
-
puts @path_to_folder_for_cache
|
78
77
|
end
|
79
78
|
|
80
79
|
def get_path_to_folder_for_cache
|
81
80
|
if @path_to_folder_for_cache == nil
|
82
81
|
raise 'Set your configuration data using CartoCSSHelper::Configuration.set_path_to_folder_for_cache(path)'
|
83
82
|
end
|
84
|
-
FileUtils
|
83
|
+
FileUtils.mkdir_p @path_to_folder_for_cache
|
85
84
|
return @path_to_folder_for_cache
|
86
85
|
end
|
87
86
|
|
88
|
-
|
89
|
-
|
90
|
-
|
91
|
-
|
92
|
-
|
87
|
+
def get_path_to_folder_for_branch_specific_cache
|
88
|
+
location = File.join(get_path_to_folder_for_cache, 'generated_images', CartoCSSHelper::Git.get_commit_hash, '')
|
89
|
+
FileUtils.mkdir_p location
|
90
|
+
return location
|
91
|
+
end
|
92
|
+
|
93
|
+
def get_path_to_folder_for_overpass_cache
|
94
|
+
location = File.join(get_path_to_folder_for_cache, 'overpass', '')
|
95
|
+
FileUtils.mkdir_p location
|
96
|
+
return location
|
97
|
+
end
|
98
|
+
|
99
|
+
def get_path_to_folder_for_notes_api_cache
|
100
|
+
location = File.join(get_path_to_folder_for_cache, 'notes-api', '')
|
101
|
+
FileUtils.mkdir_p location
|
102
|
+
return location
|
103
|
+
end
|
104
|
+
|
105
|
+
def get_data_filename
|
106
|
+
return get_path_to_folder_for_branch_specific_cache + 'data.osm'
|
107
|
+
end
|
108
|
+
|
109
|
+
@overpass_instance_url = 'http://overpass-api.de/api'
|
110
|
+
def set_overpass_instance_url(path)
|
111
|
+
@overpass_instance_url = path
|
112
|
+
end
|
113
|
+
|
114
|
+
def set_known_alternative_overpass_url
|
115
|
+
set_overpass_instance_url('http://overpass.osm.rambler.ru/cgi')
|
116
|
+
end
|
117
|
+
|
118
|
+
def get_overpass_instance_url
|
119
|
+
return @overpass_instance_url
|
120
|
+
end
|
121
|
+
|
122
|
+
def set_path_to_kosmtik(path)
|
123
|
+
@kosmtik_path = path
|
124
|
+
end
|
125
|
+
|
126
|
+
def path_to_kosmtik
|
127
|
+
@kosmtik_path
|
128
|
+
end
|
129
|
+
|
130
|
+
def default_renderer
|
131
|
+
:tilemill
|
132
|
+
end
|
133
|
+
|
134
|
+
def set_renderer(renderer)
|
135
|
+
@renderer = renderer
|
136
|
+
end
|
137
|
+
|
138
|
+
def renderer
|
139
|
+
return default_renderer if @renderer == nil
|
140
|
+
return @renderer
|
141
|
+
end
|
93
142
|
|
94
|
-
|
95
|
-
|
96
|
-
|
97
|
-
return location
|
98
|
-
end
|
143
|
+
def mapnik_reference_version_override
|
144
|
+
@mapnik_reference_version
|
145
|
+
end
|
99
146
|
|
100
|
-
|
101
|
-
|
102
|
-
|
103
|
-
end
|
147
|
+
def set_mapnik_reference_version_override(version)
|
148
|
+
@mapnik_reference_version = version
|
149
|
+
end
|
150
|
+
end
|
@@ -1,45 +1,42 @@
|
|
1
1
|
# encoding: UTF-8
|
2
2
|
require_relative 'configuration'
|
3
|
+
require_relative 'util/systemhelper.rb'
|
3
4
|
|
4
5
|
module CartoCSSHelper
|
5
6
|
class DataFileLoader
|
6
7
|
@@loaded_filename = nil
|
7
8
|
def self.get_filename_of_recently_loaded_file
|
8
|
-
if @@loaded_filename == Configuration.get_data_filename
|
9
|
-
return nil
|
10
|
-
end
|
9
|
+
return nil if @@loaded_filename == Configuration.get_data_filename
|
11
10
|
return @@loaded_filename
|
12
11
|
end
|
13
12
|
|
14
|
-
def self.
|
13
|
+
def self.get_command_to_load_using_osmpgsql(data_filename)
|
14
|
+
return "osm2pgsql --create --slim --drop --cache 10 --number-processes 1 --hstore --unlogged --style #{Configuration.get_style_file_location} --multi-geometry '#{data_filename}'"
|
15
|
+
end
|
16
|
+
|
17
|
+
def self.is_already_loaded(data_filename)
|
15
18
|
if get_filename_of_recently_loaded_file == data_filename
|
16
19
|
puts "\tavoided reloading the same file! <#{data_filename}>"
|
17
|
-
return
|
20
|
+
return true
|
18
21
|
end
|
22
|
+
return false
|
23
|
+
end
|
24
|
+
|
25
|
+
def self.load_data_into_database(data_filename, debug = false)
|
26
|
+
return if is_already_loaded(data_filename)
|
19
27
|
start_time = Time.now
|
20
28
|
puts "\tloading data into database <#{data_filename}>"
|
21
29
|
@@loaded_filename = nil
|
22
|
-
|
23
|
-
|
24
|
-
|
25
|
-
end
|
26
|
-
|
27
|
-
command = "osm2pgsql --create --slim --cache 10 --number-processes 1 --hstore --style #{Configuration.get_style_file_location} --multi-geometry '#{data_filename}' #{silence}"
|
28
|
-
if debug
|
29
|
-
puts command
|
30
|
-
end
|
31
|
-
if !system(command)
|
30
|
+
begin
|
31
|
+
execute_command(get_command_to_load_using_osmpgsql(data_filename), debug, ignore_stderr_presence: true) # osm2pgsql outputs everything to stderr
|
32
|
+
rescue FailedCommandException => e
|
32
33
|
puts 'loading data into database failed'
|
33
|
-
if
|
34
|
-
|
35
|
-
|
36
|
-
else
|
37
|
-
raise 'osm2pgsql failed'
|
38
|
-
end
|
34
|
+
raise e if debug
|
35
|
+
puts 'retry with enabled debug'
|
36
|
+
load_data_into_database(data_filename, true)
|
39
37
|
end
|
40
38
|
@@loaded_filename = data_filename
|
41
|
-
|
42
|
-
puts "\tloading lasted #{time_in_seconds.to_i}s"
|
39
|
+
puts "\tloading lasted #{(Time.now - start_time).to_i}s"
|
43
40
|
end
|
44
41
|
end
|
45
42
|
|
@@ -89,17 +86,17 @@ module CartoCSSHelper
|
|
89
86
|
end
|
90
87
|
|
91
88
|
def generate_way_topology(lat, lon, tags)
|
92
|
-
add_node lat, lon
|
93
|
-
add_node lat, lon
|
89
|
+
add_node lat, lon - @size / 3, [], 1
|
90
|
+
add_node lat, lon + @size / 3, [], 2
|
94
91
|
add_way tags, [1, 2], 3
|
95
92
|
end
|
96
93
|
|
97
94
|
def generate_closed_way_topology(lat, lon, tags)
|
98
|
-
delta = @size/3
|
99
|
-
add_node lat-delta, lon-delta, [], 1
|
100
|
-
add_node lat-delta, lon+delta, [], 2
|
101
|
-
add_node lat+delta, lon+delta, [], 3
|
102
|
-
add_node lat+delta, lon-delta, [], 4
|
95
|
+
delta = @size / 3
|
96
|
+
add_node lat - delta, lon - delta, [], 1
|
97
|
+
add_node lat - delta, lon + delta, [], 2
|
98
|
+
add_node lat + delta, lon + delta, [], 3
|
99
|
+
add_node lat + delta, lon - delta, [], 4
|
103
100
|
add_way tags, [1, 2, 3, 4, 1], 5
|
104
101
|
end
|
105
102
|
|
@@ -121,19 +118,19 @@ module CartoCSSHelper
|
|
121
118
|
def add_way(tags, nodes, id)
|
122
119
|
@data_file.write "\n"
|
123
120
|
@data_file.write " <way id='#{id}' visible='true'>"
|
124
|
-
nodes.each
|
121
|
+
nodes.each do |node|
|
125
122
|
@data_file.write "\n"
|
126
123
|
@data_file.write " <nd ref='#{node}' />"
|
127
|
-
|
124
|
+
end
|
128
125
|
add_tags(tags)
|
129
126
|
@data_file.write "\n </way>"
|
130
127
|
end
|
131
128
|
|
132
129
|
def add_tags(tags)
|
133
|
-
tags.each
|
130
|
+
tags.each do |tag|
|
134
131
|
@data_file.write "\n"
|
135
132
|
@data_file.write " <tag k='#{tag[0]}' v='#{tag[1]}' />"
|
136
|
-
|
133
|
+
end
|
137
134
|
end
|
138
135
|
end
|
139
|
-
end
|
136
|
+
end
|