geo_concerns 0.0.4 → 0.0.5
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/.travis.yml +9 -2
- data/README.md +13 -0
- data/app/controllers/concerns/geo_concerns/file_sets_controller_behavior.rb +15 -0
- data/app/controllers/concerns/geo_concerns/geoblacklight_controller_behavior.rb +29 -0
- data/app/models/concerns/geo_concerns/ability.rb +12 -0
- data/app/models/concerns/geo_concerns/file_set/derivatives.rb +6 -6
- data/app/models/concerns/geo_concerns/geo_file_format_behavior.rb +4 -4
- data/app/presenters/geo_concerns/raster_work_show_presenter.rb +1 -1
- data/app/processors/geo_concerns/processors/mapnik.rb +30 -0
- data/app/processors/geo_concerns/processors/vector/base.rb +2 -1
- data/app/processors/geo_concerns/processors/vector/info.rb +66 -0
- data/app/services/geo_concerns/authority_service.rb +29 -0
- data/app/services/geo_concerns/discovery.rb +4 -0
- data/app/services/geo_concerns/discovery/abstract_document.rb +36 -0
- data/app/services/geo_concerns/discovery/document_builder.rb +69 -0
- data/app/services/geo_concerns/discovery/document_builder/basic_metadata_builder.rb +69 -0
- data/app/services/geo_concerns/discovery/document_builder/composite_builder.rb +21 -0
- data/app/services/geo_concerns/discovery/document_builder/date_builder.rb +38 -0
- data/app/services/geo_concerns/discovery/document_builder/document_helper.rb +10 -0
- data/app/services/geo_concerns/discovery/document_builder/document_path.rb +82 -0
- data/app/services/geo_concerns/discovery/document_builder/layer_info_builder.rb +65 -0
- data/app/services/geo_concerns/discovery/document_builder/references_builder.rb +82 -0
- data/app/services/geo_concerns/discovery/document_builder/spatial_builder.rb +40 -0
- data/app/services/geo_concerns/discovery/geoblacklight_document.rb +122 -0
- data/app/services/geo_concerns/image_format_service.rb +6 -0
- data/app/services/geo_concerns/metadata_format_service.rb +6 -0
- data/app/services/geo_concerns/raster_format_service.rb +6 -0
- data/app/services/geo_concerns/vector_format_service.rb +6 -0
- data/app/views/curation_concerns/image_works/show.html.erb +1 -1
- data/app/views/curation_concerns/raster_works/show.html.erb +1 -1
- data/app/views/curation_concerns/vector_works/show.html.erb +1 -1
- data/app/views/geo_concerns/_representative_media.html.erb +5 -0
- data/app/views/{curation_concerns → geo_concerns}/file_sets/_form.html.erb +4 -4
- data/app/views/geo_concerns/file_sets/media_display/_geo.html.erb +16 -0
- data/app/views/geo_concerns/file_sets/new.html.erb +12 -0
- data/config/routes.rb +18 -0
- data/geo_concerns.gemspec +2 -0
- data/lib/generators/geo_concerns/install_generator.rb +34 -0
- data/lib/generators/geo_concerns/templates/config/authorities/image_formats.yml +2 -0
- data/lib/generators/geo_concerns/templates/config/authorities/raster_formats.yml +4 -0
- data/lib/generators/geo_concerns/templates/config/authorities/vector_formats.yml +2 -0
- data/lib/generators/geo_concerns/templates/config/discovery/geoblacklight_schema.json +168 -0
- data/lib/generators/geo_concerns/templates/config/mapnik.yml +24 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/image_works_controller.rb +1 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/raster_works_controller.rb +1 -0
- data/lib/generators/geo_concerns/templates/controllers/curation_concerns/vector_works_controller.rb +1 -0
- data/lib/geo_concerns/version.rb +1 -1
- data/spec/controllers/file_sets_controller_spec.rb +20 -0
- data/spec/controllers/vector_works_controller_spec.rb +33 -0
- data/spec/processors/geo_concerns/processors/mapnik_spec.rb +48 -0
- data/spec/processors/geo_concerns/processors/vector/base_spec.rb +1 -1
- data/spec/processors/geo_concerns/processors/vector/info_spec.rb +41 -0
- data/spec/services/geo_concerns/discovery/abstract_document_spec.rb +23 -0
- data/spec/services/geo_concerns/discovery/document_builder_spec.rb +186 -0
- data/spec/services/geo_concerns/discovery/geoblacklight_document_spec.rb +17 -0
- data/spec/services/raster_format_service_spec.rb +1 -1
- data/template.rb +2 -2
- metadata +70 -9
- data/app/services/authority_service.rb +0 -23
- data/app/services/image_format_service.rb +0 -4
- data/app/services/metadata_format_service.rb +0 -4
- data/app/services/raster_format_service.rb +0 -4
- data/app/services/vector_format_service.rb +0 -4
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA1:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 11ccf6c23e362602390bfef2deccfa1a4db6bbf3
|
4
|
+
data.tar.gz: 9545ced09e1698ba1593290995281a664876e9be
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: 1c56506cab52e2766131fd741694fd377bb6aba742415ac65f3431937220c14755258d03e0ee88e4bfbe14883ca894d28f0ed83e867c67c075938f7498ac39e6
|
7
|
+
data.tar.gz: 7d636601661854a5ac61772a5eb93e5925cca7cdccfa97c9adde6802f2d9fa54766075956712c64f7aaf76085e5230232bb61da2bd3598e7025744be6b2e3339
|
data/.travis.yml
CHANGED
@@ -1,14 +1,21 @@
|
|
1
1
|
language: ruby
|
2
|
-
|
3
|
-
sudo: false
|
2
|
+
sudo: true
|
4
3
|
rvm:
|
5
4
|
- 2.3.0
|
6
5
|
env:
|
7
6
|
global:
|
8
7
|
- NOKOGIRI_USE_SYSTEM_LIBRARIES=true
|
8
|
+
- MAPNIK_VERSION="2.3"
|
9
|
+
before_install:
|
10
|
+
- sudo apt-add-repository --yes ppa:mapnik/nightly-${MAPNIK_VERSION}
|
11
|
+
- sudo apt-get update -y
|
12
|
+
install:
|
13
|
+
- sudo apt-get -y install wget build-essential make libmapnik=${MAPNIK_VERSION}* mapnik-utils=${MAPNIK_VERSION}* libmapnik-dev=${MAPNIK_VERSION}* mapnik-input-plugin*=${MAPNIK_VERSION}*
|
9
14
|
before_script:
|
10
15
|
- jdk_switcher use oraclejdk8
|
11
16
|
- gdalinfo --version
|
17
|
+
- gem install bundler -v 1.12.3
|
18
|
+
- bundle install
|
12
19
|
services:
|
13
20
|
- redis-server
|
14
21
|
addons:
|
data/README.md
CHANGED
@@ -20,6 +20,19 @@ Rails application for developing Hydra Geo models. Built around Curation Concern
|
|
20
20
|
* You can install it on Mac OSX with `brew install gdal`.
|
21
21
|
* On Ubuntu, use `sudo apt-get install gdal-bin`.
|
22
22
|
|
23
|
+
## Mapnik
|
24
|
+
|
25
|
+
GeoConcerns requires that Mapnik 3.x or 2.x be installed at `/usr/local/lib/libmapnik.*`. For linux, a C++ compiler and build environment is also needed.
|
26
|
+
|
27
|
+
Mac OS X:
|
28
|
+
|
29
|
+
- https://github.com/mapnik/mapnik/wiki/MacInstallation or ```brew install mapnik```
|
30
|
+
|
31
|
+
Linux:
|
32
|
+
|
33
|
+
- https://github.com/mapnik/mapnik/wiki/LinuxInstallation
|
34
|
+
- Build environment: [gcc](https://help.ubuntu.com/community/InstallingCompilers) or clang
|
35
|
+
|
23
36
|
## Installation
|
24
37
|
|
25
38
|
Create and run a new GeoConcerns application from a template:
|
@@ -6,6 +6,15 @@ module GeoConcerns
|
|
6
6
|
self.form_class = CurationConcerns::Forms::FileSetEditForm
|
7
7
|
end
|
8
8
|
|
9
|
+
# Render geo file sets form if parent is a geo work
|
10
|
+
def new
|
11
|
+
if geo?
|
12
|
+
render 'geo_concerns/file_sets/new'
|
13
|
+
else
|
14
|
+
super
|
15
|
+
end
|
16
|
+
end
|
17
|
+
|
9
18
|
# inject mime_type into permitted params
|
10
19
|
def file_set_params
|
11
20
|
super.tap do |permitted_params|
|
@@ -16,5 +25,11 @@ module GeoConcerns
|
|
16
25
|
def actor
|
17
26
|
@actor ||= GeoConcerns::Actors::FileSetActor.new(@file_set, current_user)
|
18
27
|
end
|
28
|
+
|
29
|
+
protected
|
30
|
+
|
31
|
+
def geo?
|
32
|
+
parent.image_work? || parent.raster_work? || parent.vector_work?
|
33
|
+
end
|
19
34
|
end
|
20
35
|
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GeoConcerns
|
2
|
+
module GeoblacklightControllerBehavior
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
def geoblacklight
|
7
|
+
respond_to do |f|
|
8
|
+
f.json do
|
9
|
+
if builder.to_hash.fetch(:error, nil)
|
10
|
+
render json: builder, status: 404
|
11
|
+
else
|
12
|
+
render json: builder
|
13
|
+
end
|
14
|
+
end
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
private
|
20
|
+
|
21
|
+
def document_class
|
22
|
+
Discovery::GeoblacklightDocument
|
23
|
+
end
|
24
|
+
|
25
|
+
def builder
|
26
|
+
@builder ||= Discovery::DocumentBuilder.new(presenter, document_class.new)
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -5,11 +5,11 @@ module GeoConcerns
|
|
5
5
|
|
6
6
|
def create_derivatives(filename)
|
7
7
|
case geo_mime_type
|
8
|
-
when *ImageFormatService.select_options.map(&:last)
|
8
|
+
when *GeoConcerns::ImageFormatService.select_options.map(&:last)
|
9
9
|
image_derivatives(filename)
|
10
|
-
when *RasterFormatService.select_options.map(&:last)
|
10
|
+
when *GeoConcerns::RasterFormatService.select_options.map(&:last)
|
11
11
|
raster_derivatives(filename)
|
12
|
-
when *VectorFormatService.select_options.map(&:last)
|
12
|
+
when *GeoConcerns::VectorFormatService.select_options.map(&:last)
|
13
13
|
vector_derivatives(filename)
|
14
14
|
end
|
15
15
|
|
@@ -19,7 +19,7 @@ module GeoConcerns
|
|
19
19
|
def image_derivatives(filename)
|
20
20
|
Hydra::Derivatives::ImageDerivatives
|
21
21
|
.create(filename, outputs: [{ label: :thumbnail,
|
22
|
-
format: '
|
22
|
+
format: 'png',
|
23
23
|
size: '200x150>',
|
24
24
|
url: derivative_url('thumbnail') }])
|
25
25
|
end
|
@@ -32,7 +32,7 @@ module GeoConcerns
|
|
32
32
|
url: derivative_url('display_raster') },
|
33
33
|
{ input_format: geo_mime_type,
|
34
34
|
label: :thumbnail,
|
35
|
-
format: '
|
35
|
+
format: 'png',
|
36
36
|
size: '200x150',
|
37
37
|
url: derivative_url('thumbnail') }])
|
38
38
|
end
|
@@ -45,7 +45,7 @@ module GeoConcerns
|
|
45
45
|
url: derivative_url('display_vector') },
|
46
46
|
{ input_format: geo_mime_type,
|
47
47
|
label: :thumbnail,
|
48
|
-
format: '
|
48
|
+
format: 'png',
|
49
49
|
size: '200x150',
|
50
50
|
url: derivative_url('thumbnail') }])
|
51
51
|
end
|
@@ -3,19 +3,19 @@ module GeoConcerns
|
|
3
3
|
extend ActiveSupport::Concern
|
4
4
|
|
5
5
|
def image_file?
|
6
|
-
ImageFormatService.include?(geo_mime_type)
|
6
|
+
GeoConcerns::ImageFormatService.include?(geo_mime_type)
|
7
7
|
end
|
8
8
|
|
9
9
|
def raster_file?
|
10
|
-
RasterFormatService.include?(geo_mime_type)
|
10
|
+
GeoConcerns::RasterFormatService.include?(geo_mime_type)
|
11
11
|
end
|
12
12
|
|
13
13
|
def vector_file?
|
14
|
-
VectorFormatService.include?(geo_mime_type)
|
14
|
+
GeoConcerns::VectorFormatService.include?(geo_mime_type)
|
15
15
|
end
|
16
16
|
|
17
17
|
def external_metadata_file?
|
18
|
-
MetadataFormatService.include?(geo_mime_type)
|
18
|
+
GeoConcerns::MetadataFormatService.include?(geo_mime_type)
|
19
19
|
end
|
20
20
|
|
21
21
|
def geo_file_format?
|
@@ -1,6 +1,6 @@
|
|
1
1
|
module GeoConcerns
|
2
2
|
class RasterWorkShowPresenter < GeoConcernsShowPresenter
|
3
3
|
self.work_presenter_class = ::GeoConcerns::VectorWorkShowPresenter
|
4
|
-
self.file_format_service = RasterFormatService
|
4
|
+
self.file_format_service = GeoConcerns::RasterFormatService
|
5
5
|
end
|
6
6
|
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
require 'simple_mapnik'
|
2
|
+
|
3
|
+
module GeoConcerns
|
4
|
+
module Processors
|
5
|
+
module Mapnik
|
6
|
+
extend ActiveSupport::Concern
|
7
|
+
|
8
|
+
included do
|
9
|
+
def self.mapnik_vector_thumbnail(in_path, out_path, options)
|
10
|
+
vector_info = GeoConcerns::Processors::Vector::Info.new(in_path)
|
11
|
+
options[:name] = vector_info.name
|
12
|
+
SimpleMapnik.register_datasources '/usr/local/lib/mapnik/input'
|
13
|
+
map = SimpleMapnik::Map.new(*mapnik_size(options))
|
14
|
+
map.load_string(mapnik_config(in_path, options).xml)
|
15
|
+
map.zoom_all
|
16
|
+
map.to_file out_path
|
17
|
+
end
|
18
|
+
|
19
|
+
def self.mapnik_size(options)
|
20
|
+
options[:output_size].split(' ').map(&:to_i)
|
21
|
+
end
|
22
|
+
|
23
|
+
def self.mapnik_config(in_path, options)
|
24
|
+
path_name = "#{in_path}/#{options[:name]}"
|
25
|
+
SimpleMapnik::Config.new(path_name)
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -6,6 +6,7 @@ module GeoConcerns
|
|
6
6
|
include GeoConcerns::Processors::BaseGeoProcessor
|
7
7
|
include GeoConcerns::Processors::Ogr
|
8
8
|
include GeoConcerns::Processors::Gdal
|
9
|
+
include GeoConcerns::Processors::Mapnik
|
9
10
|
include GeoConcerns::Processors::Zip
|
10
11
|
|
11
12
|
def self.encode(path, options, output_file)
|
@@ -20,7 +21,7 @@ module GeoConcerns
|
|
20
21
|
# Set of commands to run to encode the vector thumbnail.
|
21
22
|
# @return [Array] set of command name symbols
|
22
23
|
def self.encode_queue
|
23
|
-
[:
|
24
|
+
[:reproject, :mapnik_vector_thumbnail]
|
24
25
|
end
|
25
26
|
|
26
27
|
# Set of commands to run to reproject the vector.
|
@@ -0,0 +1,66 @@
|
|
1
|
+
module GeoConcerns
|
2
|
+
module Processors
|
3
|
+
module Vector
|
4
|
+
class Info
|
5
|
+
attr_accessor :doc
|
6
|
+
attr_writer :name, :driver
|
7
|
+
|
8
|
+
def initialize(path)
|
9
|
+
@doc = ogrinfo(path)
|
10
|
+
end
|
11
|
+
|
12
|
+
# Returns the vector dataset name
|
13
|
+
# @return [String] dataset name
|
14
|
+
def name
|
15
|
+
@name = vector_name
|
16
|
+
end
|
17
|
+
|
18
|
+
# Returns the ogr driver name
|
19
|
+
# @return [String] driver name
|
20
|
+
def driver
|
21
|
+
@driver = driver_name
|
22
|
+
end
|
23
|
+
|
24
|
+
# Returns vector geometry type
|
25
|
+
# @return [String] geom
|
26
|
+
def geom
|
27
|
+
@geom = vector_geom
|
28
|
+
end
|
29
|
+
|
30
|
+
private
|
31
|
+
|
32
|
+
# Runs the ogrinfo command and returns the result as a string.
|
33
|
+
# @param path [String] path to vector file or shapefile directory
|
34
|
+
# @return [String] output of ogrinfo
|
35
|
+
def ogrinfo(path)
|
36
|
+
stdout, _stderr, _status = Open3.capture3("ogrinfo #{path}")
|
37
|
+
stdout
|
38
|
+
end
|
39
|
+
|
40
|
+
# Given an output string from the ogrinfo command, returns
|
41
|
+
# the vector dataset name.
|
42
|
+
# @return [String] vector dataset name
|
43
|
+
def vector_name
|
44
|
+
match = /(?<=\d:\s).*?((?=\s)|($))/.match(doc)
|
45
|
+
match ? match[0] : ''
|
46
|
+
end
|
47
|
+
|
48
|
+
# Given an output string from the ogrinfo command, returns
|
49
|
+
# the ogr driver used to read dataset.
|
50
|
+
# @return [String] ogr driver name
|
51
|
+
def driver_name
|
52
|
+
match = /(?<=driver\s`).*?(?=')/.match(doc)
|
53
|
+
match ? match[0] : ''
|
54
|
+
end
|
55
|
+
|
56
|
+
# Given an output string from the ogrinfo command, returns
|
57
|
+
# the vector geometry type.
|
58
|
+
# @return [String] vector geom
|
59
|
+
def vector_geom
|
60
|
+
match = /(?<=\().*?(?=\))/.match(doc)
|
61
|
+
match ? match[0] : ''
|
62
|
+
end
|
63
|
+
end
|
64
|
+
end
|
65
|
+
end
|
66
|
+
end
|
@@ -0,0 +1,29 @@
|
|
1
|
+
module GeoConcerns
|
2
|
+
module AuthorityService
|
3
|
+
extend ActiveSupport::Concern
|
4
|
+
|
5
|
+
included do
|
6
|
+
mattr_accessor :authority
|
7
|
+
end
|
8
|
+
|
9
|
+
class_methods do
|
10
|
+
def select_options
|
11
|
+
authority.all.map do |element|
|
12
|
+
[element[:label], element[:id]]
|
13
|
+
end
|
14
|
+
end
|
15
|
+
|
16
|
+
def label(id)
|
17
|
+
(authority.find(id) || {}).fetch('term', nil)
|
18
|
+
end
|
19
|
+
|
20
|
+
def code(id)
|
21
|
+
(authority.find(id) || {}).fetch('code', nil)
|
22
|
+
end
|
23
|
+
|
24
|
+
def include?(id)
|
25
|
+
!authority.find(id).nil? && !authority.find(id).empty?
|
26
|
+
end
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
@@ -0,0 +1,36 @@
|
|
1
|
+
module GeoConcerns
|
2
|
+
module Discovery
|
3
|
+
class AbstractDocument
|
4
|
+
attr_accessor :id, :provenance, :creator, :subject, :spatial, :temporal,
|
5
|
+
:title, :identifier, :description, :access_rights, :language,
|
6
|
+
:publisher, :slug, :solr_coverage, :geo_rss_coverage, :layer_year,
|
7
|
+
:date_modified, :geom_type, :format, :resource_type, :wxs_identifier,
|
8
|
+
:dct_references, :fgdc, :iso19139, :mods, :download, :url, :thumbnail
|
9
|
+
|
10
|
+
# Cleans the document hash by removing unused fields.
|
11
|
+
# @param [Hash] document hash
|
12
|
+
# @return [Hash] cleaned document hash
|
13
|
+
def clean_document(hash)
|
14
|
+
hash.delete_if do |_k, v|
|
15
|
+
begin
|
16
|
+
v.nil? || v.empty?
|
17
|
+
rescue
|
18
|
+
false
|
19
|
+
end
|
20
|
+
end
|
21
|
+
end
|
22
|
+
|
23
|
+
def to_hash(_arg)
|
24
|
+
raise 'this method should be overriden and return the document as a hash'
|
25
|
+
end
|
26
|
+
|
27
|
+
def to_json(_arg)
|
28
|
+
raise 'this method should be overriden and return the document as json'
|
29
|
+
end
|
30
|
+
|
31
|
+
def to_xml(_arg)
|
32
|
+
raise 'this method should be overriden and return the document as xml'
|
33
|
+
end
|
34
|
+
end
|
35
|
+
end
|
36
|
+
end
|
@@ -0,0 +1,69 @@
|
|
1
|
+
module GeoConcerns
|
2
|
+
module Discovery
|
3
|
+
class DocumentBuilder
|
4
|
+
attr_reader :geo_concern, :document
|
5
|
+
delegate :to_json, :to_xml, :to_hash, to: :document
|
6
|
+
|
7
|
+
def initialize(geo_concern, document, ssl: false)
|
8
|
+
@geo_concern = geo_concern
|
9
|
+
@document = document
|
10
|
+
@ssl = ssl
|
11
|
+
builders.build(document)
|
12
|
+
end
|
13
|
+
|
14
|
+
# Returns a document path object. Used to get urls for links in the document.
|
15
|
+
# @return [DocumentPath] geoblacklight document as a json string
|
16
|
+
def root_path
|
17
|
+
@root_path ||= DocumentPath.new(geo_concern, ssl: @ssl)
|
18
|
+
end
|
19
|
+
|
20
|
+
# Instantiates a CompositeBuilder object with an array of
|
21
|
+
# builder instances that are used to create the document.
|
22
|
+
# @return [CompositeBuilder] composite builder for document
|
23
|
+
def builders
|
24
|
+
@builders ||= CompositeBuilder.new(
|
25
|
+
basic_metadata_builder,
|
26
|
+
spatial_builder,
|
27
|
+
date_builder,
|
28
|
+
references_builder,
|
29
|
+
layer_info_builder
|
30
|
+
)
|
31
|
+
end
|
32
|
+
|
33
|
+
# Instantiates a BasicMetadataBuilder object.
|
34
|
+
# Builds fields such as id, subject, and publisher.
|
35
|
+
# @return [BasicMetadataBuilder] basic metadata builder for document
|
36
|
+
def basic_metadata_builder
|
37
|
+
BasicMetadataBuilder.new(geo_concern)
|
38
|
+
end
|
39
|
+
|
40
|
+
# Instantiates a SpatialBuilder object.
|
41
|
+
# Builds spatial fields such as bounding box and solr geometry.
|
42
|
+
# @return [SpatialBuilder] spatial builder for document
|
43
|
+
def spatial_builder
|
44
|
+
SpatialBuilder.new(geo_concern)
|
45
|
+
end
|
46
|
+
|
47
|
+
# Instantiates a DateBuilder object.
|
48
|
+
# Builds date fields such as layer year and modified date.
|
49
|
+
# @return [DateBuilder] date builder for document
|
50
|
+
def date_builder
|
51
|
+
DateBuilder.new(geo_concern)
|
52
|
+
end
|
53
|
+
|
54
|
+
# Instantiates a ReferencesBuilder object.
|
55
|
+
# Builds service reference fields such as thumbnail and download url.
|
56
|
+
# @return [ReferencesBuilder] references builder for document
|
57
|
+
def references_builder
|
58
|
+
ReferencesBuilder.new(geo_concern, root_path)
|
59
|
+
end
|
60
|
+
|
61
|
+
# Instantiates a LayerInfoBuilder object.
|
62
|
+
# Builds fields about the geospatial file such as geometry and format.
|
63
|
+
# @return [LayerInfoBuilder] layer info builder for document
|
64
|
+
def layer_info_builder
|
65
|
+
LayerInfoBuilder.new(geo_concern)
|
66
|
+
end
|
67
|
+
end
|
68
|
+
end
|
69
|
+
end
|