terrapop_models 0.1.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.
Files changed (490) hide show
  1. checksums.yaml +7 -0
  2. data/MIT-LICENSE +20 -0
  3. data/README.rdoc +3 -0
  4. data/Rakefile +34 -0
  5. data/app/assets/javascripts/terrapop_models/application.js +13 -0
  6. data/app/assets/stylesheets/terrapop_models/application.css +15 -0
  7. data/app/controllers/terrapop_models/application_controller.rb +4 -0
  8. data/app/helpers/terrapop_models/application_helper.rb +4 -0
  9. data/app/models/api_log.rb +2 -0
  10. data/app/models/area_data_raster.rb +126 -0
  11. data/app/models/area_data_raster_variable_mnemonic_lookup.rb +4 -0
  12. data/app/models/area_data_statistic.rb +6 -0
  13. data/app/models/area_data_table.rb +25 -0
  14. data/app/models/area_data_table_group.rb +8 -0
  15. data/app/models/area_data_table_group_membership.rb +7 -0
  16. data/app/models/area_data_value.rb +37 -0
  17. data/app/models/area_data_variable.rb +140 -0
  18. data/app/models/area_data_variable_construction.rb +6 -0
  19. data/app/models/attached_variable_pointer.rb +5 -0
  20. data/app/models/bare_user.rb +7 -0
  21. data/app/models/boundary.rb +6 -0
  22. data/app/models/build_status.rb +2 -0
  23. data/app/models/category.rb +17 -0
  24. data/app/models/codebook.rb +242 -0
  25. data/app/models/common_variable.rb +2 -0
  26. data/app/models/country.rb +45 -0
  27. data/app/models/country_comparability.rb +6 -0
  28. data/app/models/country_level.rb +8 -0
  29. data/app/models/ddi2_codebook.rb +541 -0
  30. data/app/models/error_event.rb +2 -0
  31. data/app/models/extract_data_artifact.rb +4 -0
  32. data/app/models/extract_request.rb +817 -0
  33. data/app/models/extract_request_area_data_raster_variable_mnemonic_lookup.rb +4 -0
  34. data/app/models/extract_request_error_event.rb +4 -0
  35. data/app/models/extract_request_submission.rb +19 -0
  36. data/app/models/extract_status.rb +55 -0
  37. data/app/models/extract_type.rb +2 -0
  38. data/app/models/extract_variable_stub.rb +17 -0
  39. data/app/models/frequency.rb +7 -0
  40. data/app/models/geog_instance.rb +18 -0
  41. data/app/models/geog_unit.rb +5 -0
  42. data/app/models/global_region.rb +6 -0
  43. data/app/models/global_region_type.rb +5 -0
  44. data/app/models/heartbeat.rb +8 -0
  45. data/app/models/heartbeat_pulse.rb +3 -0
  46. data/app/models/insert_html_fragment.rb +3 -0
  47. data/app/models/ipums_academic_status.rb +9 -0
  48. data/app/models/ipums_anticipated_result.rb +9 -0
  49. data/app/models/ipums_department.rb +9 -0
  50. data/app/models/ipums_registration.rb +72 -0
  51. data/app/models/ipums_user.rb +15 -0
  52. data/app/models/label.rb +7 -0
  53. data/app/models/link.rb +21 -0
  54. data/app/models/map.rb +255 -0
  55. data/app/models/map_unit.rb +4 -0
  56. data/app/models/map_unit_raster_dataset.rb +4 -0
  57. data/app/models/markup_transform.rb +240 -0
  58. data/app/models/measurement_type.rb +5 -0
  59. data/app/models/nhgis/agg_data_var.rb +120 -0
  60. data/app/models/nhgis/breakdown_combo.rb +84 -0
  61. data/app/models/nhgis/breakdown_var.rb +8 -0
  62. data/app/models/nhgis/data_file.rb +43 -0
  63. data/app/models/nhgis/data_file_type.rb +17 -0
  64. data/app/models/nhgis/data_group.rb +125 -0
  65. data/app/models/nhgis/data_record_range.rb +22 -0
  66. data/app/models/nhgis/data_table.rb +8 -0
  67. data/app/models/nhgis/dataset.rb +76 -0
  68. data/app/models/nhgis/dataset_group.rb +6 -0
  69. data/app/models/nhgis/geog_level.rb +14 -0
  70. data/app/models/nhgis/geog_level_collection.rb +15 -0
  71. data/app/models/nhgis/geog_level_geog_level_group.rb +10 -0
  72. data/app/models/nhgis/geog_level_group.rb +87 -0
  73. data/app/models/nhgis/geog_name.rb +12 -0
  74. data/app/models/nhgis/geog_unit.rb +11 -0
  75. data/app/models/nhgis/geog_var 2.rb +10 -0
  76. data/app/models/nhgis/geog_var.rb +6 -0
  77. data/app/models/nhgis/geog_var_geog_level.rb +8 -0
  78. data/app/models/nhgis/geotime.rb +21 -0
  79. data/app/models/nhgis/integ_geog_instance.rb +6 -0
  80. data/app/models/nhgis/integ_geog_instance_source_geog_instance.rb +9 -0
  81. data/app/models/nhgis/integ_geog_level.rb +9 -0
  82. data/app/models/nhgis/integ_geog_name.rb +12 -0
  83. data/app/models/nhgis/shape_file.rb +203 -0
  84. data/app/models/nhgis/shape_file_x_dataset.rb +8 -0
  85. data/app/models/nhgis/tabulation_type.rb +8 -0
  86. data/app/models/nhgis/time_instance.rb +6 -0
  87. data/app/models/nhgis/time_instance_integ_geog_level.rb +9 -0
  88. data/app/models/nhgis/time_series.rb +12 -0
  89. data/app/models/nhgis/time_series_component.rb +9 -0
  90. data/app/models/nhgis/time_series_release.rb +6 -0
  91. data/app/models/nhgis/time_series_table.rb +13 -0
  92. data/app/models/nhgis/time_series_table_dataset.rb +9 -0
  93. data/app/models/nhgis/time_series_table_geog_level.rb +9 -0
  94. data/app/models/nhgis/time_series_table_time_instance.rb +9 -0
  95. data/app/models/nhgis/time_series_table_time_series_release.rb +7 -0
  96. data/app/models/nhgis/time_series_table_topic.rb +9 -0
  97. data/app/models/nhgis/time_series_table_x_time_series.rb +9 -0
  98. data/app/models/nhgis_metadata_store.rb +2 -0
  99. data/app/models/raster.rb +5 -0
  100. data/app/models/raster_category.rb +6 -0
  101. data/app/models/raster_category_statistic.rb +7 -0
  102. data/app/models/raster_data_type.rb +6 -0
  103. data/app/models/raster_dataset.rb +130 -0
  104. data/app/models/raster_dataset_group.rb +3 -0
  105. data/app/models/raster_dataset_raster_data_type.rb +4 -0
  106. data/app/models/raster_dataset_raster_dataset_unit.rb +4 -0
  107. data/app/models/raster_dataset_raster_variable.rb +4 -0
  108. data/app/models/raster_dataset_unit.rb +4 -0
  109. data/app/models/raster_group.rb +87 -0
  110. data/app/models/raster_metadata.rb +6 -0
  111. data/app/models/raster_operation.rb +10 -0
  112. data/app/models/raster_raster_variable.rb +2 -0
  113. data/app/models/raster_statistic.rb +6 -0
  114. data/app/models/raster_value.rb +83 -0
  115. data/app/models/raster_variable.rb +440 -0
  116. data/app/models/raster_variable_classification.rb +4 -0
  117. data/app/models/raster_variable_group_membership.rb +4 -0
  118. data/app/models/request_area_data_variable.rb +57 -0
  119. data/app/models/request_geog_unit.rb +6 -0
  120. data/app/models/request_raster_dataset.rb +4 -0
  121. data/app/models/request_raster_variable.rb +147 -0
  122. data/app/models/request_sample.rb +34 -0
  123. data/app/models/request_sample_geog_level.rb +4 -0
  124. data/app/models/request_terrapop_sample.rb +6 -0
  125. data/app/models/request_variable.rb +104 -0
  126. data/app/models/resolution.rb +5 -0
  127. data/app/models/sample.rb +81 -0
  128. data/app/models/sample_design.rb +300 -0
  129. data/app/models/sample_detail_field.rb +7 -0
  130. data/app/models/sample_detail_group.rb +3 -0
  131. data/app/models/sample_detail_value.rb +11 -0
  132. data/app/models/sample_details.rb +90 -0
  133. data/app/models/sample_geog_level.rb +150 -0
  134. data/app/models/sample_level_area_data_variable.rb +13 -0
  135. data/app/models/sample_variable.rb +11 -0
  136. data/app/models/status_definition.rb +2 -0
  137. data/app/models/system_statistic.rb +5 -0
  138. data/app/models/tag.rb +7 -0
  139. data/app/models/terrapop_configuration.rb +75 -0
  140. data/app/models/terrapop_extract_information.rb +64 -0
  141. data/app/models/terrapop_raster_summary_cache.rb +6 -0
  142. data/app/models/terrapop_sample.rb +313 -0
  143. data/app/models/terrapop_setting.rb +11 -0
  144. data/app/models/topic.rb +7 -0
  145. data/app/models/ui_text_snippet.rb +2 -0
  146. data/app/models/universe.rb +5 -0
  147. data/app/models/user.rb +262 -0
  148. data/app/models/user_role.rb +5 -0
  149. data/app/models/variable.rb +127 -0
  150. data/app/models/variable_availability_cach.rb +3 -0
  151. data/app/models/variable_group.rb +14 -0
  152. data/app/models/variable_source.rb +8 -0
  153. data/app/views/layouts/terrapop_models/application.html.erb +14 -0
  154. data/config/routes.rb +2 -0
  155. data/db/migrate/00000000000100_create_countries.rb +15 -0
  156. data/db/migrate/00000000000200_create_universes.rb +11 -0
  157. data/db/migrate/00000000000300_create_geog_units.rb +9 -0
  158. data/db/migrate/00000000000400_create_measurement_types.rb +9 -0
  159. data/db/migrate/00000000000500_create_area_data_table_groups.rb +13 -0
  160. data/db/migrate/00000000000600_create_area_data_tables.rb +14 -0
  161. data/db/migrate/00000000000700_create_area_data_table_group_memberships.rb +12 -0
  162. data/db/migrate/00000000000800_create_tags.rb +9 -0
  163. data/db/migrate/00000000000900_create_topics.rb +9 -0
  164. data/db/migrate/00000000001000_create_variable_groups.rb +18 -0
  165. data/db/migrate/00000000001100_create_samples.rb +32 -0
  166. data/db/migrate/00000000001200_create_terrapop_samples.rb +12 -0
  167. data/db/migrate/00000000001300_create_variables.rb +52 -0
  168. data/db/migrate/00000000001400_create_country_levels.rb +17 -0
  169. data/db/migrate/00000000001450_variable_topics.rb +19 -0
  170. data/db/migrate/00000000001500_create_sample_geog_levels.rb +20 -0
  171. data/db/migrate/00000000002000_create_area_data_variables.rb +19 -0
  172. data/db/migrate/00000000002050_area_data_variable_topics.rb +22 -0
  173. data/db/migrate/00000000002100_create_sample_level_area_data_variables.rb +16 -0
  174. data/db/migrate/00000000002200_create_sample_level_area_variable_constructions.rb +12 -0
  175. data/db/migrate/00000000003000_create_maps.rb +22 -0
  176. data/db/migrate/00000000003100_create_boundaries.rb +14 -0
  177. data/db/migrate/00000000004000_create_geog_instances.rb +20 -0
  178. data/db/migrate/00000000004100_create_area_data_values.rb +18 -0
  179. data/db/migrate/00000000005000_create_sample_variables.rb +21 -0
  180. data/db/migrate/00000000005100_create_categories.rb +20 -0
  181. data/db/migrate/00000000005200_create_frequencies.rb +16 -0
  182. data/db/migrate/00000000005300_create_variable_sources.rb +16 -0
  183. data/db/migrate/00000000006000_create_user_roles.rb +8 -0
  184. data/db/migrate/00000000006100_create_users.rb +43 -0
  185. data/db/migrate/00000000006300_create_samples_tags.rb +15 -0
  186. data/db/migrate/00000000006400_create_terrapop_samples_tags.rb +15 -0
  187. data/db/migrate/00000000007000_create_raster_data_types.rb +9 -0
  188. data/db/migrate/00000000007050_create_resolutions.rb +8 -0
  189. data/db/migrate/00000000007100_create_raster_datasets.rb +26 -0
  190. data/db/migrate/00000000007200_create_raster_groups.rb +20 -0
  191. data/db/migrate/00000000007250_create_raster_groups_tags.rb +19 -0
  192. data/db/migrate/00000000007300_create_raster_variables.rb +28 -0
  193. data/db/migrate/00000000007325_create_raster_variable_group_memberships.rb +12 -0
  194. data/db/migrate/00000000007350_raster_variable_topics.rb +22 -0
  195. data/db/migrate/00000000007400_create_rasters.rb +22 -0
  196. data/db/migrate/00000000007500_create_raster_operations.rb +11 -0
  197. data/db/migrate/00000000010000_create_status_definitions.rb +8 -0
  198. data/db/migrate/00000000010050_create_extract_types.rb +10 -0
  199. data/db/migrate/00000000010100_create_build_statuses.rb +10 -0
  200. data/db/migrate/00000000010200_create_extract_requests.rb +14 -0
  201. data/db/migrate/00000000010300_create_extract_requests_labels_join_table.rb +20 -0
  202. data/db/migrate/00000000010400_create_extract_statuses.rb +13 -0
  203. data/db/migrate/00000000010500_create_request_geog_units.rb +13 -0
  204. data/db/migrate/00000000010600_create_request_terrapop_samples.rb +15 -0
  205. data/db/migrate/00000000011000_create_request_variable.rb +16 -0
  206. data/db/migrate/00000000011100_create_request_area_data_variables.rb +18 -0
  207. data/db/migrate/00000000011200_create_request_raster_variables.rb +20 -0
  208. data/db/migrate/00000000012000_create_raster_summary_functions.rb +130 -0
  209. data/db/migrate/00000000013000_create_terrapop_settings.rb +24 -0
  210. data/db/migrate/20121218190647_create_attached_variable_pointer.rb +18 -0
  211. data/db/migrate/20121218191609_add_attached_variable_pointer_id.rb +9 -0
  212. data/db/migrate/20121218205322_add_wants_attached.rb +9 -0
  213. data/db/migrate/20121219145142_add_attributes_to_terrapop_sample.rb +68 -0
  214. data/db/migrate/20130125155216_add_default_order_index_to_variables.rb +5 -0
  215. data/db/migrate/20130129204515_create_request_samples.rb +14 -0
  216. data/db/migrate/20130129204718_create_request_raster_datasets.rb +13 -0
  217. data/db/migrate/20130205195304_create_error_events.rb +10 -0
  218. data/db/migrate/20130206202006_add_country_index_for_continent.rb +8 -0
  219. data/db/migrate/20130207202628_create_raster_metadata.rb +13 -0
  220. data/db/migrate/20130208192415_add_extents_to_raster_dataset.rb +6 -0
  221. data/db/migrate/20130209182800_create_global_regions.rb +11 -0
  222. data/db/migrate/20130209182858_add_global_region_id_country.rb +13 -0
  223. data/db/migrate/20130211183221_add_type_to_global_regions.rb +5 -0
  224. data/db/migrate/20130212190940_create_global_region_types.rb +8 -0
  225. data/db/migrate/20130212192357_remove_classification_add_global_region_type_id_to_global_region.rb +13 -0
  226. data/db/migrate/20130304181054_add_code_to_boundaries.rb +5 -0
  227. data/db/migrate/20130305223407_add_ipumsi_user_flagto_users.rb +15 -0
  228. data/db/migrate/20130305224906_add_ipumsi_user_date_flagto_users.rb +11 -0
  229. data/db/migrate/20130308214537_create_request_sample_geog_levels.rb +14 -0
  230. data/db/migrate/20130312191726_create_raster_statistics.rb +23 -0
  231. data/db/migrate/20130312192100_create_raster_categories.rb +14 -0
  232. data/db/migrate/20130312192158_create_raster_category_statistics.rb +22 -0
  233. data/db/migrate/20130312203045_create_area_data_statistics.rb +15 -0
  234. data/db/migrate/20130401161222_add_summary_to_raster_variable.rb +11 -0
  235. data/db/migrate/20130402203508_add_global_region_sort_order_column.rb +8 -0
  236. data/db/migrate/20130402211553_add_weighted_to_terrapop_samples.rb +5 -0
  237. data/db/migrate/20130408022218_add_period_to_raster_datasets.rb +5 -0
  238. data/db/migrate/20130409161950_create_area_data_variable_constructions.rb +17 -0
  239. data/db/migrate/20130409162731_add_opcode_to_raster_operations.rb +5 -0
  240. data/db/migrate/20130412141109_update_raster_summary_functions.rb +39 -0
  241. data/db/migrate/20130415174823_create_insert_html_fragments.rb +13 -0
  242. data/db/migrate/20130415185523_create_common_variables.rb +13 -0
  243. data/db/migrate/20130416144840_add_columns_to_request_samples.rb +6 -0
  244. data/db/migrate/20130416150151_add_revision_of_column_to_extract_request.rb +8 -0
  245. data/db/migrate/20130416151200_add_file_type_to_extract_request.rb +5 -0
  246. data/db/migrate/20130416161440_add_column_general_detailed_selection_to_request_variables.rb +5 -0
  247. data/db/migrate/20130416170551_add_wants_case_selection_to_request_variable.rb +5 -0
  248. data/db/migrate/20130613185642_add_indexes_to_tables.rb +7 -0
  249. data/db/migrate/20130614193857_add_more_column_indexes.rb +11 -0
  250. data/db/migrate/20130618141508_create_raster_dataset_raster_data_types.rb +17 -0
  251. data/db/migrate/20130618185528_add_circa_to_raster_dataset.rb +5 -0
  252. data/db/migrate/20130619160555_create_raster_dataset_units.rb +9 -0
  253. data/db/migrate/20130619161934_create_raster_dataset_raster_dataset_units.rb +17 -0
  254. data/db/migrate/20130621184015_add_raster_dataset_process_summary.rb +8 -0
  255. data/db/migrate/20130621203809_add_source_information_column_to_raster_dataset.rb +5 -0
  256. data/db/migrate/20130624144333_add_temporal_extent_description_to_raster_dataset.rb +5 -0
  257. data/db/migrate/20130624154952_add_provider_to_raster_dataset.rb +5 -0
  258. data/db/migrate/20130624175342_add_use_constraints_column_to_raster_dataset.rb +5 -0
  259. data/db/migrate/20130624175632_drop_use_constraints_column_from_raster_dataset.rb +8 -0
  260. data/db/migrate/20130624192654_add_north_south_east_west_columns_to_raster_dataset.rb +8 -0
  261. data/db/migrate/20130625193303_add_sort_operation_identifier_to_raster_group.rb +5 -0
  262. data/db/migrate/20130702190659_add_raster_group_id_to_raster_variable.rb +9 -0
  263. data/db/migrate/20130708184410_create_country_comparabilities.rb +14 -0
  264. data/db/migrate/20130711191704_add_ipumsi_user_id_to_user.rb +8 -0
  265. data/db/migrate/20130712150252_add_data_settings_column_to_user.rb +8 -0
  266. data/db/migrate/20130719183620_add_visible_and_map_to_columns_to_raster_operations.rb +13 -0
  267. data/db/migrate/20130812194537_create_extract_request_submissions.rb +12 -0
  268. data/db/migrate/20130813165221_remove_ipums_user_id_from_user.rb +8 -0
  269. data/db/migrate/20130814161802_add_uuid_field_to_extract_request.rb +6 -0
  270. data/db/migrate/20130816204002_add_country_id_to_terrapop_sample.rb +8 -0
  271. data/db/migrate/20130816204214_add_year_to_terrapop_sample.rb +8 -0
  272. data/db/migrate/20130816205324_add_indexes_to_country.rb +9 -0
  273. data/db/migrate/20130819145802_add_foreign_key_to_terrapop_sample.rb +5 -0
  274. data/db/migrate/20130819155712_add_indexes_to_sample_level_area_data_variable.rb +5 -0
  275. data/db/migrate/20130819163013_add_short_country_name_to_terrapop_sample.rb +8 -0
  276. data/db/migrate/20130820195420_add_is_erf_to_country.rb +7 -0
  277. data/db/migrate/20130821221743_fix_raster_summary_function_num_classes.rb +39 -0
  278. data/db/migrate/20130830192340_add_more_user_registration_columns.rb +51 -0
  279. data/db/migrate/20130904205306_add_raster_variable_sort_order_weight.rb +8 -0
  280. data/db/migrate/20130912145522_add_localized_label_to_country_levels.rb +5 -0
  281. data/db/migrate/20130913194351_create_terrapop_raster_summary_caches.rb +27 -0
  282. data/db/migrate/20130916212710_add_year_range_to_map.rb +11 -0
  283. data/db/migrate/20130917154553_create_sample_designs.rb +14 -0
  284. data/db/migrate/20130924210303_add_raster_only_to_extract_request.rb +5 -0
  285. data/db/migrate/20131001220437_add_mnemonic_and_codebook_description_to_area_data_value.rb +11 -0
  286. data/db/migrate/20131002213443_add_ipums_email_sent_at_column.rb +8 -0
  287. data/db/migrate/20131020154130_remove_index_if_exists.rb +9 -0
  288. data/db/migrate/20131020170642_remove_ui_snippet_table_if_exists.rb +8 -0
  289. data/db/migrate/20131021204227_create_ui_text_snippet.rb +11 -0
  290. data/db/migrate/20131022190227_rename_table_fix_ui_text_snippets.rb +9 -0
  291. data/db/migrate/20131119154817_add_unique_index_on_uuid_on.rb +9 -0
  292. data/db/migrate/20131202161911_add_send_toi_rods_flag_to_extract_request.rb +13 -0
  293. data/db/migrate/20140122150020_add_geographic_levelto_geog_instance.rb +11 -0
  294. data/db/migrate/20140124184809_add_zip_file_location.rb +8 -0
  295. data/db/migrate/20140205205539_add_api_related_fields_to_user.rb +5 -0
  296. data/db/migrate/20140206213258_create_extract_request_error_events.rb +14 -0
  297. data/db/migrate/20140206222630_add_requesting_url_to_extract_request.rb +5 -0
  298. data/db/migrate/20140207153005_create_api_logs.rb +14 -0
  299. data/db/migrate/20140228182300_change_user_institutional_affiliation_to_bool.rb +50 -0
  300. data/db/migrate/20140312143201_add_start_and_end_time_and_total_time_to_extract_request.rb +7 -0
  301. data/db/migrate/20140318212913_remove_add_index_to_area_data_value.rb +12 -0
  302. data/db/migrate/20140319155819_add_long_mnemonic_to_area_data_value.rb +7 -0
  303. data/db/migrate/20140319200718_drop_mnemonic_column_area_data_value.rb +10 -0
  304. data/db/migrate/20140320184210_add_show_in_ui_column_in_raster_variable.rb +8 -0
  305. data/db/migrate/20140328150435_rename_revision_of_column_to_rabl_usable_column_name.rb +8 -0
  306. data/db/migrate/20140331142153_add_revision_of_column.rb +8 -0
  307. data/db/migrate/20140402181324_add_new_raster_summary_functions.rb +191 -0
  308. data/db/migrate/20140403185242_add_raster_variable_area_reference_id.rb +12 -0
  309. data/db/migrate/20140410145305_add_raster_area_column_to_terrapop_raster_summary_cache.rb +6 -0
  310. data/db/migrate/20140414170802_add_new_raster_summarization.rb +85 -0
  311. data/db/migrate/20140421150330_add_second_reference_column_to_raster_variable.rb +9 -0
  312. data/db/migrate/20140506165634_add_deactivated_at_and_deleted_at_to_user.rb +6 -0
  313. data/db/migrate/20140507142843_add_column_to_frequencies.rb +5 -0
  314. data/db/migrate/20140513143055_add_sample_geog_level_id_to_request_models.rb +11 -0
  315. data/db/migrate/20140521160554_create_links.rb +9 -0
  316. data/db/migrate/20140522214508_add_ipumsi_salt_and_ipumsi_crypted_password_to_user.rb +13 -0
  317. data/db/migrate/20140604192953_add_name_to_terrapop_setting.rb +47 -0
  318. data/db/migrate/20140609163907_create_variable_availability_caches.rb +9 -0
  319. data/db/migrate/20140609210447_add_foreign_index_to_variable_availability_cache.rb +8 -0
  320. data/db/migrate/20140609213300_create_area_data_variable_availability_caches.rb +13 -0
  321. data/db/migrate/20140610135849_create_nhgis_metadata_stores.rb +30 -0
  322. data/db/migrate/20140610211138_add_dataset_id_to_nhgis_metadata.rb +5 -0
  323. data/db/migrate/20140611181543_add_replicate_weight_variable_id_to_variables.rb +5 -0
  324. data/db/migrate/20140618200741_add_key_column_toraster_variable_group_memberships.rb +7 -0
  325. data/db/migrate/20140618202053_add_key_column_toraster_variable_group_memberships2.rb +8 -0
  326. data/db/migrate/20140701134952_create_system_statistics.rb +12 -0
  327. data/db/migrate/20140804161242_add_fields_to_terrapop_sample.rb +7 -0
  328. data/db/migrate/20140806173750_add_geometry_column_to_boundaries.rb +5 -0
  329. data/db/migrate/20140821205836_add_git_hash_field_to_extract_request.rb +5 -0
  330. data/db/migrate/20140822140106_create_map_units.rb +9 -0
  331. data/db/migrate/20140822140358_create_map_unit_raster_datasets.rb +17 -0
  332. data/db/migrate/20140822143517_redefine_short_unit_on_map_unit_to_longer_string.rb +5 -0
  333. data/db/migrate/20140825135403_add_finger_print_hash_to_maps.rb +5 -0
  334. data/db/migrate/20140826163359_add_source_field_to_terrapop_sample.rb +8 -0
  335. data/db/migrate/20140827153014_add_microdata_file_size_to_sample.rb +5 -0
  336. data/db/migrate/20140828161647_add_raster_band_index_to_raster_categories.rb +5 -0
  337. data/db/migrate/20140828162650_add_post_gis_raster_output_indicator_to_raster_variable.rb +5 -0
  338. data/db/migrate/20140829150251_create_raster_dataset_raster_variables.rb +17 -0
  339. data/db/migrate/20140902194529_add_raster_band_to_raster_dataset_model.rb +7 -0
  340. data/db/migrate/20140903202609_create_heartbeats.rb +9 -0
  341. data/db/migrate/20140903204113_create_heartbeat_pulse.rb +10 -0
  342. data/db/migrate/20140904164247_create_raster_raster_variables.rb +16 -0
  343. data/db/migrate/20140908193007_add_area_level_rasterization_functions.rb +103 -0
  344. data/db/migrate/20140908194021_create_area_data_rasters.rb +39 -0
  345. data/db/migrate/20140909143933_rename_valid_column_on_area_data_raster.rb +5 -0
  346. data/db/migrate/20140911201639_add_columns_to_area_data_raster.rb +11 -0
  347. data/db/migrate/20140911211923_alter_area_data_raster_indexes.rb +12 -0
  348. data/db/migrate/20140919144305_create_raster_variable_classifications.rb +29 -0
  349. data/db/migrate/20140925140810_add_other_raster_variables_to_raster_variable_classification.rb +9 -0
  350. data/db/migrate/20140925172245_add_grouping_indicator_to_raster_classifications.rb +5 -0
  351. data/db/migrate/20140925175157_add_classification_indicator_to_raster_variable.rb +5 -0
  352. data/db/migrate/20140930142006_remove_boundary_id_from_geog_instance.rb +6 -0
  353. data/db/migrate/20141003164150_add_terrapop_sample_id_to_map_and_geog_instance.rb +11 -0
  354. data/db/migrate/20141029202813_add_nhgis_dat_file_to_sample_geog_level.rb +5 -0
  355. data/db/migrate/20141029204521_add_columns_to_sample_level_area_data_variable.rb +6 -0
  356. data/db/migrate/20141104212652_create_categorical_raster_summarization.rb +39 -0
  357. data/db/migrate/20141105202744_add_margin_file_to_sample_geog_level.rb +5 -0
  358. data/db/migrate/20141105205347_add_margin_field_to_area_data_value.rb +5 -0
  359. data/db/migrate/20141105205607_add_join_fields_to_sample_geog_level.rb +8 -0
  360. data/db/migrate/20141202180411_add_new_categorical_summarization_function.rb +62 -0
  361. data/db/migrate/20141212172044_add_continuous_raster_summarization0.rb +51 -0
  362. data/db/migrate/20141212195611_add_indexes_to_boundaries.rb +10 -0
  363. data/db/migrate/20141212202521_add_indexes_to_frequencies.rb +7 -0
  364. data/db/migrate/20141229150743_add_special_value_to_area_data_value.rb +5 -0
  365. data/db/migrate/20141230153550_add_field_to_global_regions.rb +8 -0
  366. data/db/migrate/20150107142518_add_restriction_indicated_to_sample.rb +5 -0
  367. data/db/migrate/20150114161817_add_raster_to_tiff_function.rb +35 -0
  368. data/db/migrate/20150115204303_add_hide_nhgis_datasets_to_users.rb +11 -0
  369. data/db/migrate/20150126192918_add_new_gli_post_gis_functions.rb +99 -0
  370. data/db/migrate/20150126223419_add_short_label_to_terrapop_samples.rb +11 -0
  371. data/db/migrate/20150127172953_add_another_raster_summarization_function.rb +44 -0
  372. data/db/migrate/20150130163215_new_glc_summarization_function.rb +40 -0
  373. data/db/migrate/20150211221354_create_cache_items.rb +23 -0
  374. data/db/migrate/20150212223011_add_microdata_access_expired_date_to_users.rb +11 -0
  375. data/db/migrate/20150217221940_add_new_band_aware_categorical_to_binary_summarization.rb +177 -0
  376. data/db/migrate/20150302145459_removeuse_postgis_procedure_for_geotiff.rb +5 -0
  377. data/db/migrate/20150313194752_add_color_map_to_tiff_output.rb +34 -0
  378. data/db/migrate/20150313202158_add_color_map_to_jpeg_output.rb +34 -0
  379. data/db/migrate/20150318183314_add_non_color_map_cookie_cutter_functions.rb +65 -0
  380. data/db/migrate/20150324160629_add_categorical_multi_band_summarization.rb +62 -0
  381. data/db/migrate/20150324161827_add_index_to_rasters_raster_variable_id.rb +5 -0
  382. data/db/migrate/20150327203257_add_band_to_terrapop_raster_summary_cache.rb +5 -0
  383. data/db/migrate/20150331142232_add_xml_field_to_map.rb +5 -0
  384. data/db/migrate/20150331153703_add_new_continous_summarization.rb +38 -0
  385. data/db/migrate/20150409153145_categorical_to_binary_as_raster.rb +49 -0
  386. data/db/migrate/20150413204130_generic_categorical_to_binary_raster_output_function.rb +92 -0
  387. data/db/migrate/20150416133743_ratio_area_level_data_to_raster_function.rb +55 -0
  388. data/db/migrate/20150416143838_projection_function_for_single_band_rasters.rb +27 -0
  389. data/db/migrate/20150419203614_add_raster_dataset_to_terrapop_raster_summary_cache.rb +12 -0
  390. data/db/migrate/20150419232521_add_raster_dataset_to_request_raster_variable.rb +9 -0
  391. data/db/migrate/20150427163939_create_single_binary_from_categorical_to_tiff_function.rb +51 -0
  392. data/db/migrate/20150518200435_add_new_binary_cookie_cutter_functions.rb +95 -0
  393. data/db/migrate/20150520195145_revised_glc_binary_summarization_function.rb +64 -0
  394. data/db/migrate/20150526205918_new_categorical_to_binary_summarization.rb +72 -0
  395. data/db/migrate/20150527144243_even_newer_glc_binary_function.rb +79 -0
  396. data/db/migrate/20150527191853_add_even_newer_glc_category_to_binary_function.rb +74 -0
  397. data/db/migrate/20150528141915_yancat_to_bin_summarization_function.rb +66 -0
  398. data/db/migrate/20150529182542_add_indexes_to_geog_instances.rb +9 -0
  399. data/db/migrate/20150601160855_drop_area_data_variable_availability_caches.rb +5 -0
  400. data/db/migrate/20150625150152_add_geog_instance_f_key_on_boundaries.rb +5 -0
  401. data/db/migrate/20150626144305_geog_instance_geog_code_wider.rb +6 -0
  402. data/db/migrate/20150709161201_glc_summarization_version5.rb +79 -0
  403. data/db/migrate/20150713165442_glc_summarization_version6.rb +82 -0
  404. data/db/migrate/20150713185652_tp_jpeg_raster_clip_color_map_v2.rb +34 -0
  405. data/db/migrate/20150716182438_new_rasters_table.rb +18 -0
  406. data/db/migrate/20150716184828_new_stored_procedures_for_new_rasters.rb +70 -0
  407. data/db/migrate/20150721161943_remove_ownership_statement_from_function.rb +69 -0
  408. data/db/migrate/20150727134942_rename_rasters_new_to_new_rasters.rb +19 -0
  409. data/db/migrate/20150727135614_update_table_name_in_make_jpeg2.rb +70 -0
  410. data/db/migrate/20150727143159_jpeg_clip_experiment.rb +36 -0
  411. data/db/migrate/20150727145556_create_new_tiff_raster_clip_with_buffer.rb +34 -0
  412. data/db/migrate/20150727161508_update_table_name_in_make_jpeg2_part_deux.rb +77 -0
  413. data/db/migrate/20150727193403_drop_rasters_new.rb +5 -0
  414. data/db/migrate/20150728184718_make_jpeg2_part_deux.rb +70 -0
  415. data/db/migrate/20150728214344_correct_new_rasters_table_in_new_make_jpeg2_function.rb +79 -0
  416. data/db/migrate/20150729144526_even_more_correct_new_rasters_table_in_new_make_jpeg2_function.rb +78 -0
  417. data/db/migrate/20150729160936_fixingterrapop_reclassify_categorical_raster_to_binary_summariz_v3.rb +68 -0
  418. data/db/migrate/20150730141036_adjust_jpeg_clip_for_categorical.rb +67 -0
  419. data/db/migrate/20150730153216_ststandardize_terrapop_reclassify_categorical_raster_to_binary_summariz_v3.rb +69 -0
  420. data/db/migrate/20150730163446_add_origin_to_extract_requests.rb +5 -0
  421. data/db/migrate/20150731151304_consistent_return_fieldsterrapop_gli_yield_areal_summarization.rb +99 -0
  422. data/db/migrate/20150731192327_add_boundary_only_field_to_terrapop_sample.rb +5 -0
  423. data/db/migrate/20150803213048_add_function_to_detect_boundaries_that_wrap_globe.rb +50 -0
  424. data/db/migrate/20150814154127_add_processing_flag_to_extract_request.rb +5 -0
  425. data/db/migrate/20150814165605_add_colormapped_categorical_to_binary_jpeg_cookie_cutteringizing_function.rb +49 -0
  426. data/db/migrate/20150814183708_around_the_world_wrap_a_raster_function.rb +157 -0
  427. data/db/migrate/20150910194333_add_extract_grouping_field_to_extract_request.rb +5 -0
  428. data/db/migrate/20150915194808_drop_sessions_table.rb +5 -0
  429. data/db/migrate/20150915215426_add_sessions_table.rb +12 -0
  430. data/db/migrate/20151009203606_create_sample_detail_groups.rb +8 -0
  431. data/db/migrate/20151009203855_create_sample_detail_fields.rb +13 -0
  432. data/db/migrate/20151009204052_create_sample_detail_values.rb +12 -0
  433. data/db/migrate/20151016152953_add_indexes_to_area_data_values.rb +7 -0
  434. data/db/migrate/20151023160555_add_data_to_extract_requests.rb +8 -0
  435. data/db/migrate/20151026155953_rename_description_add_title_to_extract_requests.rb +8 -0
  436. data/db/migrate/20151029144017_create_raster_dataset_groups.rb +9 -0
  437. data/db/migrate/20151029144147_add_raster_dataset_group_to_raster_dataset.rb +9 -0
  438. data/db/migrate/20151029182802_add_mnemonic_to_raster_dataset_group.rb +5 -0
  439. data/db/migrate/20151029184642_change_field_type_on_raster_dataset_group.rb +5 -0
  440. data/db/migrate/20151029210539_remove_unnecessary_fields_from_terrapop_sample.rb +60 -0
  441. data/db/migrate/20151102205254_create_data_artifacts.rb +17 -0
  442. data/db/migrate/20151102211601_add_json_field_to_extract_data_artifacts.rb +8 -0
  443. data/db/migrate/20151103152754_add_file_name_field_to_extract_request.rb +5 -0
  444. data/db/migrate/20151106155249_add_submitted_at_to_extract_request.rb +5 -0
  445. data/db/migrate/20151110204826_add_terra_pop_build_number_to_extract_request.rb +12 -0
  446. data/db/migrate/20151119213428_create_area_data_raster_variable_mnemonic_lookups.rb +18 -0
  447. data/db/migrate/20151120140757_create_extract_request_area_data_raster_variable_mnemonic_lookups.rb +16 -0
  448. data/db/migrate/20151130212011_add_new_raster_summarization_v7.rb +90 -0
  449. data/lib/tasks/terrapop_models_tasks.rake +4 -0
  450. data/lib/terrapop_models.rb +4 -0
  451. data/lib/terrapop_models/engine.rb +13 -0
  452. data/lib/terrapop_models/version.rb +3 -0
  453. data/test/dummy/README.rdoc +28 -0
  454. data/test/dummy/Rakefile +6 -0
  455. data/test/dummy/app/assets/javascripts/application.js +13 -0
  456. data/test/dummy/app/assets/stylesheets/application.css +15 -0
  457. data/test/dummy/app/controllers/application_controller.rb +5 -0
  458. data/test/dummy/app/helpers/application_helper.rb +2 -0
  459. data/test/dummy/app/views/layouts/application.html.erb +14 -0
  460. data/test/dummy/bin/bundle +3 -0
  461. data/test/dummy/bin/rails +4 -0
  462. data/test/dummy/bin/rake +4 -0
  463. data/test/dummy/config.ru +4 -0
  464. data/test/dummy/config/application.rb +23 -0
  465. data/test/dummy/config/boot.rb +5 -0
  466. data/test/dummy/config/database.yml +68 -0
  467. data/test/dummy/config/environment.rb +5 -0
  468. data/test/dummy/config/environments/development.rb +37 -0
  469. data/test/dummy/config/environments/production.rb +78 -0
  470. data/test/dummy/config/environments/test.rb +39 -0
  471. data/test/dummy/config/initializers/assets.rb +8 -0
  472. data/test/dummy/config/initializers/backtrace_silencers.rb +7 -0
  473. data/test/dummy/config/initializers/cookies_serializer.rb +3 -0
  474. data/test/dummy/config/initializers/filter_parameter_logging.rb +4 -0
  475. data/test/dummy/config/initializers/inflections.rb +16 -0
  476. data/test/dummy/config/initializers/mime_types.rb +4 -0
  477. data/test/dummy/config/initializers/session_store.rb +3 -0
  478. data/test/dummy/config/initializers/wrap_parameters.rb +14 -0
  479. data/test/dummy/config/locales/en.yml +23 -0
  480. data/test/dummy/config/routes.rb +4 -0
  481. data/test/dummy/config/secrets.yml +22 -0
  482. data/test/dummy/log/development.log +62 -0
  483. data/test/dummy/public/404.html +67 -0
  484. data/test/dummy/public/422.html +67 -0
  485. data/test/dummy/public/500.html +66 -0
  486. data/test/dummy/public/favicon.ico +0 -0
  487. data/test/integration/navigation_test.rb +10 -0
  488. data/test/terrapop_models_test.rb +7 -0
  489. data/test/test_helper.rb +19 -0
  490. metadata +597 -0
@@ -0,0 +1,51 @@
1
+ class AddContinuousRasterSummarization0 < ActiveRecord::Migration
2
+ def change
3
+
4
+ sql = <<-SQL
5
+ CREATE OR REPLACE Function terrapop_continuous_summarization0(sample_geog_lvl_id bigint, rasters_id bigint)
6
+ RETURNS TABLE (geog_instance_id bigint, geog_instance_label character varying, min double precision,
7
+ max double precision, mean double precision, count bigint,stddev double precision, total_area double precision)
8
+ AS
9
+ $BODY$
10
+ BEGIN
11
+ RETURN QUERY
12
+ WITH
13
+ contin_rast as
14
+ (
15
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
16
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)))) as rast
17
+ FROM sample_geog_levels sgl
18
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
19
+ inner join boundaries bound on bound.geog_instance_id = gi.id
20
+ inner join rasters r on ST_Intersects(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)))
21
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
22
+ group by sgl.id, gi.id, gi.label, gi.code
23
+ ), area_ref_rast as
24
+ (
25
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
26
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)) )) as rast
27
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
28
+ inner join boundaries bound on bound.geog_instance_id = gi.id
29
+ inner join rasters r on ST_Intersects(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)) )
30
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = ( select rv.area_reference_id from raster_variables rv where rv.id = rasters_id limit 1 )
31
+ group by sgl.id, gi.id, gi.label, gi.code
32
+ )
33
+ SELECT cont_stat.geog_instance_id, cont_stat.geog_instance_label, (cont_stat.stat).min as min, (cont_stat.stat).max as max,
34
+ (cont_stat.stat).mean as mean, (cont_stat.stat).count as count, (cont_stat.stat).stddev as stddev, area_val.area as raster_area
35
+ FROM (
36
+ select contin_rast.geog_instance_id, contin_rast.geog_instance_label, ST_SummaryStats(contin_rast.rast) as stat
37
+ from contin_rast
38
+ ) cont_stat inner join
39
+ (
40
+ select area_ref_rast.geog_instance_id, area_ref_rast.geog_instance_label, (ST_Summarystats(area_ref_rast.rast,1)).sum as area
41
+ from area_ref_rast
42
+ ) area_val on (cont_stat.geog_instance_id = area_val.geog_instance_id);
43
+ END;
44
+ $BODY$
45
+ LANGUAGE 'plpgsql';
46
+ SQL
47
+
48
+ execute sql
49
+
50
+ end
51
+ end
@@ -0,0 +1,10 @@
1
+ class AddIndexesToBoundaries < ActiveRecord::Migration
2
+ def change
3
+
4
+ execute("DROP INDEX IF EXISTS boundaries_geog_gist_idx")
5
+ execute("DROP INDEX IF EXISTS boundaries_geom_gist_idx")
6
+ execute("CREATE INDEX boundaries_geog_gist_idx ON boundaries USING gist(geog)")
7
+ execute("CREATE INDEX boundaries_geom_gist_idx ON boundaries USING gist(geom)")
8
+
9
+ end
10
+ end
@@ -0,0 +1,7 @@
1
+ class AddIndexesToFrequencies < ActiveRecord::Migration
2
+ def change
3
+ add_index :frequencies, :variable_id
4
+ add_index :frequencies, :sample_id
5
+ add_index :frequencies, :category_id
6
+ end
7
+ end
@@ -0,0 +1,5 @@
1
+ class AddSpecialValueToAreaDataValue < ActiveRecord::Migration
2
+ def change
3
+ add_column :area_data_values, :special_value, :decimal, :precision => 64, :scale => 10
4
+ end
5
+ end
@@ -0,0 +1,8 @@
1
+ class AddFieldToGlobalRegions < ActiveRecord::Migration
2
+ def change
3
+
4
+ add_column :global_regions, :short_code, :string, limit: 3
5
+ add_index :global_regions, :short_code
6
+
7
+ end
8
+ end
@@ -0,0 +1,5 @@
1
+ class AddRestrictionIndicatedToSample < ActiveRecord::Migration
2
+ def change
3
+ add_column :samples, :restricted, :boolean, default: true
4
+ end
5
+ end
@@ -0,0 +1,35 @@
1
+ class AddRasterToTiffFunction < ActiveRecord::Migration
2
+ def change
3
+ sql = <<-SQL
4
+ CREATE OR REPLACE Function terrapop_raster_clip(sample_geog_lvl_id bigint, rasters_id bigint, raster_bnd integer)
5
+ RETURNS TABLE (tiff bytea) AS
6
+ $BODY$
7
+
8
+ BEGIN
9
+ RETURN QUERY
10
+
11
+ WITH poly_table AS
12
+ (
13
+ SELECT ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)) as geom
14
+ FROM sample_geog_levels sgl
15
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
16
+ inner join boundaries bound on bound.geog_instance_id = gi.id
17
+ where gi.sample_geog_level_id = sample_geog_lvl_id
18
+ ),
19
+ new_rast AS
20
+ (
21
+ SELECT ST_Union(ST_Clip(r.rast, raster_bnd, p.geom, TRUE)) as rast
22
+ FROM poly_table p inner join rasters r on ST_Intersects(r.rast,p.geom)
23
+ where r.raster_variable_id = rasters_id
24
+ )
25
+ select ST_AsTiff(ST_Union(r.rast),'LZW', (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = rasters_id LIMIT 1)) as tiff from new_rast r;
26
+
27
+ END;
28
+ $BODY$
29
+ LANGUAGE 'plpgsql';
30
+ SQL
31
+
32
+ execute sql
33
+
34
+ end
35
+ end
@@ -0,0 +1,11 @@
1
+ class AddHideNhgisDatasetsToUsers < ActiveRecord::Migration
2
+
3
+ def up
4
+ add_column :users, :hide_nhgis_datasets, :boolean, default: true
5
+ end
6
+
7
+ def down
8
+ remove_column :users, :hide_nhgis_datasets
9
+ end
10
+
11
+ end
@@ -0,0 +1,99 @@
1
+ class AddNewGliPostGisFunctions < ActiveRecord::Migration
2
+ def change
3
+
4
+ sql1 =<<-SQL
5
+ CREATE OR REPLACE Function Terrapop_GLI_Yield_Areal_Summarization(sample_geog_lvl_id bigint, rasters_id bigint)
6
+ RETURNS TABLE (geog_instance bigint, geog_instance_label character varying, min double precision, max double precision, mean double precision, count bigint)
7
+ AS
8
+ $BODY$
9
+ BEGIN
10
+ RETURN QUERY
11
+ WITH bin_rast as
12
+ (
13
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
14
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
15
+ FROM sample_geog_levels sgl
16
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
17
+ inner join boundaries bound on bound.geog_instance_id = gi.id
18
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
19
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
20
+ group by sgl.id, gi.id, gi.label, gi.code
21
+ ), area_ref_rast as
22
+ (
23
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
24
+ gi.code as geog_instance_code,ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
25
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
26
+ inner join boundaries bound on bound.geog_instance_id = gi.id
27
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
28
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = ( select rv.area_reference_id from raster_variables rv where rv.id = rasters_id limit 1 )
29
+ group by sgl.id, gi.id, gi.label, gi.code
30
+ )
31
+ SELECT bin_rast.geog_instance_id, bin_rast.geog_instance_label,
32
+ sum((ST_SummaryStats(bin_rast.rast,1)).min) as min,
33
+ sum((ST_SummaryStats(bin_rast.rast,1)).max) as max,
34
+ sum((ST_SummaryStats(bin_rast.rast,1)).mean) as mean,
35
+ sum((ST_SummaryStats(bin_rast.rast,1)).count)::bigint as yield_cell_count
36
+ FROM bin_rast inner join area_ref_rast on ST_intersects(bin_rast.rast, area_ref_rast.rast)
37
+ GROUP BY bin_rast.geog_instance_id, bin_rast.geog_instance_label;
38
+ END;
39
+ $BODY$
40
+ LANGUAGE 'plpgsql';
41
+ SQL
42
+
43
+ sql2 = <<-SQL
44
+ CREATE OR REPLACE Function Terrapop_GLI_Harvest_Areal_Summarization(sample_geog_lvl_id bigint, rasters_id bigint)
45
+ RETURNS TABLE (geog_instance bigint, geog_instance_label character varying, percent_area double precision, harvest_area double precision)
46
+ AS
47
+ $BODY$
48
+ BEGIN
49
+ RETURN QUERY
50
+ WITH bin_rast as
51
+ (
52
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
53
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
54
+ FROM sample_geog_levels sgl
55
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
56
+ inner join boundaries bound on bound.geog_instance_id = gi.id
57
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
58
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
59
+ group by sgl.id, gi.id, gi.label, gi.code
60
+ ), zero_rast as
61
+ (
62
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
63
+ gi.code as geog_instance_code,
64
+ ST_Union(ST_Clip(ST_SetBandNoDataValue(r.rast,0), bound.geog::geometry)) as rast
65
+ FROM sample_geog_levels sgl
66
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
67
+ inner join boundaries bound on bound.geog_instance_id = gi.id
68
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
69
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
70
+ group by sgl.id, gi.id, gi.label, gi.code
71
+ ), area_ref_rast as
72
+ (
73
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
74
+ gi.code as geog_instance_code,ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast , sum((ST_SummaryStats(r.rast)).sum) as total_area
75
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
76
+ inner join boundaries bound on bound.geog_instance_id = gi.id
77
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
78
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = ( select rv.area_reference_id from raster_variables rv where rv.id = rasters_id limit 1 )
79
+ group by sgl.id, gi.id, gi.label, gi.code
80
+ ), final_rast as
81
+ (
82
+ SELECT bin_rast.geog_instance_id, bin_rast.geog_instance_label,
83
+ sum((ST_SummaryStats(ST_Intersection(ST_Intersection(bin_rast.rast,zero_rast.rast),area_ref_rast.rast,'band2'),1)).sum) as harvest_area
84
+ FROM zero_rast inner join bin_rast on bin_rast.geog_instance_id = zero_rast.geog_instance_id
85
+ inner join area_ref_rast on bin_rast.geog_instance_id = area_ref_rast.geog_instance_id
86
+ GROUP BY bin_rast.geog_instance_id, bin_rast.geog_instance_label
87
+ )
88
+ select f.geog_instance_id, f.geog_instance_label, (f.harvest_area/a.total_area) as percent_area, f.harvest_area
89
+ from final_rast f inner join area_ref_rast a on f.geog_instance_id = a.geog_instance_id;
90
+ END;
91
+ $BODY$
92
+ LANGUAGE 'plpgsql';
93
+ SQL
94
+
95
+ execute(sql1)
96
+ execute(sql2)
97
+
98
+ end
99
+ end
@@ -0,0 +1,11 @@
1
+ class AddShortLabelToTerrapopSamples < ActiveRecord::Migration
2
+
3
+ def up
4
+ add_column :terrapop_samples, :short_label, :string, default: ""
5
+ end
6
+
7
+ def down
8
+ remove_column :terrapop_samples, :short_label
9
+ end
10
+
11
+ end
@@ -0,0 +1,44 @@
1
+ class AddAnotherRasterSummarizationFunction < ActiveRecord::Migration
2
+ def change
3
+ sql =<<-SQL
4
+ CREATE OR REPLACE Function Terrapop_GLC_Binary_Summarization(sample_geog_lvl_id bigint, rasters_id bigint)
5
+ RETURNS TABLE (geog_instance_id bigint, geog_instance_label character varying, binary_area double precision, total_area double precision, percent_area double precision)
6
+ AS
7
+ $BODY$
8
+ BEGIN
9
+ RETURN QUERY
10
+ WITH bin_rast as
11
+ (
12
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
13
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
14
+ FROM sample_geog_levels sgl
15
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
16
+ inner join boundaries bound on bound.geog_instance_id = gi.id
17
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
18
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
19
+ group by sgl.id, gi.id, gi.label, gi.code
20
+ ), area_ref_rast as
21
+ (
22
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
23
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
24
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
25
+ inner join boundaries bound on bound.geog_instance_id = gi.id
26
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
27
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = ( select rv.area_reference_id from raster_variables rv where rv.id = rasters_id limit 1)
28
+ group by sgl.id, gi.id, gi.label, gi.code
29
+ )
30
+ SELECT bin_rast.geog_instance_id, bin_rast.geog_instance_label, sum((ST_SummaryStats(ST_Intersection(bin_rast.rast,area_ref_rast.rast,'band2'),1)).sum) as binary_area,
31
+ sum((ST_SummaryStats(area_ref_rast.rast)).sum) as total_area,
32
+ sum((ST_SummaryStats(ST_Intersection(bin_rast.rast,area_ref_rast.rast,'band2'),1)).sum) / sum((ST_SummaryStats(area_ref_rast.rast)).sum) as percent_area
33
+ FROM bin_rast inner join area_ref_rast on ST_intersects(bin_rast.rast, area_ref_rast.rast)
34
+ GROUP BY bin_rast.geog_instance_id, bin_rast.geog_instance_label;
35
+
36
+ END;
37
+ $BODY$
38
+ LANGUAGE 'plpgsql';
39
+ SQL
40
+
41
+ execute(sql)
42
+
43
+ end
44
+ end
@@ -0,0 +1,40 @@
1
+ class NewGlcSummarizationFunction < ActiveRecord::Migration
2
+ def change
3
+ sql =<<-SQL
4
+ CREATE OR REPLACE FUNCTION terrapop_glc_binary_summarization_v2(IN sample_geog_lvl_id bigint, IN rasters_id bigint)
5
+ RETURNS TABLE(geog_instance_id bigint, geog_instance_label character varying, binary_area double precision, total_area double precision, percent_area double precision) AS
6
+ $BODY$
7
+ BEGIN
8
+ RETURN QUERY
9
+ WITH bin_rast as
10
+ (
11
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
12
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
13
+ FROM sample_geog_levels sgl
14
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
15
+ inner join boundaries bound on bound.geog_instance_id = gi.id
16
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
17
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = rasters_id
18
+ group by sgl.id, gi.id, gi.label, gi.code
19
+ ), area_ref_rast as
20
+ (
21
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
22
+ gi.code as geog_instance_code, ST_Union(ST_Clip(r.rast, bound.geog::geometry)) as rast
23
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
24
+ inner join boundaries bound on bound.geog_instance_id = gi.id
25
+ inner join rasters r on ST_Intersects(r.rast,bound.geog::geometry)
26
+ where sgl.id = sample_geog_lvl_id and r.raster_variable_id = ( select rv.area_reference_id from raster_variables rv where rv.id = rasters_id limit 1)
27
+ group by sgl.id, gi.id, gi.label, gi.code
28
+ )
29
+ SELECT b.geog_instance_id, b.geog_instance_label, (ST_SummaryStats(ST_MapAlgebra(b.rast, 1, a.rast, 1, '[rast1]*[rast2]'))).sum as binary_area,
30
+ (ST_SummaryStats(a.rast)).sum as total_area, ( (ST_SummaryStats(ST_MapAlgebra(b.rast, 1, a.rast, 1, '[rast1]*[rast2]'))).sum / (ST_SummaryStats(a.rast)).sum ) as percent_area
31
+ FROM bin_rast b inner join area_ref_rast a on b.geog_instance_id = a.geog_instance_id;
32
+
33
+ END;
34
+ $BODY$
35
+ LANGUAGE plpgsql VOLATILE
36
+ SQL
37
+
38
+ execute(sql)
39
+ end
40
+ end
@@ -0,0 +1,23 @@
1
+ class CreateCacheItems < ActiveRecord::Migration
2
+
3
+ def up
4
+ connection = ActiveSupport::Cache::ActiveRecordStore::CacheItem.connection
5
+ connection.create_table :cache_items do |t|
6
+ t.string :key
7
+ t.text :value
8
+ t.text :meta_info
9
+ t.datetime :expires_at
10
+ t.datetime :created_at
11
+ t.datetime :updated_at
12
+ end
13
+
14
+ connection.add_index :cache_items, :key, :unique => true
15
+ connection.add_index :cache_items, :expires_at
16
+ connection.add_index :cache_items, :updated_at
17
+ end
18
+
19
+ def down
20
+ ActiveSupport::Cache::ActiveRecordStore::CacheItem.connection.drop_table :cache_items
21
+ end
22
+
23
+ end
@@ -0,0 +1,11 @@
1
+ class AddMicrodataAccessExpiredDateToUsers < ActiveRecord::Migration
2
+
3
+ def up
4
+ add_column :users, :microdata_access_expired_date, :datetime, default: nil
5
+ end
6
+
7
+ def down
8
+ remove_column :users, :microdata_access_expired_date
9
+ end
10
+
11
+ end
@@ -0,0 +1,177 @@
1
+ class AddNewBandAwareCategoricalToBinarySummarization < ActiveRecord::Migration
2
+ def change
3
+
4
+ sql0 =<<-SQL
5
+ CREATE OR REPLACE FUNCTION terrapop_reclassify_categorical_raster_to_binary_summarization(IN smpl_geog_lvl_id integer, rast_var_id integer, band_num integer DEFAULT 1)
6
+ RETURNS TABLE("sample_geog_level_id" bigint, "geog_instance_label" character varying, "geog_instance_id" bigint, "reclass_pix" bigint, "area_pix" bigint, "percent_area" float, "reclass_area" float) AS
7
+ $BODY$
8
+ BEGIN
9
+ RETURN QUERY
10
+ WITH lookup AS
11
+ (
12
+ SELECT replace(replace(array_agg(classification::text || ':1')::text, '{', ''), '}', '') as exp
13
+ FROM raster_variables WHERE id IN (
14
+ select raster_variable_classifications.mosaic_raster_variable_id
15
+ from raster_variable_classifications
16
+ where raster_variable_classifications.raster_variable_id = rast_var_id)
17
+ ), categorical_rast AS
18
+ (
19
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label, ST_union(ST_Clip(r.rast, band_num, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = (select rv.second_area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1) LIMIT 1)), TRUE)) as rast
20
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
21
+ inner join boundaries bound on bound.geog_instance_id = gi.id
22
+ inner join rasters r on ST_Intersects(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = (select rv.second_area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1) LIMIT 1)))
23
+ WHERE sgl.id = smpl_geog_lvl_id and r.raster_variable_id = (select rv.second_area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1)
24
+ GROUP by sgl.id, gi.id, gi.label, gi.code
25
+ ), area_rast AS
26
+ (
27
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label, ST_union(ST_Clip(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = (select rv.area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1) LIMIT 1)))) as rast
28
+ FROM sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
29
+ inner join boundaries bound on bound.geog_instance_id = gi.id
30
+ inner join rasters r on ST_Intersects(r.rast, ST_Transform(bound.geog::geometry, (SELECT ST_SRID(r.rast) FROM rasters r WHERE r.raster_variable_id = (select rv.area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1) LIMIT 1)))
31
+ WHERE sgl.id = smpl_geog_lvl_id and r.raster_variable_id = (select rv.area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1)
32
+ GROUP by sgl.id, gi.id, gi.label, gi.code
33
+ ), rast_data AS
34
+ (
35
+ SELECT a.sample_geog_level_id, reclass.geog_instance_label, reclass.geog_instance_id,
36
+ (ST_SummaryStats(ST_Intersection(reclass.rast, a.rast, 'band2', 0))).sum as reclass_area, (ST_SummaryStats(a.rast)).sum as unit_area
37
+ , ST_Count(reclass.rast) as reclass_pix, ST_Count(a.rast) as area_pix
38
+ FROM (
39
+ select r.geog_instance_label, r.geog_instance_id, ST_Reclass(r.rast, 1, l.exp, '8BUI', 0) as rast
40
+ from categorical_rast r, lookup l
41
+ )reclass inner join area_rast a on (reclass.geog_instance_id = a.geog_instance_id)
42
+ )
43
+ SELECT r.sample_geog_level_id, r.geog_instance_label, r.geog_instance_id, r.reclass_pix, r.area_pix, (r.reclass_area/r.unit_area)*100 as percent_area, r.reclass_area as reclass_area
44
+ FROM rast_data r;
45
+
46
+ END;
47
+ $BODY$
48
+ LANGUAGE plpgsql VOLATILE
49
+ COST 100
50
+ ROWS 1000;
51
+ SQL
52
+
53
+ sql1 =<<-SQL
54
+ CREATE OR REPLACE FUNCTION terrapop_reclassify_categorical_raster_to_binary_summarization(IN smpl_geog_lvl_id integer, rast_var_id integer, band_num integer DEFAULT 1)
55
+ RETURNS TABLE("sample_geog_level_id" bigint, "geog_instance_label" character varying, "geog_instance_id" bigint, "reclass_pix" bigint, "area_pix" bigint, "percent_area" float, "reclass_area" float) AS
56
+ $BODY$
57
+ BEGIN
58
+ RETURN QUERY
59
+
60
+ WITH lookup AS
61
+ (
62
+ SELECT replace(replace(array_agg(classification::text || ':1')::text, '{', ''), '}', '') as exp
63
+ FROM raster_variables WHERE id IN (
64
+ select raster_variable_classifications.mosaic_raster_variable_id
65
+ from raster_variable_classifications
66
+ where raster_variable_classifications.raster_variable_id = rast_var_id)
67
+ ), transformation AS
68
+ (
69
+ SELECT ST_SRID(r.rast) as prj_val
70
+ FROM rasters r
71
+ WHERE r.raster_variable_id = (select rv.second_area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1) LIMIT 1
72
+ ), polygon AS
73
+ (
74
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label, ST_Transform(bound.geog::geometry, t.prj_val) as geom
75
+ FROM transformation t, sample_geog_levels sgl inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
76
+ inner join boundaries bound on bound.geog_instance_id = gi.id
77
+ WHERE sgl.id = smpl_geog_lvl_id
78
+ ), categorical_rast AS
79
+ (
80
+ SELECT p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label, ST_union(ST_Clip(r.rast, band_num, p.geom, 0, True)) as rast
81
+ FROM polygon p inner join rasters r on ST_Intersects(r.rast, band_num, p.geom)
82
+ WHERE r.raster_variable_id = (select rv.second_area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1)
83
+ GROUP BY p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label
84
+ ),reclass_rast AS
85
+ (
86
+ select r.sample_geog_level_id, r.geog_instance_id, r.geog_instance_label, ST_Reclass(r.rast, 1, l.exp, '8BUI', 0) as rast
87
+ from categorical_rast r, lookup l
88
+ ), area_rast AS
89
+ (
90
+ SELECT p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label, ST_union(ST_Clip(r.rast, 1, p.geom, 0, True)) as rast
91
+ FROM polygon p inner join rasters r on ST_Intersects(r.rast, 1, p.geom)
92
+ WHERE r.raster_variable_id = (select rv.area_reference_id from raster_variables rv where rv.id = rast_var_id limit 1)
93
+ GROUP BY p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label
94
+ ), calc AS
95
+ (
96
+ SELECT r.sample_geog_level_id, r.geog_instance_label, r.geog_instance_id, (ST_SummaryStats(ST_MapAlgebra(r.rast, 1, a.rast, 1, '[rast1]*[rast2]' ,'32BUI'))).sum as binary_area,
97
+ (ST_SummaryStats(a.rast)).sum as unit_area, ST_Count(r.rast) as reclass_pix, ST_Count(a.rast) as area_pix
98
+ FROM area_rast a inner join reclass_rast r on a.geog_instance_id = r.geog_instance_id
99
+ )
100
+ SELECT c.sample_geog_level_id, c.geog_instance_label, c.geog_instance_id, c.reclass_pix, c.area_pix, c.binary_area/c.unit_area as percent_area, c.binary_area as reclass_area
101
+ FROM calc c;
102
+ END;
103
+ $BODY$
104
+ LANGUAGE plpgsql VOLATILE
105
+ COST 100
106
+ ROWS 1000;
107
+ SQL
108
+
109
+ sql =<<-SQL
110
+ CREATE OR REPLACE FUNCTION terrapop_reclassify_categorical_raster_to_binary_summarization(IN sample_geog_lvl_id bigint, IN rasters_id bigint, IN bnd_num integer)
111
+ RETURNS TABLE(geog_instance bigint, geog_instance_label character varying, pixel_count bigint, binary_area double precision, percent_area double precision, total_area double precision) AS
112
+ $BODY$
113
+
114
+ BEGIN
115
+ RETURN QUERY
116
+
117
+ WITH lookup AS
118
+ (
119
+ SELECT replace(replace(array_agg(classification::text || ':1')::text, '{', ''), '}', '') as exp
120
+ FROM raster_variables WHERE id IN (
121
+ select raster_variable_classifications.mosaic_raster_variable_id
122
+ from raster_variable_classifications
123
+ where raster_variable_classifications.raster_variable_id = rasters_id)
124
+ ), cat_rast as
125
+ (
126
+ SELECT rv.area_reference_id as area_id, rv.second_area_reference_id as cat_id
127
+ FROM raster_variables rv
128
+ WHERE rv.id = rasters_id
129
+ ),transformation as
130
+ (
131
+ SELECT ST_SRID(r.rast) as prj_value
132
+ FROM cat_rast c, rasters r
133
+ WHERE r.raster_variable_id = c.cat_id
134
+ LIMIT 1
135
+ ), polygon as
136
+ (
137
+ SELECT sgl.id as sample_geog_level_id, gi.id as geog_instance_id, gi.label as geog_instance_label,
138
+ gi.code as geog_instance_code, ST_Transform(bound.geog::geometry, t.prj_value) as geom, t.prj_value
139
+ FROM transformation t, sample_geog_levels sgl
140
+ inner join geog_instances gi on sgl.id = gi.sample_geog_level_id
141
+ inner join boundaries bound on bound.geog_instance_id = gi.id
142
+ WHERE sgl.id = sample_geog_lvl_id
143
+ ), r_table as
144
+ (
145
+ SELECT p.geog_instance_id, p.geog_instance_label, ST_Union(ST_Reclass(ST_Clip(r.rast, bnd_num, ST_Transform(p.geom, p.prj_value), TRUE),1,l.exp, '8BUI',0)) as rast
146
+ FROM lookup l, cat_rast c, polygon p inner join rasters r on ST_Intersects(r.rast, ST_Transform(p.geom, p.prj_value))
147
+ WHERE r.raster_variable_id = (c.cat_id)
148
+ GROUP by p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label, p.geog_instance_code
149
+ ), a_table as
150
+ (
151
+ SELECT p.geog_instance_id, p.geog_instance_label, ST_union(ST_Clip(r.rast, ST_Transform(p.geom, p.prj_value))) as rast
152
+ FROM lookup l, cat_rast c, polygon p inner join rasters r on ST_Intersects(r.rast, ST_Transform(p.geom, p.prj_value))
153
+ WHERE r.raster_variable_id = (c.area_id)
154
+ GROUP by p.sample_geog_level_id, p.geog_instance_id, p.geog_instance_label, p.geog_instance_code
155
+ ), calc as
156
+ (
157
+ SELECT r.geog_instance_id, r.geog_instance_label, (ST_SummaryStats(r.rast)).*, (ST_SummaryStats(a.rast)).sum as total_area,
158
+ (ST_SummaryStats(ST_MapAlgebra(r.rast, 1, a.rast, 1, '[rast1]*[rast2]', '32BUI'))).sum as binary_area
159
+ FROM r_table r inner join a_table a on (r.geog_instance_id = a.geog_instance_id)
160
+ )
161
+ SELECT c.geog_instance_id, c.geog_instance_label, c.count as pixel_count, c.binary_area,
162
+ c.binary_area / c.total_area as percent_area, c.total_area as total_area
163
+ FROM calc c;
164
+
165
+ END;
166
+
167
+ $BODY$
168
+ LANGUAGE 'plpgsql';
169
+ SQL
170
+
171
+ execute(sql)
172
+
173
+
174
+ end
175
+ end
176
+
177
+