urbanopt-geojson 0.11.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.github/workflows/nightly_build.yml +7 -5
- data/.gitignore +1 -0
- data/.rakeTasks +2 -2
- data/CHANGELOG.md +17 -0
- data/Gemfile +6 -10
- data/LICENSE.md +1 -1
- data/doc_templates/LICENSE.md +1 -1
- data/lib/measures/urban_geometry_creation/LICENSE.md +1 -1
- data/lib/measures/urban_geometry_creation/README.md +4 -34
- data/lib/measures/urban_geometry_creation/measure.rb +1 -1
- data/lib/measures/urban_geometry_creation/measure.xml +6 -5
- data/lib/measures/urban_geometry_creation_zoning/LICENSE.md +1 -1
- data/lib/measures/urban_geometry_creation_zoning/README.md +3 -25
- data/lib/measures/urban_geometry_creation_zoning/measure.rb +3 -2
- data/lib/measures/urban_geometry_creation_zoning/measure.xml +7 -6
- data/lib/urbanopt/geojson/building.rb +5 -6
- data/lib/urbanopt/geojson/district_system.rb +0 -4
- data/lib/urbanopt/geojson/feature.rb +7 -8
- data/lib/urbanopt/geojson/geo_file.rb +19 -17
- data/lib/urbanopt/geojson/helper.rb +10 -6
- data/lib/urbanopt/geojson/logging.rb +1 -1
- data/lib/urbanopt/geojson/mapper_classes.rb +4 -3
- data/lib/urbanopt/geojson/model.rb +1 -0
- data/lib/urbanopt/geojson/region.rb +0 -3
- data/lib/urbanopt/geojson/scale_area.rb +6 -14
- data/lib/urbanopt/geojson/schema/building_properties.json +13 -1
- data/lib/urbanopt/geojson/schema/site_properties.json +16 -4
- data/lib/urbanopt/geojson/schema/thermal_junction_properties.json +0 -4
- data/lib/urbanopt/geojson/update_areas.rb +3 -2
- data/lib/urbanopt/geojson/validate_geojson.rb +9 -8
- data/lib/urbanopt/geojson/version.rb +1 -1
- data/lib/urbanopt/geojson/zoning.rb +3 -2
- data/urbanopt-geojson-gem.gemspec +8 -8
- metadata +17 -45
checksums.yaml
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
---
|
2
2
|
SHA256:
|
3
|
-
metadata.gz:
|
4
|
-
data.tar.gz:
|
3
|
+
metadata.gz: 598a86cd6ea379dcc630e4728a308ca6d543acaf1d06f64df8681d3aec2e8dbe
|
4
|
+
data.tar.gz: 7828a7da042ee0094f7361bd3ce38c7564a4bdccc1a24a9690a720b65df2122a
|
5
5
|
SHA512:
|
6
|
-
metadata.gz:
|
7
|
-
data.tar.gz:
|
6
|
+
metadata.gz: f1216daf8552b6973230763fb5d8fbfb12eaa31c30143af8220fb2945d673c2e76e26075c15710b188c88fc8c7d3ecbed1206a711a9c7659c6e60d2f06682582
|
7
|
+
data.tar.gz: 8ae72ca2e05eb23c3f1bf31018ba272bc2839e10290c2ea21bc44b35aacc66f98496879f93f91cc04bff7a7e22ec63b3897db194f909a6716d3a1771243acf3c
|
@@ -1,13 +1,12 @@
|
|
1
1
|
name: Geojson-gem CI
|
2
2
|
|
3
3
|
on:
|
4
|
-
|
4
|
+
workflow_dispatch:
|
5
|
+
push:
|
5
6
|
schedule:
|
6
7
|
# https://docs.github.com/en/actions/using-workflows/events-that-trigger-workflows#schedule
|
7
8
|
# 5 am UTC (11pm MDT the day before) every weekday night in MDT
|
8
9
|
- cron: '21 5 * * 2-6'
|
9
|
-
pull_request:
|
10
|
-
types: [review_requested]
|
11
10
|
|
12
11
|
env:
|
13
12
|
# This env var should enforce develop branch of all dependencies
|
@@ -18,7 +17,7 @@ jobs:
|
|
18
17
|
weeknight-tests:
|
19
18
|
runs-on: ubuntu-latest
|
20
19
|
container:
|
21
|
-
image: docker://nrel/openstudio:3.
|
20
|
+
image: docker://nrel/openstudio:3.9.0
|
22
21
|
steps:
|
23
22
|
- uses: actions/checkout@v4
|
24
23
|
- name: set git config options
|
@@ -28,11 +27,14 @@ jobs:
|
|
28
27
|
- name: Update gems
|
29
28
|
run: |
|
30
29
|
ruby --version
|
30
|
+
bundle install
|
31
31
|
bundle update
|
32
32
|
- name: List OpenStudio measures
|
33
33
|
run: bundle exec rake openstudio:list_measures
|
34
34
|
- name: Update OpenStudio measures
|
35
|
-
run:
|
35
|
+
run: |
|
36
|
+
bundle install
|
37
|
+
bundle exec rake openstudio:update_measures
|
36
38
|
- name: Test OpenStudio measures
|
37
39
|
run: bundle exec rake openstudio:test_with_openstudio
|
38
40
|
- name: Run Rspec
|
data/.gitignore
CHANGED
data/.rakeTasks
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
<?xml version="1.0" encoding="UTF-8"?>
|
2
2
|
<Settings><!--This file was automatically generated by Ruby plugin.
|
3
|
-
You are allowed to:
|
3
|
+
You are allowed to:
|
4
4
|
1. Remove rake task
|
5
5
|
2. Add existing rake tasks
|
6
6
|
To add existing rake tasks automatically delete this file and reload the project.
|
7
|
-
--><RakeGroup description="" fullCmd=""
|
7
|
+
--><RakeGroup description="" fullCmd="" taskId="rake" /></Settings>
|
data/CHANGELOG.md
CHANGED
@@ -1,6 +1,22 @@
|
|
1
1
|
# URBANopt GeoJSON Gem
|
2
2
|
|
3
|
+
## Version 1.0.0
|
4
|
+
|
5
|
+
## Exciting new features 🎉
|
6
|
+
|
7
|
+
* Upgrade to OpenStudio 3.9 and Ruby 3.2.2 by @vtnate in https://github.com/urbanopt/urbanopt-geojson-gem/pull/279
|
8
|
+
|
9
|
+
**Full Changelog**: https://github.com/urbanopt/urbanopt-geojson-gem/compare/v0.11.2...v1.0.0
|
10
|
+
|
11
|
+
## Version 0.11.2
|
12
|
+
|
13
|
+
* Allow null for some optional fields by @vtnate in https://github.com/urbanopt/urbanopt-geojson-gem/pull/273
|
14
|
+
* Added UO-ResStock connection variable to the site properties schema by @rawadelkontar in https://github.com/urbanopt/urbanopt-geojson-gem/pull/270
|
15
|
+
|
16
|
+
**Full Changelog**: https://github.com/urbanopt/urbanopt-geojson-gem/compare/v0.11.1...v0.11.2
|
17
|
+
|
3
18
|
## Version 0.11.1
|
19
|
+
|
4
20
|
Date Range: 01/09/24
|
5
21
|
|
6
22
|
* downgrade json-schema to 2.7 by @vtnate in https://github.com/urbanopt/urbanopt-geojson-gem/pull/267
|
@@ -8,6 +24,7 @@ Date Range: 01/09/24
|
|
8
24
|
**Full Changelog**: https://github.com/urbanopt/urbanopt-geojson-gem/compare/v0.11.0...v0.11.1
|
9
25
|
|
10
26
|
## Version 0.11.0
|
27
|
+
|
11
28
|
Date Range: 7/19/23 - 01/09/24
|
12
29
|
|
13
30
|
* Remove jenkins by @vtnate in https://github.com/urbanopt/urbanopt-geojson-gem/pull/260
|
data/Gemfile
CHANGED
@@ -11,19 +11,15 @@ gemspec
|
|
11
11
|
# checkout the latest version (develop) from github.
|
12
12
|
allow_local = ENV['FAVOR_LOCAL_GEMS']
|
13
13
|
|
14
|
-
#
|
15
|
-
gem 'addressable', '2.8.1'
|
16
|
-
# pin this dependency to avoid using racc dependency (which has native extensions)
|
17
|
-
gem 'parser', '3.2.2.2'
|
18
|
-
|
14
|
+
# gem 'openstudio-extension', '~> 0.8.2'
|
19
15
|
# if allow_local && File.exist?('../openstudio-extension-gem')
|
20
16
|
# gem 'openstudio-extension', path: '../openstudio-extension-gem'
|
21
17
|
# elsif allow_local
|
22
18
|
# gem 'openstudio-extension', github: 'NREL/openstudio-extension-gem', branch: 'develop'
|
23
19
|
# end
|
24
20
|
|
25
|
-
if allow_local && File.exist?('../urbanopt-core-gem')
|
26
|
-
|
27
|
-
elsif allow_local
|
28
|
-
|
29
|
-
end
|
21
|
+
# if allow_local && File.exist?('../urbanopt-core-gem')
|
22
|
+
# gem 'urbanopt-core', path: '../urbanopt-core-gem'
|
23
|
+
# elsif allow_local
|
24
|
+
# gem 'urbanopt-core', github: 'URBANopt/urbanopt-core-gem', branch: 'master'
|
25
|
+
# end
|
data/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt (tm), Copyright (c) 2019-
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2025, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
data/doc_templates/LICENSE.md
CHANGED
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt (tm), Copyright (c) 2019-
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2025, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt (tm), Copyright (c) 2019-
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2024, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -2,13 +2,13 @@
|
|
2
2
|
|
3
3
|
###### (Automatically generated documentation)
|
4
4
|
|
5
|
-
#
|
5
|
+
#
|
6
6
|
|
7
7
|
## Description
|
8
|
-
|
8
|
+
|
9
9
|
|
10
10
|
## Modeler Description
|
11
|
-
|
11
|
+
|
12
12
|
|
13
13
|
## Measure Type
|
14
14
|
ModelMeasure
|
@@ -19,38 +19,8 @@ ModelMeasure
|
|
19
19
|
## Arguments
|
20
20
|
|
21
21
|
|
22
|
-
### GeoJSON File
|
23
|
-
GeoJSON File.
|
24
|
-
**Name:** geojson_file,
|
25
|
-
**Type:** String,
|
26
|
-
**Units:** ,
|
27
|
-
**Required:** true,
|
28
|
-
**Model Dependent:** false
|
29
|
-
|
30
|
-
### Feature ID
|
31
|
-
Feature ID.
|
32
|
-
**Name:** feature_id,
|
33
|
-
**Type:** String,
|
34
|
-
**Units:** ,
|
35
|
-
**Required:** true,
|
36
|
-
**Model Dependent:** false
|
37
|
-
|
38
|
-
### Surrounding Buildings
|
39
|
-
Select which surrounding buildings to include.
|
40
|
-
**Name:** surrounding_buildings,
|
41
|
-
**Type:** Choice,
|
42
|
-
**Units:** ,
|
43
|
-
**Required:** true,
|
44
|
-
**Model Dependent:** false
|
45
|
-
|
46
|
-
### Scale Footprint Area by the Floor Area
|
47
|
-
If true, the footprint area from GeoJSON will be scaled by the floor_area provided by the user in URBANopt.
|
48
|
-
**Name:** scale_footprint_area_by_floor_area,
|
49
|
-
**Type:** Boolean,
|
50
|
-
**Units:** ,
|
51
|
-
**Required:** false,
|
52
|
-
**Model Dependent:** false
|
53
22
|
|
54
23
|
|
24
|
+
This measure does not have any user arguments
|
55
25
|
|
56
26
|
|
@@ -121,7 +121,7 @@ class UrbanGeometryCreation < OpenStudio::Measure::ModelMeasure
|
|
121
121
|
if scale_footprint_area_by_floor_area
|
122
122
|
building_hash = feature.to_hash
|
123
123
|
if building_hash[:number_of_stories] && building_hash[:floor_area]
|
124
|
-
scaled_footprint_area = building_hash[:floor_area].to_f / building_hash[:number_of_stories]
|
124
|
+
scaled_footprint_area = building_hash[:floor_area].to_f / building_hash[:number_of_stories]
|
125
125
|
@runner.registerInfo("Desired footprint area in ft2: #{scaled_footprint_area}")
|
126
126
|
end
|
127
127
|
end
|
@@ -1,10 +1,11 @@
|
|
1
1
|
<?xml version="1.0"?>
|
2
2
|
<measure>
|
3
3
|
<schema_version>3.1</schema_version>
|
4
|
+
<error>Failed to infer measure name from '/Users/nmoore/github/urbanopt-geojson-gem/lib/measures/urban_geometry_creation/measure.rb'</error>
|
4
5
|
<name>urban_geometry_creation</name>
|
5
6
|
<uid>5ab85d6b-c9af-4361-8ab9-613ee99a5666</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
7
|
+
<version_id>048231f4-ba53-4506-b922-35f13d8b806e</version_id>
|
8
|
+
<version_modified>2024-11-13T17:45:33Z</version_modified>
|
8
9
|
<xml_checksum>D254E772</xml_checksum>
|
9
10
|
<class_name>UrbanGeometryCreation</class_name>
|
10
11
|
<display_name>UrbanGeometryCreation</display_name>
|
@@ -108,13 +109,13 @@
|
|
108
109
|
<filename>LICENSE.md</filename>
|
109
110
|
<filetype>md</filetype>
|
110
111
|
<usage_type>license</usage_type>
|
111
|
-
<checksum>
|
112
|
+
<checksum>3C275955</checksum>
|
112
113
|
</file>
|
113
114
|
<file>
|
114
115
|
<filename>README.md</filename>
|
115
116
|
<filetype>md</filetype>
|
116
117
|
<usage_type>readme</usage_type>
|
117
|
-
<checksum>
|
118
|
+
<checksum>0B68E96D</checksum>
|
118
119
|
</file>
|
119
120
|
<file>
|
120
121
|
<filename>README.md.erb</filename>
|
@@ -131,7 +132,7 @@
|
|
131
132
|
<filename>measure.rb</filename>
|
132
133
|
<filetype>rb</filetype>
|
133
134
|
<usage_type>script</usage_type>
|
134
|
-
<checksum>
|
135
|
+
<checksum>D58B8040</checksum>
|
135
136
|
</file>
|
136
137
|
<file>
|
137
138
|
<filename>nrel_stm_footprints.geojson</filename>
|
@@ -1,4 +1,4 @@
|
|
1
|
-
URBANopt (tm), Copyright (c) 2019-
|
1
|
+
URBANopt (tm), Copyright (c) 2019-2024, Alliance for Sustainable Energy, LLC, and other
|
2
2
|
contributors. All rights reserved.
|
3
3
|
|
4
4
|
Redistribution and use in source and binary forms, with or without modification,
|
@@ -2,10 +2,10 @@
|
|
2
2
|
|
3
3
|
###### (Automatically generated documentation)
|
4
4
|
|
5
|
-
#
|
5
|
+
#
|
6
6
|
|
7
7
|
## Description
|
8
|
-
|
8
|
+
|
9
9
|
|
10
10
|
## Modeler Description
|
11
11
|
|
@@ -19,30 +19,8 @@ ModelMeasure
|
|
19
19
|
## Arguments
|
20
20
|
|
21
21
|
|
22
|
-
### GeoJSON File
|
23
|
-
GeoJSON File.
|
24
|
-
**Name:** geojson_file,
|
25
|
-
**Type:** String,
|
26
|
-
**Units:** ,
|
27
|
-
**Required:** true,
|
28
|
-
**Model Dependent:** false
|
29
|
-
|
30
|
-
### Feature ID
|
31
|
-
Feature ID.
|
32
|
-
**Name:** feature_id,
|
33
|
-
**Type:** String,
|
34
|
-
**Units:** ,
|
35
|
-
**Required:** true,
|
36
|
-
**Model Dependent:** false
|
37
|
-
|
38
|
-
### Surrounding Buildings
|
39
|
-
Select which surrounding buildings to include.
|
40
|
-
**Name:** surrounding_buildings,
|
41
|
-
**Type:** Choice,
|
42
|
-
**Units:** ,
|
43
|
-
**Required:** true,
|
44
|
-
**Model Dependent:** false
|
45
22
|
|
46
23
|
|
24
|
+
This measure does not have any user arguments
|
47
25
|
|
48
26
|
|
@@ -110,7 +110,8 @@ class UrbanGeometryCreationZoning < OpenStudio::Measure::ModelMeasure
|
|
110
110
|
@runner.registerWarning("Surface elevation not set for building '#{name}'")
|
111
111
|
end
|
112
112
|
|
113
|
-
|
113
|
+
case feature.type
|
114
|
+
when 'Building'
|
114
115
|
# make requested building, zoning is set to true
|
115
116
|
spaces = feature.create_building(:spaces_per_floor, model, @origin_lat_lon, @runner, true)
|
116
117
|
if spaces.nil? || spaces.empty?
|
@@ -157,7 +158,7 @@ class UrbanGeometryCreationZoning < OpenStudio::Measure::ModelMeasure
|
|
157
158
|
URBANopt::GeoJSON::Helper.convert_to_shading_surface_group(space)
|
158
159
|
end
|
159
160
|
|
160
|
-
|
161
|
+
when 'District System'
|
161
162
|
district_system_type = feature[:properties][:district_system_type]
|
162
163
|
if district_system_type == 'Community Photovoltaic'
|
163
164
|
shading_surfaces = URBANopt::GeoJSON::Helper.create_photovoltaics(feature, 0, model, @origin_lat_lon, @runner)
|
@@ -1,10 +1,11 @@
|
|
1
1
|
<?xml version="1.0"?>
|
2
2
|
<measure>
|
3
3
|
<schema_version>3.1</schema_version>
|
4
|
+
<error>Failed to infer measure name from '/Users/nmoore/github/urbanopt-geojson-gem/lib/measures/urban_geometry_creation_zoning/measure.rb'</error>
|
4
5
|
<name>urban_geometry_creation_zoning</name>
|
5
6
|
<uid>96ea1317-76ac-4670-b51d-71ee3f4fdd65</uid>
|
6
|
-
<version_id>
|
7
|
-
<version_modified>
|
7
|
+
<version_id>f4e83153-b29e-4154-9ed0-7062896e7448</version_id>
|
8
|
+
<version_modified>2024-11-14T16:53:21Z</version_modified>
|
8
9
|
<xml_checksum>D254E772</xml_checksum>
|
9
10
|
<class_name>UrbanGeometryCreationZoning</class_name>
|
10
11
|
<display_name>UrbanGeometryCreationZoning</display_name>
|
@@ -89,13 +90,13 @@
|
|
89
90
|
<filename>LICENSE.md</filename>
|
90
91
|
<filetype>md</filetype>
|
91
92
|
<usage_type>license</usage_type>
|
92
|
-
<checksum>
|
93
|
+
<checksum>3C275955</checksum>
|
93
94
|
</file>
|
94
95
|
<file>
|
95
96
|
<filename>README.md</filename>
|
96
97
|
<filetype>md</filetype>
|
97
98
|
<usage_type>readme</usage_type>
|
98
|
-
<checksum>
|
99
|
+
<checksum>0B68E96D</checksum>
|
99
100
|
</file>
|
100
101
|
<file>
|
101
102
|
<filename>README.md.erb</filename>
|
@@ -112,7 +113,7 @@
|
|
112
113
|
<filename>measure.rb</filename>
|
113
114
|
<filetype>rb</filetype>
|
114
115
|
<usage_type>script</usage_type>
|
115
|
-
<checksum>
|
116
|
+
<checksum>1EA1A74B</checksum>
|
116
117
|
</file>
|
117
118
|
<file>
|
118
119
|
<filename>OV_Buildings_Update_090420_res_eui_test.json</filename>
|
@@ -136,7 +137,7 @@
|
|
136
137
|
<filename>urban_geometry_creation_zoning_test.rb</filename>
|
137
138
|
<filetype>rb</filetype>
|
138
139
|
<usage_type>test</usage_type>
|
139
|
-
<checksum>
|
140
|
+
<checksum>3B495B27</checksum>
|
140
141
|
</file>
|
141
142
|
</files>
|
142
143
|
</measure>
|
@@ -103,12 +103,13 @@ module URBANopt
|
|
103
103
|
end
|
104
104
|
|
105
105
|
spaces = []
|
106
|
-
|
106
|
+
case create_method
|
107
|
+
when :space_per_floor, :spaces_per_floor
|
107
108
|
(-number_of_stories_below_ground + 1..number_of_stories_above_ground).each do |story_number|
|
108
109
|
new_spaces = create_space_per_floor(story_number, floor_to_floor_height, model, origin_lat_lon, runner, zoning, scaled_footprint_area)
|
109
110
|
spaces.concat(new_spaces)
|
110
111
|
end
|
111
|
-
|
112
|
+
when :space_per_building
|
112
113
|
spaces = create_space_per_building(-number_of_stories_below_ground * floor_to_floor_height, number_of_stories_above_ground * floor_to_floor_height, model, origin_lat_lon, runner, zoning, other_building)
|
113
114
|
end
|
114
115
|
return spaces
|
@@ -417,10 +418,8 @@ module URBANopt
|
|
417
418
|
space = space.get
|
418
419
|
space.setName("Building Story #{story_number} Space")
|
419
420
|
space.surfaces.each do |surface|
|
420
|
-
if surface.surfaceType == 'Wall'
|
421
|
-
|
422
|
-
surface.setOutsideBoundaryCondition('Ground')
|
423
|
-
end
|
421
|
+
if surface.surfaceType == 'Wall' && (story_number < 1)
|
422
|
+
surface.setOutsideBoundaryCondition('Ground')
|
424
423
|
end
|
425
424
|
end
|
426
425
|
spaces << space
|
@@ -8,10 +8,6 @@ require 'urbanopt/geojson/feature'
|
|
8
8
|
module URBANopt
|
9
9
|
module GeoJSON # :nodoc: all
|
10
10
|
class DistrictSystem < Feature
|
11
|
-
def initialize(feature)
|
12
|
-
super(feature)
|
13
|
-
end
|
14
|
-
|
15
11
|
##
|
16
12
|
# Used to describe the feature type using the base method from the Feature class.
|
17
13
|
def feature_type
|
@@ -19,9 +19,7 @@ module URBANopt
|
|
19
19
|
@feature_json = validate_feat(feature)
|
20
20
|
end
|
21
21
|
|
22
|
-
# rubocop:disable Style/MethodMissing
|
23
22
|
def method_missing(name, *args, &blk)
|
24
|
-
# rubocop:enable Style/MethodMissing
|
25
23
|
if @feature_json[:properties].keys.map(&:to_sym).include? name.to_sym
|
26
24
|
|
27
25
|
return @feature_json[:properties][name.to_sym]
|
@@ -196,10 +194,11 @@ module URBANopt
|
|
196
194
|
def get_multi_polygons(json = @feature_json)
|
197
195
|
geometry_type = json[:geometry][:type]
|
198
196
|
multi_polygons = []
|
199
|
-
|
197
|
+
case geometry_type
|
198
|
+
when 'Polygon'
|
200
199
|
polygons = json[:geometry][:coordinates]
|
201
200
|
multi_polygons = [polygons]
|
202
|
-
|
201
|
+
when 'MultiPolygon'
|
203
202
|
multi_polygons = json[:geometry][:coordinates]
|
204
203
|
end
|
205
204
|
return multi_polygons
|
@@ -256,8 +255,7 @@ module URBANopt
|
|
256
255
|
central_latitude = Math.atan2(z, central_square_root)
|
257
256
|
|
258
257
|
[central_longitude * 180 / Math::PI,
|
259
|
-
|
260
|
-
|
258
|
+
central_latitude * 180 / Math::PI]
|
261
259
|
end
|
262
260
|
|
263
261
|
private
|
@@ -292,8 +290,9 @@ module URBANopt
|
|
292
290
|
end
|
293
291
|
|
294
292
|
geometry_type = feature[:geometry][:type]
|
295
|
-
|
296
|
-
|
293
|
+
case geometry_type
|
294
|
+
when 'Polygon'
|
295
|
+
when 'MultiPolygon'
|
297
296
|
else
|
298
297
|
raise("Unknown geometry type '#{geometry_type}'")
|
299
298
|
return false
|
@@ -47,7 +47,6 @@ module URBANopt
|
|
47
47
|
symbolize_names: true
|
48
48
|
)
|
49
49
|
|
50
|
-
|
51
50
|
# validate geojson file against schema
|
52
51
|
geojson_errors = validate(@@geojson_schema, geojson_file)
|
53
52
|
unless geojson_errors.empty?
|
@@ -83,6 +82,7 @@ module URBANopt
|
|
83
82
|
if feature[:properties][:name].nil?
|
84
83
|
raise('No name found for Building Feature')
|
85
84
|
end
|
85
|
+
|
86
86
|
if feature[:properties][:number_of_stories].nil?
|
87
87
|
@@logger.warn("Number of stories is required to calculate shading using the UrbanGeometryCreation measure.\n" \
|
88
88
|
"Not validating #{feature[:properties][:id]} against schema and ignoring in shading calculations")
|
@@ -96,6 +96,7 @@ module URBANopt
|
|
96
96
|
if feature[:properties][:name].nil?
|
97
97
|
raise('No name found for Building Feature')
|
98
98
|
end
|
99
|
+
|
99
100
|
@@logger.warn("OS-HPXML files may not conform to schema, which is usually ok.\n" \
|
100
101
|
"Not validating #{feature[:properties][:id]} against schema")
|
101
102
|
# Else validate for all required properties in the schema
|
@@ -196,16 +197,17 @@ module URBANopt
|
|
196
197
|
{ site: :electricity_emissions_annual_historical_subregion, feature: :electricity_emissions_annual_historical_subregion },
|
197
198
|
{ site: :electricity_emissions_future_year, feature: :electricity_emissions_future_year },
|
198
199
|
{ site: :electricity_emissions_hourly_historical_year, feature: :electricity_emissions_hourly_historical_year },
|
199
|
-
{ site: :electricity_emissions_annual_historical_year, feature: :electricity_emissions_annual_historical_year }
|
200
|
+
{ site: :electricity_emissions_annual_historical_year, feature: :electricity_emissions_annual_historical_year },
|
201
|
+
{ site: :characterize_residential_buildings_from_buildstock_csv, feature: :characterize_residential_buildings_from_buildstock_csv },
|
202
|
+
{ site: :resstock_buildstock_csv_path, feature: :resstock_buildstock_csv_path },
|
203
|
+
{ site: :uo_buildstock_mapping_csv_path, feature: :uo_buildstock_mapping_csv_path }
|
200
204
|
]
|
201
205
|
|
202
206
|
add_props.each do |prop|
|
203
|
-
|
204
|
-
|
205
|
-
|
206
|
-
|
207
|
-
feature[:properties][prop[:feature]] = project[prop[:site]]
|
208
|
-
end
|
207
|
+
# property exists in site
|
208
|
+
if project.key?(prop[:site]) && project[prop[:site]] && (!feature[:properties].key?(prop[:feature]) || feature[:properties][prop[:feature]].nil? || feature[:properties][prop[:feature]].to_s.empty?)
|
209
|
+
# property does not exist in feature or is nil: add site property (don't overwrite)
|
210
|
+
feature[:properties][prop[:feature]] = project[prop[:site]]
|
209
211
|
end
|
210
212
|
end
|
211
213
|
|
@@ -226,7 +228,7 @@ module URBANopt
|
|
226
228
|
result = nil
|
227
229
|
if @@geojson_schema.nil?
|
228
230
|
@@schema_file_lock.synchronize do
|
229
|
-
File.open(File.dirname(__FILE__)
|
231
|
+
File.open("#{File.dirname(__FILE__)}/schema/geojson_schema.json") do |f|
|
230
232
|
result = JSON.parse(f.read, symbolize_names: true)
|
231
233
|
end
|
232
234
|
end
|
@@ -236,7 +238,7 @@ module URBANopt
|
|
236
238
|
|
237
239
|
def self.get_building_schema(strict)
|
238
240
|
result = nil
|
239
|
-
File.open(File.dirname(__FILE__)
|
241
|
+
File.open("#{File.dirname(__FILE__)}/schema/building_properties.json") do |f|
|
240
242
|
result = JSON.parse(f.read)
|
241
243
|
end
|
242
244
|
if strict
|
@@ -249,7 +251,7 @@ module URBANopt
|
|
249
251
|
|
250
252
|
def self.get_district_system_schema(strict)
|
251
253
|
result = nil
|
252
|
-
File.open(File.dirname(__FILE__)
|
254
|
+
File.open("#{File.dirname(__FILE__)}/schema/district_system_properties.json") do |f|
|
253
255
|
result = JSON.parse(f.read)
|
254
256
|
end
|
255
257
|
if strict
|
@@ -262,7 +264,7 @@ module URBANopt
|
|
262
264
|
|
263
265
|
def self.get_region_schema(strict)
|
264
266
|
result = nil
|
265
|
-
File.open(File.dirname(__FILE__)
|
267
|
+
File.open("#{File.dirname(__FILE__)}/schema/region_properties.json") do |f|
|
266
268
|
result = JSON.parse(f.read)
|
267
269
|
end
|
268
270
|
if strict
|
@@ -275,7 +277,7 @@ module URBANopt
|
|
275
277
|
|
276
278
|
def self.get_site_schema(strict)
|
277
279
|
result = nil
|
278
|
-
File.open(File.dirname(__FILE__)
|
280
|
+
File.open("#{File.dirname(__FILE__)}/schema/site_properties.json") do |f|
|
279
281
|
result = JSON.parse(f.read)
|
280
282
|
end
|
281
283
|
if strict
|
@@ -288,7 +290,7 @@ module URBANopt
|
|
288
290
|
|
289
291
|
def self.get_electrical_connector_schema(strict)
|
290
292
|
result = nil
|
291
|
-
File.open(File.dirname(__FILE__)
|
293
|
+
File.open("#{File.dirname(__FILE__)}/schema/electrical_connector_properties.json") do |f|
|
292
294
|
result = JSON.parse(f.read)
|
293
295
|
end
|
294
296
|
if strict
|
@@ -301,7 +303,7 @@ module URBANopt
|
|
301
303
|
|
302
304
|
def self.get_electrical_junction_schema(strict)
|
303
305
|
result = nil
|
304
|
-
File.open(File.dirname(__FILE__)
|
306
|
+
File.open("#{File.dirname(__FILE__)}/schema/electrical_junction_properties.json") do |f|
|
305
307
|
result = JSON.parse(f.read)
|
306
308
|
end
|
307
309
|
if strict
|
@@ -314,7 +316,7 @@ module URBANopt
|
|
314
316
|
|
315
317
|
def self.get_thermal_connector_schema(strict)
|
316
318
|
result = nil
|
317
|
-
File.open(File.dirname(__FILE__)
|
319
|
+
File.open("#{File.dirname(__FILE__)}/schema/thermal_connector_properties.json") do |f|
|
318
320
|
result = JSON.parse(f.read)
|
319
321
|
end
|
320
322
|
if strict
|
@@ -327,7 +329,7 @@ module URBANopt
|
|
327
329
|
|
328
330
|
def self.get_thermal_junction_schema(strict)
|
329
331
|
result = nil
|
330
|
-
File.open(File.dirname(__FILE__)
|
332
|
+
File.open("#{File.dirname(__FILE__)}/schema/thermal_junction_properties.json") do |f|
|
331
333
|
result = JSON.parse(f.read)
|
332
334
|
end
|
333
335
|
if strict
|
@@ -242,6 +242,7 @@ module URBANopt
|
|
242
242
|
other_buildings[:features].each do |other_building|
|
243
243
|
other_id = other_building[:properties][:id]
|
244
244
|
next if other_id == building.id
|
245
|
+
|
245
246
|
# Consider building, if other building type is ShadingOnly and other id is not equal to building id
|
246
247
|
if other_building_type == 'ShadingOnly' && other_id != building.id
|
247
248
|
# Checks if any building point is shaded by any other building point.
|
@@ -277,6 +278,7 @@ module URBANopt
|
|
277
278
|
runner.registerInfo("Feature #{other_building[:properties][:id]} is acting as shading object for #{building.id}")
|
278
279
|
end
|
279
280
|
next unless shadowed
|
281
|
+
|
280
282
|
new_building = building.create_other_building(:space_per_building, model, origin_lat_lon, runner, zoning, 0, other_building)
|
281
283
|
if new_building.nil? || new_building.empty?
|
282
284
|
runner.registerWarning("Failed to create spaces for other building '#{name}'")
|
@@ -321,6 +323,7 @@ module URBANopt
|
|
321
323
|
if is_shaded(min_pair[:building_point], min_pair[:other_building_point], origin_lat_lon)
|
322
324
|
return true
|
323
325
|
end
|
326
|
+
|
324
327
|
return false
|
325
328
|
end
|
326
329
|
|
@@ -339,7 +342,8 @@ module URBANopt
|
|
339
342
|
if distance < 1
|
340
343
|
return true
|
341
344
|
end
|
342
|
-
|
345
|
+
|
346
|
+
elevation_angle = 2.5 # not sure of best value maybe allow as project level argument
|
343
347
|
height = vector.z
|
344
348
|
apparent_angle_rad = Math.atan2(height, distance)
|
345
349
|
apparent_angle = OpenStudio.radToDeg(apparent_angle_rad)
|
@@ -351,9 +355,9 @@ module URBANopt
|
|
351
355
|
return result
|
352
356
|
end
|
353
357
|
|
354
|
-
|
355
|
-
|
356
|
-
end
|
357
|
-
end
|
358
|
-
end
|
358
|
+
class << self
|
359
|
+
private :is_shaded
|
359
360
|
end
|
361
|
+
end
|
362
|
+
end
|
363
|
+
end
|
@@ -46,15 +46,16 @@ module URBANopt
|
|
46
46
|
feature_file = scenario.feature_file
|
47
47
|
feature = feature_file.get_feature_by_id(feature_id)
|
48
48
|
raise "Cannot find feature '#{feature_id}' in '#{scenario.geometry_file}'" if feature.nil?
|
49
|
+
|
49
50
|
# deep clone of @@osw before we configure it #:nodoc:
|
50
51
|
osw = Marshal.load(Marshal.dump(@@osw))
|
51
52
|
osw[:name] = feature_name
|
52
53
|
osw[:description] = feature_name
|
53
|
-
|
54
|
+
end
|
54
55
|
# rubocop:disable Lint/ReturnInVoidContext
|
55
56
|
return osw
|
56
|
-
|
57
|
-
|
57
|
+
# rubocop:enable Lint/ReturnInVoidContext
|
58
|
+
end
|
58
59
|
end
|
59
60
|
end
|
60
61
|
end
|
@@ -10,9 +10,6 @@ module URBANopt
|
|
10
10
|
class Region < Feature
|
11
11
|
##
|
12
12
|
# Used to initialize the feature. This method is inherited from the Feature class.
|
13
|
-
def initialize(feature)
|
14
|
-
super(feature)
|
15
|
-
end
|
16
13
|
|
17
14
|
##
|
18
15
|
# Used to describe the Region feature type using the base method from the Feature class.
|
@@ -30,6 +30,7 @@ module URBANopt
|
|
30
30
|
@vertices = vertices
|
31
31
|
@centroid = OpenStudio.getCentroid(vertices)
|
32
32
|
raise "Cannot compute centroid for '#{vertices}'" if @centroid.empty?
|
33
|
+
|
33
34
|
@centroid = @centroid.get
|
34
35
|
@desired_area = desired_area
|
35
36
|
@new_vertices = vertices
|
@@ -41,15 +42,7 @@ module URBANopt
|
|
41
42
|
@eps = eps
|
42
43
|
end
|
43
44
|
|
44
|
-
attr_reader :zero
|
45
|
-
|
46
|
-
attr_reader :one
|
47
|
-
|
48
|
-
attr_reader :two
|
49
|
-
|
50
|
-
attr_reader :ten
|
51
|
-
|
52
|
-
attr_reader :eps
|
45
|
+
attr_reader :zero, :one, :two, :ten, :eps, :new_vertices
|
53
46
|
|
54
47
|
##
|
55
48
|
# Used to determine new scaled vertices, by iteratively passing in the perimeter distance to
|
@@ -59,12 +52,11 @@ module URBANopt
|
|
59
52
|
@new_vertices = URBANopt::GeoJSON::Zoning.divide_floor_print(@vertices, x[0].to_f, @runner, scale = true)
|
60
53
|
new_area = OpenStudio.getArea(@new_vertices)
|
61
54
|
raise "Cannot compute area for '#{@new_vertices}'" if new_area.empty?
|
55
|
+
|
62
56
|
new_area = new_area.get
|
63
57
|
|
64
58
|
return [new_area - @desired_area]
|
65
59
|
end
|
66
|
-
|
67
|
-
|
68
|
-
|
69
|
-
end # GeoJSON
|
70
|
-
end # URBANopt
|
60
|
+
end
|
61
|
+
end
|
62
|
+
end
|
@@ -283,6 +283,18 @@
|
|
283
283
|
"ev_curtailment_frac": {
|
284
284
|
"description": "Fraction between 0 and 1 that denotes curtailment of EV charging load to better align EV charging with expected energy production from a solar PV system",
|
285
285
|
"type": "number"
|
286
|
+
},
|
287
|
+
"characterize_residential_buildings_from_buildstock_csv":{
|
288
|
+
"description" : "Enable UO and ResStock connection to characterize residential buildings by matching them (and their properties) with building from the BuildStock CSV. Optional for residential buildings.",
|
289
|
+
"type": "boolean"
|
290
|
+
},
|
291
|
+
"resstock_buildstock_csv_path":{
|
292
|
+
"description" : "Path to the buildstock CSV that the users want to sample from to find the closest match to their UO residential buildings features. Optional for residential buildings.",
|
293
|
+
"type": "string"
|
294
|
+
},
|
295
|
+
"uo_buildstock_mapping_csv_path":{
|
296
|
+
"description" : "Path to the uo_buildstock mapping CSV. IN this CSV users can set a match of the UO features with a buildstock building and its characteristics and the feature will run with the assigned buildstock characteristics. Optional for residential buildings.",
|
297
|
+
"type": "string"
|
286
298
|
}
|
287
299
|
},
|
288
300
|
"required": [
|
@@ -515,4 +527,4 @@
|
|
515
527
|
]
|
516
528
|
}
|
517
529
|
}
|
518
|
-
}
|
530
|
+
}
|
@@ -77,15 +77,15 @@
|
|
77
77
|
},
|
78
78
|
"underground_cables_ratio": {
|
79
79
|
"description": "Ratio of overall cables that are underground vs. overhead for RNM analysis.",
|
80
|
-
"type": "number"
|
80
|
+
"type": ["number", "null"]
|
81
81
|
},
|
82
82
|
"only_lv_consumers": {
|
83
83
|
"description": "If true, only low voltage consumers will be considered in the RNM analysis.",
|
84
|
-
"type": "boolean"
|
84
|
+
"type": ["boolean", "null"]
|
85
85
|
},
|
86
86
|
"max_number_of_lv_nodes_per_building": {
|
87
87
|
"description": "Maximum number of low voltage nodes to represent a single building.",
|
88
|
-
"type": "number"
|
88
|
+
"type": ["number", "null"]
|
89
89
|
},
|
90
90
|
"emissions": {
|
91
91
|
"description": "Should be set to true to calculate electricity emissions for the associated building.",
|
@@ -211,9 +211,21 @@
|
|
211
211
|
"2018",
|
212
212
|
"2019"
|
213
213
|
]
|
214
|
+
},
|
215
|
+
"characterize_residential_buildings_from_buildstock_csv":{
|
216
|
+
"description" : "Enable UO and ResStock connection to characterize residential buildings by matching them (and their properties) with building from the BuildStock CSV.",
|
217
|
+
"type": "boolean"
|
218
|
+
},
|
219
|
+
"resstock_buildstock_csv_path":{
|
220
|
+
"description" : "Path to the buildstock CSV that the users want to sample from to find the closest match to their UO residential buildings features.",
|
221
|
+
"type": "string"
|
222
|
+
},
|
223
|
+
"uo_buildstock_mapping_csv_path":{
|
224
|
+
"description" : "Path to the uo_buildstock mapping CSV. IN this CSV users can set a match of the UO features with a buildstock building and its characteristics and the feature will run with the assigned buildstock characteristics",
|
225
|
+
"type": "string"
|
214
226
|
}
|
215
227
|
},
|
216
228
|
"required": [
|
217
229
|
],
|
218
230
|
"additionalProperties": false
|
219
|
-
}
|
231
|
+
}
|
@@ -47,10 +47,6 @@
|
|
47
47
|
"description": "Presence of pump: true if present, false if absent",
|
48
48
|
"type": "boolean"
|
49
49
|
},
|
50
|
-
"is_ghe_start_loop": {
|
51
|
-
"description": "Determines whether this junction is present at the start of the loop for a Ground Heat Exchanger Network.",
|
52
|
-
"type": "boolean"
|
53
|
-
},
|
54
50
|
"connection_type": {
|
55
51
|
"description": "Characterize the connection as series or parallel",
|
56
52
|
"$ref": "#/definitions/ThermalJunctionConnectionType"
|
@@ -25,10 +25,11 @@ geojson[:features].each do |feature|
|
|
25
25
|
# end
|
26
26
|
|
27
27
|
multi_polygons = nil
|
28
|
-
|
28
|
+
case geometry[:type]
|
29
|
+
when 'Polygon'
|
29
30
|
polygons = geometry[:coordinates]
|
30
31
|
multi_polygons = [polygons]
|
31
|
-
|
32
|
+
when 'MultiPolygon'
|
32
33
|
multi_polygons = geometry[:coordinates]
|
33
34
|
end
|
34
35
|
|
@@ -8,7 +8,7 @@ require 'json-schema'
|
|
8
8
|
|
9
9
|
def get_building_schema(strict)
|
10
10
|
result = nil
|
11
|
-
File.open(File.dirname(__FILE__)
|
11
|
+
File.open("#{File.dirname(__FILE__)}/../schema/building_properties.json") do |f|
|
12
12
|
result = JSON.parse(f.read)
|
13
13
|
end
|
14
14
|
if strict
|
@@ -21,7 +21,7 @@ end
|
|
21
21
|
|
22
22
|
def get_taxlot_schema(strict)
|
23
23
|
result = nil
|
24
|
-
File.open(File.dirname(__FILE__)
|
24
|
+
File.open("#{File.dirname(__FILE__)}/../schema/taxlot_properties.json") do |f|
|
25
25
|
result = JSON.parse(f.read)
|
26
26
|
end
|
27
27
|
if strict
|
@@ -34,7 +34,7 @@ end
|
|
34
34
|
|
35
35
|
def get_district_system_schema(strict)
|
36
36
|
result = nil
|
37
|
-
File.open(File.dirname(__FILE__)
|
37
|
+
File.open("#{File.dirname(__FILE__)}/../schema/district_system_properties.json") do |f|
|
38
38
|
result = JSON.parse(f.read)
|
39
39
|
end
|
40
40
|
if strict
|
@@ -47,7 +47,7 @@ end
|
|
47
47
|
|
48
48
|
def get_region_schema(strict)
|
49
49
|
result = nil
|
50
|
-
File.open(File.dirname(__FILE__)
|
50
|
+
File.open("#{File.dirname(__FILE__)}/../schema/region_properties.json") do |f|
|
51
51
|
result = JSON.parse(f.read)
|
52
52
|
end
|
53
53
|
if strict
|
@@ -95,13 +95,14 @@ Dir.glob('denver_district*.geojson').each do |p|
|
|
95
95
|
type = data['type']
|
96
96
|
errors = []
|
97
97
|
|
98
|
-
|
98
|
+
case type
|
99
|
+
when /building/i
|
99
100
|
errors = validate(building_schema, data)
|
100
|
-
|
101
|
+
when /district system/i
|
101
102
|
errors = validate(district_system_schema, data)
|
102
|
-
|
103
|
+
when /taxlot/i
|
103
104
|
errors = validate(taxlot_schema, data)
|
104
|
-
|
105
|
+
when /region/i
|
105
106
|
errors = validate(region_schema, data)
|
106
107
|
else
|
107
108
|
raise("Unknown type: '#{type}'")
|
@@ -28,11 +28,12 @@ module URBANopt
|
|
28
28
|
vertex_1 = nil
|
29
29
|
vertex_2 = nil
|
30
30
|
vertex_3 = nil
|
31
|
-
|
31
|
+
case i
|
32
|
+
when 0
|
32
33
|
vertex_1 = vertices[n - 1]
|
33
34
|
vertex_2 = vertices[i]
|
34
35
|
vertex_3 = vertices[i + 1]
|
35
|
-
|
36
|
+
when n - 1
|
36
37
|
vertex_1 = vertices[i - 1]
|
37
38
|
vertex_2 = vertices[i]
|
38
39
|
vertex_3 = vertices[0]
|
@@ -22,14 +22,14 @@ Gem::Specification.new do |spec|
|
|
22
22
|
spec.executables = spec.files.grep(%r{^exe/}) { |f| File.basename(f) }
|
23
23
|
spec.require_paths = ['lib']
|
24
24
|
|
25
|
-
|
25
|
+
# We support exactly Ruby v3.2.2 because os-extension requires bundler==2.4.10 and that requires Ruby 3.2.2: https://stdgems.org/bundler/
|
26
|
+
# It would be nice to be able to use newer patches of Ruby 3.2, which would require os-extension to relax its dependency on bundler.
|
27
|
+
spec.required_ruby_version = '3.2.2'
|
26
28
|
|
27
|
-
spec.add_development_dependency '
|
28
|
-
spec.add_development_dependency '
|
29
|
-
spec.add_development_dependency '
|
30
|
-
spec.add_development_dependency 'simplecov', '~> 0.18.2'
|
31
|
-
spec.add_development_dependency 'simplecov-lcov', '~> 0.8.0'
|
29
|
+
spec.add_development_dependency 'rspec', '~> 3.13'
|
30
|
+
spec.add_development_dependency 'simplecov', '0.22.0'
|
31
|
+
spec.add_development_dependency 'simplecov-lcov', '0.8.0'
|
32
32
|
|
33
|
-
spec.add_runtime_dependency 'json-schema', '~>
|
34
|
-
spec.add_runtime_dependency 'urbanopt-core', '~> 0.
|
33
|
+
spec.add_runtime_dependency 'json-schema', '~> 4.3.1'
|
34
|
+
spec.add_runtime_dependency 'urbanopt-core', '~> 1.0.0'
|
35
35
|
end
|
metadata
CHANGED
@@ -1,7 +1,7 @@
|
|
1
1
|
--- !ruby/object:Gem::Specification
|
2
2
|
name: urbanopt-geojson
|
3
3
|
version: !ruby/object:Gem::Version
|
4
|
-
version: 0.
|
4
|
+
version: 1.0.0
|
5
5
|
platform: ruby
|
6
6
|
authors:
|
7
7
|
- Tanushree Charan
|
@@ -10,76 +10,48 @@ authors:
|
|
10
10
|
autorequire:
|
11
11
|
bindir: exe
|
12
12
|
cert_chain: []
|
13
|
-
date:
|
13
|
+
date: 2025-01-22 00:00:00.000000000 Z
|
14
14
|
dependencies:
|
15
|
-
- !ruby/object:Gem::Dependency
|
16
|
-
name: bundler
|
17
|
-
requirement: !ruby/object:Gem::Requirement
|
18
|
-
requirements:
|
19
|
-
- - ">="
|
20
|
-
- !ruby/object:Gem::Version
|
21
|
-
version: 2.1.0
|
22
|
-
type: :development
|
23
|
-
prerelease: false
|
24
|
-
version_requirements: !ruby/object:Gem::Requirement
|
25
|
-
requirements:
|
26
|
-
- - ">="
|
27
|
-
- !ruby/object:Gem::Version
|
28
|
-
version: 2.1.0
|
29
|
-
- !ruby/object:Gem::Dependency
|
30
|
-
name: rake
|
31
|
-
requirement: !ruby/object:Gem::Requirement
|
32
|
-
requirements:
|
33
|
-
- - "~>"
|
34
|
-
- !ruby/object:Gem::Version
|
35
|
-
version: '13.0'
|
36
|
-
type: :development
|
37
|
-
prerelease: false
|
38
|
-
version_requirements: !ruby/object:Gem::Requirement
|
39
|
-
requirements:
|
40
|
-
- - "~>"
|
41
|
-
- !ruby/object:Gem::Version
|
42
|
-
version: '13.0'
|
43
15
|
- !ruby/object:Gem::Dependency
|
44
16
|
name: rspec
|
45
17
|
requirement: !ruby/object:Gem::Requirement
|
46
18
|
requirements:
|
47
19
|
- - "~>"
|
48
20
|
- !ruby/object:Gem::Version
|
49
|
-
version: '3.
|
21
|
+
version: '3.13'
|
50
22
|
type: :development
|
51
23
|
prerelease: false
|
52
24
|
version_requirements: !ruby/object:Gem::Requirement
|
53
25
|
requirements:
|
54
26
|
- - "~>"
|
55
27
|
- !ruby/object:Gem::Version
|
56
|
-
version: '3.
|
28
|
+
version: '3.13'
|
57
29
|
- !ruby/object:Gem::Dependency
|
58
30
|
name: simplecov
|
59
31
|
requirement: !ruby/object:Gem::Requirement
|
60
32
|
requirements:
|
61
|
-
- -
|
33
|
+
- - '='
|
62
34
|
- !ruby/object:Gem::Version
|
63
|
-
version: 0.
|
35
|
+
version: 0.22.0
|
64
36
|
type: :development
|
65
37
|
prerelease: false
|
66
38
|
version_requirements: !ruby/object:Gem::Requirement
|
67
39
|
requirements:
|
68
|
-
- -
|
40
|
+
- - '='
|
69
41
|
- !ruby/object:Gem::Version
|
70
|
-
version: 0.
|
42
|
+
version: 0.22.0
|
71
43
|
- !ruby/object:Gem::Dependency
|
72
44
|
name: simplecov-lcov
|
73
45
|
requirement: !ruby/object:Gem::Requirement
|
74
46
|
requirements:
|
75
|
-
- -
|
47
|
+
- - '='
|
76
48
|
- !ruby/object:Gem::Version
|
77
49
|
version: 0.8.0
|
78
50
|
type: :development
|
79
51
|
prerelease: false
|
80
52
|
version_requirements: !ruby/object:Gem::Requirement
|
81
53
|
requirements:
|
82
|
-
- -
|
54
|
+
- - '='
|
83
55
|
- !ruby/object:Gem::Version
|
84
56
|
version: 0.8.0
|
85
57
|
- !ruby/object:Gem::Dependency
|
@@ -88,28 +60,28 @@ dependencies:
|
|
88
60
|
requirements:
|
89
61
|
- - "~>"
|
90
62
|
- !ruby/object:Gem::Version
|
91
|
-
version:
|
63
|
+
version: 4.3.1
|
92
64
|
type: :runtime
|
93
65
|
prerelease: false
|
94
66
|
version_requirements: !ruby/object:Gem::Requirement
|
95
67
|
requirements:
|
96
68
|
- - "~>"
|
97
69
|
- !ruby/object:Gem::Version
|
98
|
-
version:
|
70
|
+
version: 4.3.1
|
99
71
|
- !ruby/object:Gem::Dependency
|
100
72
|
name: urbanopt-core
|
101
73
|
requirement: !ruby/object:Gem::Requirement
|
102
74
|
requirements:
|
103
75
|
- - "~>"
|
104
76
|
- !ruby/object:Gem::Version
|
105
|
-
version: 0.
|
77
|
+
version: 1.0.0
|
106
78
|
type: :runtime
|
107
79
|
prerelease: false
|
108
80
|
version_requirements: !ruby/object:Gem::Requirement
|
109
81
|
requirements:
|
110
82
|
- - "~>"
|
111
83
|
- !ruby/object:Gem::Version
|
112
|
-
version: 0.
|
84
|
+
version: 1.0.0
|
113
85
|
description: Library and measures to translate URBANopt GeoJSON format to OpenStudio
|
114
86
|
email:
|
115
87
|
- tanushree.charan@nrel.gov
|
@@ -233,16 +205,16 @@ require_paths:
|
|
233
205
|
- lib
|
234
206
|
required_ruby_version: !ruby/object:Gem::Requirement
|
235
207
|
requirements:
|
236
|
-
- -
|
208
|
+
- - '='
|
237
209
|
- !ruby/object:Gem::Version
|
238
|
-
version: 2.
|
210
|
+
version: 3.2.2
|
239
211
|
required_rubygems_version: !ruby/object:Gem::Requirement
|
240
212
|
requirements:
|
241
213
|
- - ">="
|
242
214
|
- !ruby/object:Gem::Version
|
243
215
|
version: '0'
|
244
216
|
requirements: []
|
245
|
-
rubygems_version: 3.
|
217
|
+
rubygems_version: 3.4.10
|
246
218
|
signing_key:
|
247
219
|
specification_version: 4
|
248
220
|
summary: Translate URBANopt GeoJSON format to OpenStudio
|