geo_works 0.1.4 → 0.2.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +4 -4
- data/app/helpers/geo_works/geo_file_set_helper.rb +7 -0
- data/app/processors/geo_works/processors/vector/info.rb +3 -1
- data/app/schemas/geo_works/file_set_metadata_required.rb +1 -0
- data/app/services/geo_works/discovery/document_builder/layer_info_builder.rb +11 -4
- data/app/services/geo_works/file_set_derivatives_service.rb +1 -0
- data/app/services/geo_works/vector_geometry_service.rb +31 -0
- data/app/views/geo_works/_member.html.erb +1 -0
- data/app/views/geo_works/related/_geo_files.html.erb +1 -0
- data/lib/geo_works/version.rb +1 -1
- data/spec/features/vector_work_show_spec.rb +37 -25
- data/spec/models/concerns/geo_works/file_set/derivatives_spec.rb +5 -0
- data/spec/processors/geo_works/processors/vector/info_spec.rb +19 -6
- data/spec/services/geo_works/discovery/document_builder_spec.rb +2 -2
- metadata +4 -2
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: bb061d01830fb5921dd128e5a1c8aae57828d706
|
4
|
+
data.tar.gz: 25df64e996fe4bf08d07ef03e9d1c873c53d75f1
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: b92710175c86f0a448d8a9b791baaef368ddac96ef5e7b6b44390c471b187eec522f468a03e1f92bfc3cdb610ae45c748fea74983874a2e33c66ecaf3cdcd7e7
|
7
|
+
data.tar.gz: 182c7c85c84d908bcab4938d792e7a37daf0d9e2694d4b3fb5dc92959ceb64c8e1b39277b7f0b5282a21739e6c89e07ca84637867c99f74804afcb4c4eff1dbb
|
@@ -64,7 +64,9 @@ module GeoWorks
|
|
64
64
|
# @return [String] vector geom
|
65
65
|
def vector_geom
|
66
66
|
match = /(?<=Geometry:\s).*?(?=\n)/.match(doc)
|
67
|
-
match ? match[0] : ''
|
67
|
+
geom = match ? match[0] : ''
|
68
|
+
# Transform OGR-style 'Line String' into GeoJSON 'Line'
|
69
|
+
geom == 'Line String' ? 'Line' : geom
|
68
70
|
end
|
69
71
|
|
70
72
|
# Given an output string from the ogrinfo command, returns
|
@@ -46,19 +46,26 @@ module GeoWorks
|
|
46
46
|
# Returns the geometry for a vector file.
|
47
47
|
# @return [String] vector geometry
|
48
48
|
def vector_geom_type
|
49
|
-
|
50
|
-
|
51
|
-
'Mixed'
|
49
|
+
return 'Mixed' if file_sets.nil? || file_sets.empty?
|
50
|
+
geom_field = Solrizer.solr_name('geometry_type')
|
51
|
+
file_sets.first.solr_document.fetch(geom_field, ['Mixed']).first
|
52
52
|
end
|
53
53
|
|
54
54
|
# Returns the 'geo' mime type of the first file attached to the work.
|
55
55
|
# @return [String] file mime type
|
56
56
|
def geo_mime_type
|
57
|
-
file_sets = geo_concern.geo_file_set_presenters
|
58
57
|
return if file_sets.nil? || file_sets.empty?
|
59
58
|
return unless (mime_types = file_sets.first.solr_document[:geo_mime_type_ssim])
|
60
59
|
mime_types.first
|
61
60
|
end
|
61
|
+
|
62
|
+
# Gets geo file set presenters.
|
63
|
+
# @return [FileSet] geo file sets
|
64
|
+
def file_sets
|
65
|
+
@file_sets ||= begin
|
66
|
+
geo_concern.geo_file_set_presenters
|
67
|
+
end
|
68
|
+
end
|
62
69
|
end
|
63
70
|
end
|
64
71
|
end
|
@@ -17,6 +17,7 @@ module GeoWorks
|
|
17
17
|
create_raster_derivatives(filename)
|
18
18
|
when *GeoWorks::VectorFormatService.select_options.map(&:last)
|
19
19
|
create_vector_derivatives(filename)
|
20
|
+
GeoWorks::VectorGeometryService.new(file_set, derivative_url('display_vector')).call
|
20
21
|
end
|
21
22
|
|
22
23
|
# Once all the derivatives are created, send a created message
|
@@ -0,0 +1,31 @@
|
|
1
|
+
module GeoWorks
|
2
|
+
class VectorGeometryService
|
3
|
+
attr_reader :file_set, :file_path
|
4
|
+
|
5
|
+
def initialize(file_set, file_path)
|
6
|
+
@file_set = file_set
|
7
|
+
@file_path = file_path.gsub('file:', '')
|
8
|
+
end
|
9
|
+
|
10
|
+
# Extracts geometry type from display vector and saves value in FileSet.
|
11
|
+
def call
|
12
|
+
file_set.geometry_type = geometry
|
13
|
+
file_set.save!
|
14
|
+
end
|
15
|
+
|
16
|
+
private
|
17
|
+
|
18
|
+
def geometry
|
19
|
+
unzip_display_vector
|
20
|
+
GeoWorks::Processors::Vector::Info.new(shapefile_dir).geom
|
21
|
+
end
|
22
|
+
|
23
|
+
def shapefile_dir
|
24
|
+
"#{File.dirname(file_path)}/#{File.basename(file_path, '.zip')}"
|
25
|
+
end
|
26
|
+
|
27
|
+
def unzip_display_vector
|
28
|
+
system "unzip -o #{file_path} -d #{shapefile_dir}" unless File.directory?(shapefile_dir)
|
29
|
+
end
|
30
|
+
end
|
31
|
+
end
|
@@ -4,6 +4,7 @@
|
|
4
4
|
</td>
|
5
5
|
<td class="attribute filename"><%= link_to(member.link_name, main_app.hyrax_file_set_path(member)) %></td>
|
6
6
|
<td class="attribute date_uploaded"><%= member.date_uploaded %></td>
|
7
|
+
<td class="attribute geometry"><%= file_set_geometry(member) %></td>
|
7
8
|
<td class="attribute permission"><%= member.permission_badge %></td>
|
8
9
|
<td>
|
9
10
|
<%= file_set_actions(member) %>
|
data/lib/geo_works/version.rb
CHANGED
@@ -9,10 +9,11 @@ describe "display a vector work as its owner", type: :feature do
|
|
9
9
|
let(:attributes) { { title: title, coverage: coverage, spatial: spatial, temporal: temporal, user: user } }
|
10
10
|
let(:fgdc_file) { test_data_fixture_path('zipcodes_fgdc.xml') }
|
11
11
|
let(:vector_file) { test_data_fixture_path('files/tufts-cambridgegrid100-04.zip') }
|
12
|
+
let(:generator) { instance_double(GeoWorks::EventsGenerator).as_null_object }
|
12
13
|
|
13
14
|
before do
|
14
|
-
allow(
|
15
|
-
allow(
|
15
|
+
allow(GeoWorks::EventsGenerator).to receive(:new).and_return(generator)
|
16
|
+
allow(Hydra::Works::CharacterizationService).to receive(:run)
|
16
17
|
create(:sipity_entity, proxy_for_global_id: work.to_global_id.to_s)
|
17
18
|
end
|
18
19
|
|
@@ -33,29 +34,40 @@ describe "display a vector work as its owner", type: :feature do
|
|
33
34
|
expect(page).to have_css("input#work_parent_members_ids")
|
34
35
|
end
|
35
36
|
|
36
|
-
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
43
|
-
|
44
|
-
|
45
|
-
|
46
|
-
|
47
|
-
|
48
|
-
|
49
|
-
|
50
|
-
|
51
|
-
|
52
|
-
|
53
|
-
|
54
|
-
|
55
|
-
|
56
|
-
|
57
|
-
|
58
|
-
|
37
|
+
context 'when attaching files' do
|
38
|
+
after do
|
39
|
+
# Clean up derivatives
|
40
|
+
work_presenter = GeoWorks::VectorWorkShowPresenter.new(work, nil)
|
41
|
+
file_set = work_presenter.geo_file_set_presenters.first
|
42
|
+
dir = File.join(Hyrax.config.derivatives_path, file_set.id[0..1])
|
43
|
+
FileUtils.rm_r(dir) if File.directory?(dir)
|
44
|
+
end
|
45
|
+
|
46
|
+
it "allows the user to attach files and extract attributes from metadata file" do
|
47
|
+
click_button 'Attach File'
|
48
|
+
click_link 'Attach Vector'
|
49
|
+
fill_in 'file_set[title][]', with: 'Vector File'
|
50
|
+
select 'ESRI Shapefile', from: 'file_set_geo_mime_type'
|
51
|
+
attach_file 'file_set[files][]', vector_file
|
52
|
+
click_button 'Attach to Vector Work'
|
53
|
+
expect(page).to have_text 'Vector File'
|
54
|
+
expect(page).to have_selector(:link_or_button, 'Download')
|
55
|
+
expect(page).to have_text 'Polygon'
|
56
|
+
|
57
|
+
click_button 'Attach File'
|
58
|
+
click_link 'Attach Metadata'
|
59
|
+
fill_in 'file_set[title][]', with: 'Metadata File'
|
60
|
+
select 'FGDC', from: 'file_set_geo_mime_type'
|
61
|
+
attach_file 'file_set[files][]', fgdc_file
|
62
|
+
click_button 'Attach to Vector Work'
|
63
|
+
expect(page).to have_text 'Metadata File'
|
64
|
+
|
65
|
+
click_link 'Edit Work'
|
66
|
+
select 'zipcodes_fgdc.xml', from: 'vector_work[should_populate_metadata]'
|
67
|
+
click_button 'Save'
|
68
|
+
click_link "No. I'll update it manually."
|
69
|
+
expect(page).to have_text 'Louisiana ZIP Code Areas 2002'
|
70
|
+
end
|
59
71
|
end
|
60
72
|
end
|
61
73
|
end
|
@@ -26,13 +26,17 @@ end
|
|
26
26
|
|
27
27
|
shared_examples 'a set of vector derivatives' do
|
28
28
|
let(:generator) { instance_double(GeoWorks::EventsGenerator) }
|
29
|
+
let(:geometry_service) { instance_double(GeoWorks::VectorGeometryService) }
|
30
|
+
|
29
31
|
before do
|
30
32
|
allow(GeoWorks::EventsGenerator).to receive(:new).and_return(generator)
|
33
|
+
allow(GeoWorks::VectorGeometryService).to receive(:new).and_return(geometry_service)
|
31
34
|
allow(generator).to receive(:derivatives_created)
|
32
35
|
end
|
33
36
|
it 'makes a thumbnail' do
|
34
37
|
new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/thumbnail.thumbnail"
|
35
38
|
expect(generator).to receive(:derivatives_created).with(file_set)
|
39
|
+
expect(geometry_service).to receive(:call)
|
36
40
|
expect {
|
37
41
|
file_set.create_derivatives(file_name)
|
38
42
|
}.to change { Dir[new_thumb].empty? }
|
@@ -41,6 +45,7 @@ shared_examples 'a set of vector derivatives' do
|
|
41
45
|
|
42
46
|
it 'makes a display vector' do
|
43
47
|
new_thumb = "#{Rails.root}/tmp/derivatives/#{file_set.id}/display_vector.display_vector"
|
48
|
+
expect(geometry_service).to receive(:call)
|
44
49
|
expect {
|
45
50
|
file_set.create_derivatives(file_name)
|
46
51
|
}.to change { Dir[new_thumb].empty? }
|
@@ -3,21 +3,22 @@ require 'open3'
|
|
3
3
|
|
4
4
|
describe GeoWorks::Processors::Vector::Info do
|
5
5
|
let(:path) { 'test.tif' }
|
6
|
-
let(:
|
6
|
+
let(:polygon_info_doc) { read_test_data_fixture('ogrinfo_polygon.txt') }
|
7
|
+
let(:line_info_doc) { read_test_data_fixture('ogrinfo_line.txt') }
|
7
8
|
|
8
9
|
subject { described_class.new(path) }
|
9
10
|
|
10
11
|
context 'when initializing a new info class' do
|
11
12
|
it 'shells out to ogrinfo and sets the doc variable to the output string' do
|
12
13
|
expect(Open3).to receive(:capture3).with("ogrinfo -ro -so -al #{path}")
|
13
|
-
.and_return([
|
14
|
-
expect(subject.doc).to eq(
|
14
|
+
.and_return([polygon_info_doc, '', ''])
|
15
|
+
expect(subject.doc).to eq(polygon_info_doc)
|
15
16
|
end
|
16
17
|
end
|
17
18
|
|
18
|
-
context '
|
19
|
+
context 'with a polygon vector' do
|
19
20
|
before do
|
20
|
-
allow(subject).to receive(:doc).and_return(
|
21
|
+
allow(subject).to receive(:doc).and_return(polygon_info_doc)
|
21
22
|
end
|
22
23
|
|
23
24
|
describe '#name' do
|
@@ -33,7 +34,7 @@ describe GeoWorks::Processors::Vector::Info do
|
|
33
34
|
end
|
34
35
|
|
35
36
|
describe '#geom' do
|
36
|
-
it 'returns
|
37
|
+
it 'returns vector geometry' do
|
37
38
|
expect(subject.geom).to eq('Polygon')
|
38
39
|
end
|
39
40
|
end
|
@@ -47,4 +48,16 @@ describe GeoWorks::Processors::Vector::Info do
|
|
47
48
|
end
|
48
49
|
end
|
49
50
|
end
|
51
|
+
|
52
|
+
context 'with a line vector' do
|
53
|
+
before do
|
54
|
+
allow(subject).to receive(:doc).and_return(line_info_doc)
|
55
|
+
end
|
56
|
+
|
57
|
+
describe '#geom' do
|
58
|
+
it 'returns vector geometry' do
|
59
|
+
expect(subject.geom).to eq('Line')
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
50
63
|
end
|
@@ -14,7 +14,7 @@ describe GeoWorks::Discovery::DocumentBuilder do
|
|
14
14
|
let(:metadata_file) { FileSet.new(id: 'metadatafile', geo_mime_type: metadata__mime_type) }
|
15
15
|
let(:metadata_presenter) { Hyrax::FileSetPresenter.new(SolrDocument.new(metadata_file.to_solr), nil) }
|
16
16
|
let(:geo_file_mime_type) { 'application/zip; ogr-format="ESRI Shapefile"' }
|
17
|
-
let(:geo_file) { FileSet.new(id: 'geofile', geo_mime_type: geo_file_mime_type) }
|
17
|
+
let(:geo_file) { FileSet.new(id: 'geofile', geo_mime_type: geo_file_mime_type, geometry_type: 'Line') }
|
18
18
|
let(:geo_file_presenter) { Hyrax::FileSetPresenter.new(SolrDocument.new(geo_file.to_solr), nil) }
|
19
19
|
let(:coverage) { GeoWorks::Coverage.new(43.039, -69.856, 42.943, -71.032) }
|
20
20
|
let(:issued) { '01/02/2013' }
|
@@ -83,7 +83,7 @@ describe GeoWorks::Discovery::DocumentBuilder do
|
|
83
83
|
end
|
84
84
|
|
85
85
|
it 'has layer info fields' do
|
86
|
-
expect(document['layer_geom_type_s']).to eq('
|
86
|
+
expect(document['layer_geom_type_s']).to eq('Line')
|
87
87
|
expect(document['dc_format_s']).to eq('Shapefile')
|
88
88
|
end
|
89
89
|
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: geo_works
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 0.2.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- James Griffin
|
@@ -12,7 +12,7 @@ authors:
|
|
12
12
|
autorequire:
|
13
13
|
bindir: bin
|
14
14
|
cert_chain: []
|
15
|
-
date: 2017-09-
|
15
|
+
date: 2017-09-13 00:00:00.000000000 Z
|
16
16
|
dependencies:
|
17
17
|
- !ruby/object:Gem::Dependency
|
18
18
|
name: hyrax
|
@@ -386,6 +386,7 @@ files:
|
|
386
386
|
- app/helpers/geo_works/application_helper.rb
|
387
387
|
- app/helpers/geo_works/bounding_box_helper.rb
|
388
388
|
- app/helpers/geo_works/file_set_actions_helper.rb
|
389
|
+
- app/helpers/geo_works/geo_file_set_helper.rb
|
389
390
|
- app/helpers/geo_works/geo_works_helper.rb
|
390
391
|
- app/helpers/geo_works/populate_metadata_helper.rb
|
391
392
|
- app/jobs/geoblacklight_job.rb
|
@@ -466,6 +467,7 @@ files:
|
|
466
467
|
- app/services/geo_works/metadata_format_service.rb
|
467
468
|
- app/services/geo_works/raster_format_service.rb
|
468
469
|
- app/services/geo_works/vector_format_service.rb
|
470
|
+
- app/services/geo_works/vector_geometry_service.rb
|
469
471
|
- app/services/hyrax/curation_concern.rb
|
470
472
|
- app/values/geo_works/coverage.rb
|
471
473
|
- app/values/geo_works/time_period.rb
|