geoblacklight 0.3.4 → 0.4.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (52) hide show
  1. checksums.yaml +4 -4
  2. data/.gitmodules +0 -5
  3. data/.travis.yml +3 -0
  4. data/README.md +24 -76
  5. data/Rakefile +2 -3
  6. data/app/assets/javascripts/geoblacklight/downloaders.js +1 -0
  7. data/app/assets/javascripts/geoblacklight/downloaders/downloader.js +51 -0
  8. data/app/assets/javascripts/geoblacklight/downloaders/hgl_downloader.js +32 -0
  9. data/app/assets/javascripts/geoblacklight/modules/download.js +7 -41
  10. data/app/controllers/download_controller.rb +19 -1
  11. data/app/controllers/wms_controller.rb +1 -1
  12. data/app/views/catalog/_show_sidebar.html.erb +25 -13
  13. data/app/views/download/hgl.html.erb +25 -0
  14. data/config/locales/geoblacklight.en.yml +1 -0
  15. data/lib/generators/geoblacklight/install_generator.rb +3 -2
  16. data/lib/generators/geoblacklight/templates/geoblacklight.js +1 -0
  17. data/lib/geoblacklight.rb +2 -0
  18. data/lib/geoblacklight/constants.rb +2 -1
  19. data/lib/geoblacklight/download/hgl_download.rb +17 -0
  20. data/lib/geoblacklight/engine.rb +1 -0
  21. data/lib/geoblacklight/solr_document.rb +4 -0
  22. data/lib/geoblacklight/version.rb +1 -1
  23. data/lib/geoblacklight/wms_layer.rb +31 -31
  24. data/lib/geoblacklight/wms_layer/feature_info_response.rb +26 -24
  25. data/lib/tasks/geoblacklight.rake +2 -2
  26. data/spec/controllers/download_controller_spec.rb +13 -2
  27. data/spec/features/download_layer_spec.rb +18 -3
  28. data/spec/features/home_page_spec.rb +3 -3
  29. data/spec/features/layer_preview_spec.rb +3 -3
  30. data/spec/features/split_view.html.erb_spec.rb +2 -4
  31. data/spec/fixtures/solr_documents/actual-papermap1.json +26 -0
  32. data/spec/fixtures/solr_documents/actual-point1.json +27 -0
  33. data/spec/fixtures/solr_documents/actual-polygon1.json +26 -0
  34. data/spec/fixtures/solr_documents/actual-raster1.json +44 -0
  35. data/spec/fixtures/{test-dct-references6.json → solr_documents/harvard_raster.json} +2 -6
  36. data/spec/fixtures/solr_documents/public_iiif_princeton.json +38 -0
  37. data/spec/fixtures/solr_documents/public_polygon_mit.json +47 -0
  38. data/spec/fixtures/solr_documents/restricted-line.json +43 -0
  39. data/spec/lib/geoblacklight/download/hgl_download_spec.rb +14 -0
  40. data/spec/lib/geoblacklight/solr_document_spec.rb +20 -0
  41. data/spec/lib/geoblacklight/wms_layer/feature_info_response_spec.rb +5 -5
  42. data/spec/lib/geoblacklight/wms_layer_spec.rb +4 -4
  43. metadata +25 -22
  44. data/spec/features/dct_references_spec.rb +0 -77
  45. data/spec/fixtures/test-dct-references1.json +0 -38
  46. data/spec/fixtures/test-dct-references2.json +0 -41
  47. data/spec/fixtures/test-dct-references3.json +0 -45
  48. data/spec/fixtures/test-dct-references4.json +0 -60
  49. data/spec/fixtures/test-dct-references5.json +0 -57
  50. data/spec/fixtures/test-dct-references7.json +0 -42
  51. data/spec/fixtures/test-dct-references8.json +0 -46
  52. data/spec/support/dct_references_generate.rb +0 -100
@@ -28,8 +28,8 @@ module Geoblacklight
28
28
  end
29
29
 
30
30
  def fixtures
31
- FileUtils.mkdir_p 'spec/fixtures/geoblacklight_schema'
32
- system 'curl -L https://raw.githubusercontent.com/geoblacklight/geoblacklight-schema/master/examples/selected.json -o spec/fixtures/geoblacklight_schema/selected.json'
31
+ FileUtils.mkdir_p 'spec/fixtures/solr_documents'
32
+ directory 'solr_documents', 'spec/fixtures/solr_documents'
33
33
  end
34
34
 
35
35
  def add_unique_key
@@ -42,6 +42,7 @@ module Geoblacklight
42
42
  route 'post "wms/handle"'
43
43
  route 'resources :download, only: [:show, :file]'
44
44
  route "get 'download/file/:id' => 'download#file', as: :download_file"
45
+ route "get 'download/hgl/:id' => 'download#hgl', as: :download_hgl"
45
46
  end
46
47
 
47
48
  def create_downloads_directory
@@ -1,4 +1,5 @@
1
1
  //= require geoblacklight/geoblacklight
2
2
  //= require geoblacklight/viewers
3
3
  //= require geoblacklight/modules
4
+ //= require geoblacklight/downloaders
4
5
  //= require blacklight_range_limit
data/lib/geoblacklight.rb CHANGED
@@ -9,11 +9,13 @@ module Geoblacklight
9
9
  require 'geoblacklight/item_viewer'
10
10
  require 'geoblacklight/solr_document'
11
11
  require 'geoblacklight/wms_layer'
12
+ require 'geoblacklight/wms_layer/feature_info_response'
12
13
  require 'geoblacklight/download'
13
14
  require 'geoblacklight/download/geojson_download'
14
15
  require 'geoblacklight/download/geotiff_download'
15
16
  require 'geoblacklight/download/kmz_download'
16
17
  require 'geoblacklight/download/shapefile_download'
18
+ require 'geoblacklight/download/hgl_download'
17
19
  require 'geoblacklight/reference'
18
20
  require 'geoblacklight/references'
19
21
  def self.inject!
@@ -13,7 +13,8 @@ module Geoblacklight
13
13
  url: 'http://schema.org/url',
14
14
  wcs: 'http://www.opengis.net/def/serviceType/ogc/wcs',
15
15
  wfs: 'http://www.opengis.net/def/serviceType/ogc/wfs',
16
- wms: 'http://www.opengis.net/def/serviceType/ogc/wms'
16
+ wms: 'http://www.opengis.net/def/serviceType/ogc/wms',
17
+ hgl: 'http://schema.org/DownloadAction'
17
18
  }
18
19
  end
19
20
  end
@@ -0,0 +1,17 @@
1
+ class HglDownload < Download
2
+ def initialize(document, email)
3
+
4
+ request_params = {
5
+ "LayerName" => document[:layer_id_s].sub(/^cite:/, ''),
6
+ "UserEmail" => email
7
+ }
8
+ super(document, {
9
+ request_params: request_params,
10
+ service_type: 'hgl'
11
+ })
12
+ end
13
+
14
+ def get
15
+ initiate_download
16
+ end
17
+ end
@@ -6,6 +6,7 @@ require 'font-awesome-rails'
6
6
  require 'rails_config'
7
7
  require 'faraday'
8
8
  require 'blacklight_range_limit'
9
+ require 'nokogiri'
9
10
 
10
11
  module Geoblacklight
11
12
  class Engine < ::Rails::Engine
@@ -35,6 +35,10 @@ module Geoblacklight
35
35
  return references.download.to_hash unless references.download.blank?
36
36
  end
37
37
 
38
+ def hgl_download
39
+ return references.hgl.to_hash unless references.hgl.blank?
40
+ end
41
+
38
42
  def same_institution?
39
43
  get(:dct_provenance_s).downcase == Settings.INSTITUTION.downcase
40
44
  end
@@ -1,3 +1,3 @@
1
1
  module Geoblacklight
2
- VERSION = '0.3.4'
2
+ VERSION = '0.4.0'
3
3
  end
@@ -1,40 +1,40 @@
1
- require 'nokogiri'
2
- require 'geoblacklight/wms_layer/feature_info_response'
3
- class WmsLayer
1
+ module Geoblacklight
2
+ class WmsLayer
4
3
 
5
- def initialize(params)
6
- @params = params.merge(Settings.WMS_PARAMS)
7
- @response = FeatureInfoResponse.new(request_response)
8
- end
4
+ def initialize(params)
5
+ @params = params.merge(Settings.WMS_PARAMS)
6
+ @response = Geoblacklight::FeatureInfoResponse.new(request_response)
7
+ end
9
8
 
10
- def url
11
- @params['URL']
12
- end
9
+ def url
10
+ @params['URL']
11
+ end
13
12
 
14
- def search_params
15
- @params.except('URL')
16
- end
13
+ def search_params
14
+ @params.except('URL')
15
+ end
17
16
 
18
- def get_feature_info
19
- @response.check
20
- end
17
+ def get_feature_info
18
+ @response.check
19
+ end
21
20
 
22
- def request_response
23
- begin
24
- conn = Faraday.new(url: url)
25
- conn.get do |request|
26
- request.params = search_params
27
- request.options = {
28
- timeout: Settings.TIMEOUT_WMS,
29
- open_timeout: Settings.TIMEOUT_WMS
30
- }
21
+ def request_response
22
+ begin
23
+ conn = Faraday.new(url: url)
24
+ conn.get do |request|
25
+ request.params = search_params
26
+ request.options = {
27
+ timeout: Settings.TIMEOUT_WMS,
28
+ open_timeout: Settings.TIMEOUT_WMS
29
+ }
30
+ end
31
+ rescue Faraday::Error::ConnectionFailed => error
32
+ Geoblacklight.logger.error error.inspect
33
+ { error: error.inspect }
34
+ rescue Faraday::Error::TimeoutError => error
35
+ Geoblacklight.logger.error error.inspect
36
+ { error: error.inspect }
31
37
  end
32
- rescue Faraday::Error::ConnectionFailed => error
33
- Geoblacklight.logger.error error.inspect
34
- { error: error.inspect }
35
- rescue Faraday::Error::TimeoutError => error
36
- Geoblacklight.logger.error error.inspect
37
- { error: error.inspect }
38
38
  end
39
39
  end
40
40
  end
@@ -1,30 +1,32 @@
1
- class FeatureInfoResponse
2
- def initialize(response)
3
- @response = response
4
- end
5
-
6
- def check
7
- if error?
8
- @response
9
- else
10
- format
1
+ module Geoblacklight
2
+ class FeatureInfoResponse
3
+ def initialize(response)
4
+ @response = response
11
5
  end
12
- end
13
6
 
14
- def format
15
- page = Nokogiri::HTML(@response.body)
16
- table_values = { values: [] }
17
- page.css('th').each do |th|
18
- table_values[:values].push([th.text])
7
+ def check
8
+ if error?
9
+ @response
10
+ else
11
+ format
12
+ end
19
13
  end
20
- page.css('td').each_with_index do |td, index|
21
- table_values[:values][index].push(td.text)
14
+
15
+ def format
16
+ page = Nokogiri::HTML(@response.body)
17
+ table_values = { values: [] }
18
+ page.css('th').each do |th|
19
+ table_values[:values].push([th.text])
20
+ end
21
+ page.css('td').each_with_index do |td, index|
22
+ table_values[:values][index].push(td.text)
23
+ end
24
+ table_values
22
25
  end
23
- table_values
24
- end
25
26
 
26
- def error?
27
- @response[:error] ||
28
- @response.headers['content-type'].slice(0, 9) == 'text/xml'
27
+ def error?
28
+ @response[:error] ||
29
+ @response.headers['content-type'].slice(0, 9) == 'text/xml'
30
+ end
29
31
  end
30
- end
32
+ end
@@ -5,11 +5,11 @@ namespace :geoblacklight do
5
5
  namespace :solr do
6
6
  desc "Put sample data into solr"
7
7
  task :seed => :environment do
8
- docs = JSON::parse(File.read("#{Rails.root}/spec/fixtures/geoblacklight_schema/selected.json"))
8
+ docs = Dir['spec/fixtures/solr_documents/*.json'].map { |f| JSON.parse File.read(f) }.flatten
9
9
  Blacklight.solr.add docs
10
10
  Blacklight.solr.commit
11
11
  end
12
-
12
+
13
13
  desc "Ingests a GeoHydra transformed.json"
14
14
  task :ingest_all => :environment do
15
15
  docs = JSON::parse(File.read("#{Rails.root}/tmp/transformed.json"))
@@ -4,7 +4,7 @@ describe Geoblacklight::DownloadController, type: :controller do
4
4
  describe '#file' do
5
5
  describe 'restricted file' do
6
6
  it 'should redirect to login for authentication' do
7
- get :file, id: 'stanford-jf841ys4828-shapefile', format: 'zip'
7
+ get :file, id: 'stanford-cg357zz0321-shapefile', format: 'zip'
8
8
  expect(response.status).to eq 401
9
9
  end
10
10
  end
@@ -20,7 +20,7 @@ describe Geoblacklight::DownloadController, type: :controller do
20
20
  describe '#show' do
21
21
  describe 'restricted file' do
22
22
  it 'should redirect to login for authentication' do
23
- get 'show', id: 'stanford-jf841ys4828', format: 'json'
23
+ get 'show', id: 'stanford-cg357zz0321', format: 'json'
24
24
  expect(response.status).to eq 401
25
25
  end
26
26
  end
@@ -31,4 +31,15 @@ describe Geoblacklight::DownloadController, type: :controller do
31
31
  end
32
32
  end
33
33
  end
34
+ describe '#hgl' do
35
+ it 'should request file' do
36
+ expect_any_instance_of(HglDownload).to receive(:get).and_return('success')
37
+ get :hgl, id: 'harvard-g7064-s2-1834-k3', email: 'foo@example.com'
38
+ expect(response.status).to eq 200
39
+ end
40
+ it 'should render form' do
41
+ get :hgl, id: 'harvard-g7064-s2-1834-k3'
42
+ expect(response).to render_template('hgl')
43
+ end
44
+ end
34
45
  end
@@ -21,20 +21,20 @@ feature 'Download layer' do
21
21
  expect(page).to have_css('li a', text: 'Download KMZ')
22
22
  end
23
23
  scenario 'restricted layer should not have download available to non logged in user' do
24
- visit catalog_path('stanford-jf841ys4828')
24
+ visit catalog_path('stanford-cg357zz0321')
25
25
  expect(page).to have_css 'a', text: 'Login to view and download'
26
26
  expect(page).to_not have_css 'button', text: 'Download Shapefile'
27
27
  end
28
28
  scenario 'restricted layer should have download available to logged in user' do
29
29
  sign_in
30
- visit catalog_path('stanford-jf841ys4828')
30
+ visit catalog_path('stanford-cg357zz0321')
31
31
  expect(page).to_not have_css 'a', text: 'Login to view and download'
32
32
  expect(page).to have_css 'a', text: 'Download Shapefile'
33
33
  expect(page).to have_css 'button.download-dropdown-toggle'
34
34
  end
35
35
  scenario 'layer with direct download and wms/wfs should include all download types' do
36
36
  sign_in
37
- visit catalog_path('stanford-jf841ys4828')
37
+ visit catalog_path('stanford-cg357zz0321')
38
38
  expect(page).to have_css 'a', text: 'Download Shapefile'
39
39
  find('button.download-dropdown-toggle').click
40
40
  expect(page).to have_css 'li.dropdown-header', text: 'Original'
@@ -42,4 +42,19 @@ feature 'Download layer' do
42
42
  expect(page).to have_css 'li a', text: 'Download Shapefile'
43
43
  expect(page).to have_css 'li a', text: 'Download KMZ'
44
44
  end
45
+ scenario 'clicking GeoTIFF button for Harvard layer should show email form', js: true do
46
+ visit catalog_path('harvard-g7064-s2-1834-k3')
47
+ find('a', text: 'Download GeoTIFF').click
48
+ expect(page).to have_css('#hglRequest')
49
+ end
50
+ scenario 'submitting email form should trigger HGL request', js: true do
51
+ expect_any_instance_of(HglDownload).to receive(:get).and_return('success')
52
+ visit catalog_path('harvard-g7064-s2-1834-k3')
53
+ find('a', text: 'Download GeoTIFF').click
54
+ within '#hglRequest' do
55
+ fill_in('Email', with: 'foo@example.com')
56
+ click_button('Request')
57
+ end
58
+ expect(page).to have_content('You should receive an email when your download is ready')
59
+ end
45
60
  end
@@ -14,11 +14,11 @@ feature 'Home page', js: true do # use js: true for tests which require js, but
14
14
  end
15
15
  scenario 'find by category' do
16
16
  expect(page).to have_css '.category-block', count: 4
17
- expect(page).to have_css '.home-facet-link', count: 28
17
+ expect(page).to have_css '.home-facet-link', count: 29
18
18
  expect(page).to have_css 'a.more_facets_link', count: 4
19
- click_link 'Census'
19
+ click_link 'Elevation'
20
20
  expect(page).to have_css '.filterName', text: 'Subject'
21
- expect(page).to have_css '.filterValue', text: 'Census'
21
+ expect(page).to have_css '.filterValue', text: 'Elevation'
22
22
  end
23
23
  scenario 'map should be visible' do
24
24
  within '#main-container' do
@@ -2,10 +2,10 @@ require 'spec_helper'
2
2
 
3
3
  feature 'Layer preview', js: true do
4
4
  scenario 'Restricted layer should show bounding box' do
5
- visit catalog_path('mit-us-ma-cambridge-s1consv-2007')
5
+ visit catalog_path('stanford-cg357zz0321')
6
6
  expect(Nokogiri::HTML.parse(page.body).css('path').length).to eq 1
7
7
  end
8
-
8
+
9
9
  scenario 'Public layer should show wms layer not bounding box' do
10
10
  visit catalog_path('mit-us-ma-e25zcta5dct-2000')
11
11
  expect(Nokogiri::HTML.parse(page.body).css('path').length).to eq 0
@@ -13,4 +13,4 @@ feature 'Layer preview', js: true do
13
13
  expect(page).to have_css('.leaflet-layer', count: 2)
14
14
  end
15
15
  end
16
- end
16
+ end
@@ -24,10 +24,8 @@ feature 'Index view', js: true do
24
24
  expect(page).to have_css('div.panel.facet_limit', text: 'Format')
25
25
  end
26
26
  click_link 'Institution'
27
- expect(page).to have_css('a.facet_select', text: 'Harvard', visible: true)
28
27
  expect(page).to have_css('a.facet_select', text: 'Tufts', visible: true)
29
28
  expect(page).to have_css('a.facet_select', text: 'MIT', visible: true)
30
- expect(page).to have_css('a.facet_select', text: 'MassGIS', visible: true)
31
29
  expect(page).to have_css('a.facet_select', text: 'Stanford', visible: true)
32
30
  end
33
31
 
@@ -48,9 +46,9 @@ feature 'Index view', js: true do
48
46
  end
49
47
 
50
48
  scenario 'spatial search should reset to page one' do
51
- visit '/?f%5Bdc_format_s%5D%5B%5D=Shapefile&page=2'
49
+ visit '/?per_page=5&q=%2A&page=2'
52
50
  find("#map").double_click
53
- expect(find('.page_entries')).to have_content('1 - 10')
51
+ expect(find('.page_entries')).to have_content('1 - 2 of 2')
54
52
  end
55
53
 
56
54
  scenario 'clicking map search should retain current search parameters' do
@@ -0,0 +1,26 @@
1
+ {
2
+ "uuid": "urn:arrowsmith.mit.edu:MIT.001145244",
3
+ "dc_description_s": "Panel title. Depths shown by isolines. \"Geological map [copyright] NERC 1996.\" Also available on flat sheet. \"Sheet 1\"--on panel. Includes text, notes, organizations' logos, and ancillary map of \"Orogenic terranes of Britain, Ireland and surrounding seas.\"",
4
+ "dc_format_s": "Paper",
5
+ "dc_identifier_s": "urn:arrowsmith.mit.edu:MIT.001145244",
6
+ "dc_language_s": "English",
7
+ "dc_publisher_s": "British Geological Survey",
8
+ "dc_rights_s": "Public",
9
+ "dc_title_s": "1:1 500 000 series [cartographic material] : tectonic map of Britain, Ireland and adjacent areas / British Geological Survey ; Geological Survey of Ireland ; Geological Survey of Northern Ireland.",
10
+ "dc_type_s": "Dataset",
11
+ "dct_references_s": "{\"http://schema.org/url\":\"http://library.mit.edu/item/001145244\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/MIT:001145244/fgdc.html\"}",
12
+ "dct_temporal_sm": [
13
+ "1996"
14
+ ],
15
+ "dct_issued_s": "2000",
16
+ "dct_provenance_s": "MIT",
17
+ "georss_box_s": "49.0 -13.0 62.0 4.0",
18
+ "georss_polygon_s": "62.0 -13.0 62.0 4.0 49.0 4.0 49.0 -13.0 62.0 -13.0",
19
+ "layer_slug_s": "mit-001145244",
20
+ "layer_id_s": "MIT:001145244",
21
+ "layer_geom_type_s": "Paper Map",
22
+ "layer_modified_dt": "2014-12-04T21:32:59Z",
23
+ "solr_bbox": "-13.0 49.0 4.0 62.0",
24
+ "solr_geom": "ENVELOPE(-13.0, 4.0, 62.0, 49.0)",
25
+ "solr_year_i": 1996
26
+ }
@@ -0,0 +1,27 @@
1
+ {
2
+ "uuid": "urn:columbia.edu:Columbia.landinfo_global_aet",
3
+ "dc_description_s": "Actual Evapotrans is a point theme representing the sum of evaporation and plant transpiration to the atmosphere from throughout the world. Measurements are represented by points at every.5 degrees and provided for every month of the year. This dataset is a part of the Global Climate Database from the Global Change Department National Institute of Public Health and Environmental Protection.",
4
+ "dc_format_s": "Shapefile",
5
+ "dc_identifier_s": "urn:columbia.edu:Columbia.landinfo_global_aet",
6
+ "dc_language_s": "English",
7
+ "dc_rights_s": "Public",
8
+ "dc_title_s": "Actual Evapotrans",
9
+ "dc_type_s": "Dataset",
10
+ "dct_references_s": "{\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/Columbia:Columbia.landinfo_global_aet/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/Columbia:Columbia.landinfo_global_aet/fgdc.html\"}",
11
+ "dct_spatial_sm": [
12
+ "World"
13
+ ],
14
+ "dct_temporal_sm": [
15
+ "1996"
16
+ ],
17
+ "dct_provenance_s": "Columbia",
18
+ "georss_box_s": "-56.0 -179.5 83.0 180.0",
19
+ "georss_polygon_s": "83.0 -179.5 83.0 180.0 -56.0 180.0 -56.0 -179.5 83.0 -179.5",
20
+ "layer_slug_s": "columbia-columbia-landinfo-global-aet",
21
+ "layer_id_s": "Columbia:Columbia.landinfo_global_aet",
22
+ "layer_geom_type_s": "Point",
23
+ "layer_modified_dt": "2014-12-12T19:54:57Z",
24
+ "solr_bbox": "-179.5 -56.0 180.0 83.0",
25
+ "solr_geom": "ENVELOPE(-179.5, 180.0, 83.0, -56.0)",
26
+ "solr_year_i": 1996
27
+ }
@@ -0,0 +1,26 @@
1
+ {
2
+ "uuid": "urn:geodata.tufts.edu:Tufts.CambridgeGrid100_04",
3
+ "dc_description_s": "This polygon dataset is a 100 foot grid overlay for Cambridge, MA.",
4
+ "dc_format_s": "Shapefile",
5
+ "dc_identifier_s": "urn:geodata.tufts.edu:Tufts.CambridgeGrid100_04",
6
+ "dc_language_s": "English",
7
+ "dc_publisher_s": "Cambridge (Mass.) Geographic Information Systems",
8
+ "dc_rights_s": "Public",
9
+ "dc_title_s": "100 Foot Grid Cambridge MA 2004",
10
+ "dc_type_s": "Dataset",
11
+ "dct_references_s": "{\"http://www.opengis.net/def/serviceType/ogc/wfs\":\"http://geoserver01.uit.tufts.edu/wfs\",\"http://www.opengis.net/def/serviceType/ogc/wms\":\"http://geoserver01.uit.tufts.edu/wms\",\"http://www.opengis.net/cat/csw/csdgm\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.xml\",\"http://www.w3.org/1999/xhtml\":\"http://opengeometadata.stanford.edu/metadata/org.opengeoportal/sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04/fgdc.html\"}",
12
+ "dct_temporal_sm": [
13
+ "2004"
14
+ ],
15
+ "dct_issued_s": "2005",
16
+ "dct_provenance_s": "Tufts",
17
+ "georss_box_s": "42.34757 -71.163984 42.408316 -71.052581",
18
+ "georss_polygon_s": "42.408316 -71.163984 42.408316 -71.052581 42.34757 -71.052581 42.34757 -71.163984 42.408316 -71.163984",
19
+ "layer_slug_s": "tufts-cambridgegrid100-04",
20
+ "layer_id_s": "sde:GISPORTAL.GISOWNER01.CAMBRIDGEGRID100_04",
21
+ "layer_geom_type_s": "Polygon",
22
+ "layer_modified_dt": "2014-12-04T21:33:07Z",
23
+ "solr_bbox": "-71.163984 42.34757 -71.052581 42.408316",
24
+ "solr_geom": "ENVELOPE(-71.163984, -71.052581, 42.408316, 42.34757)",
25
+ "solr_year_i": 2004
26
+ }