script.js 13 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313
  1. /*=============================================
  2. Project Size
  3. =============================================== */
  4. $(function() {
  5. $( "#draggable" ).draggable();
  6. $( "#mapDiv45" ).draggable();
  7. $( "#show-hide-advanced-fields" ).click(function(){
  8. $( "#advanced-fields, #mapcontrols").toggle();
  9. });
  10. });
  11. $(document).ready(function() {
  12. function initialize(){
  13. var geocoder = new google.maps.Geocoder();
  14. address = document.getElementById('address').value;
  15. var mapOptions = {
  16. zoom: 40,
  17. disableDefaultUI: true,
  18. zoomControl: true,
  19. panControl: true,
  20. mapTypeControl: true,
  21. scaleControl: true,
  22. streetViewControl: true,
  23. overviewMapControl: true,
  24. mapTypeId:google.maps.MapTypeId.SATELLITE,
  25. tilt: 0
  26. };
  27. geocoder.geocode( { 'address': address}, function(results, status) {
  28. if (status == google.maps.GeocoderStatus.OK) {
  29. map.setCenter(results[0].geometry.location);
  30. x = results[0].geometry.location;
  31. }
  32. });
  33. var map = new google.maps.Map(document.getElementById("mapDiv"), mapOptions);
  34. var mapOptions45 = {
  35. zoom: 20,
  36. minZoom: 18,
  37. disableDefaultUI: true,
  38. zoomControl: true,
  39. mapTypeId:google.maps.MapTypeId.SATELLITE,
  40. tilt: 45
  41. };
  42. geocoder.geocode( { 'address': address}, function(results, status) {
  43. if (status == google.maps.GeocoderStatus.OK) {
  44. map45.setCenter(results[0].geometry.location);
  45. x = results[0].geometry.location;
  46. }
  47. });
  48. var map45 = new google.maps.Map(document.getElementById("mapDiv45"), mapOptions45);
  49. var mapOptionsImage = {
  50. zoom: 20,
  51. disableDefaultUI: true,
  52. zoomControl: false,
  53. draggable: false,
  54. mapTypeId:google.maps.MapTypeId.SATELLITE,
  55. tilt: 45
  56. };
  57. geocoder.geocode( { 'address': address}, function(results, status) {
  58. if (status == google.maps.GeocoderStatus.OK) {
  59. mapImage.setCenter(results[0].geometry.location);
  60. x = results[0].geometry.location;
  61. }
  62. });
  63. var mapImage = new google.maps.Map(document.getElementById("mapDivImage"), mapOptionsImage);
  64. addButtons(map);
  65. drawEditablePolygon(map);
  66. }
  67. function addButtons(map){
  68. document.getElementById('btnTerrain').addEventListener('click', function(){
  69. map.setMapTypeId(google.maps.MapTypeId.TERRAIN);
  70. });
  71. document.getElementById('btnRoadmap').addEventListener('click', function(){
  72. map.setMapTypeId(google.maps.MapTypeId.ROADMAP);
  73. });
  74. document.getElementById('btnSatellite').addEventListener('click', function(){
  75. map.setMapTypeId(google.maps.MapTypeId.SATELLITE);
  76. });
  77. document.getElementById('btnHybrid').addEventListener('click', function(){
  78. map.setMapTypeId(google.maps.MapTypeId.HYBRID);
  79. });
  80. document.getElementById('btnCompass').addEventListener('click', function(){
  81. $('#draggable').toggle();
  82. });
  83. document.getElementById('btnInspector').addEventListener('click', function(){
  84. $('#mapDiv45').toggle();
  85. });
  86. }
  87. function drawEditablePolygon(map) {
  88. geocoder = new google.maps.Geocoder();
  89. address = document.getElementById('address').value;
  90. geocoder.geocode( { 'address': address}, function(results, status) {
  91. if (status == google.maps.GeocoderStatus.OK) {
  92. map.setCenter(results[0].geometry.location);
  93. lat = results[0].geometry.location.lat();
  94. lon = results[0].geometry.location.lng();
  95. lat_adjacent = Number(results[0].geometry.location.lat()) + 0.0001;
  96. lon_adjacent = Number(results[0].geometry.location.lng()) + 0.0001;
  97. console.log("LAT: " + lat + " | ADJACENT LAT: " + lat_adjacent + " LON: " + lon + " | ADJACENT LON: " + lon_adjacent);
  98. natureCoords = [
  99. new google.maps.LatLng(lat, lon_adjacent),
  100. new google.maps.LatLng(lat, lon),
  101. new google.maps.LatLng(lat_adjacent, lon),
  102. new google.maps.LatLng(lat_adjacent, lon_adjacent)
  103. ];
  104. natureArea = new google.maps.Polygon({
  105. path: natureCoords,
  106. strokeColor: "#FFFFFF",
  107. strokeOpacity: 0.8,
  108. strokeWeight: 2,
  109. fillColor: "#00FF00",
  110. fillOpacity: 0.6,
  111. editable: true,
  112. draggable: true
  113. });
  114. natureArea.setMap(map);
  115. document.getElementById('calculate').addEventListener('click', function(){
  116. calculateValue();
  117. });
  118. }
  119. });
  120. }
  121. google.maps.event.addDomListener(window, "load", initialize);
  122. $('#update_address').click( function(){
  123. initialize();
  124. });
  125. $('#calculate').click( function(){
  126. $('#results, #results2, #results3').show();
  127. });
  128. });
  129. function calculateValue() {
  130. surface_area = Number(google.maps.geometry.spherical.computeArea(natureArea.getPath()));
  131. size_premimum = Number(surface_area * 0.15);
  132. size_standard = Number(surface_area * 0.10);
  133. document.getElementById('results').innerHTML = "<br><br>RESULTS:<br><br>";
  134. document.getElementById('results').innerHTML += "Surface Area = " + surface_area.toFixed(0) + " sq meter <br/>";
  135. document.getElementById('results').innerHTML += "System size by using premium solar panels (SunPower) = " + size_premimum.toFixed(2) + " kW <br/>";
  136. document.getElementById('results').innerHTML += "System size by using standard solar panels = " + size_standard.toFixed(2) + " kW <br/>";
  137. var tilt = parseInt(document.getElementById('tilt').value);
  138. var azimuth = parseInt(document.getElementById('azimuth').value);
  139. var requestUrl="https://developer.nrel.gov/api/pvwatts/v5.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&lat=" + lat + "&lon=" + lon + "&timeframe=monthly&system_capacity=" + size_premimum + "&module_type=1&losses=14&array_type=1&tilt=" + tilt + "&azimuth=" + azimuth + "&callback=?";
  140. $.getJSON(requestUrl, { }, function (data){
  141. console.log(data.outputs);
  142. var energyGenerated = data.outputs.ac_annual;
  143. var ppa = document.getElementById('ppa').value;
  144. var lease = energyGenerated * 0.15 * ppa;
  145. document.getElementById('results3').innerHTML = "<br /> Estimated Electricity Production = " + energyGenerated.toFixed(2) + " kWh per year <br/>";
  146. document.getElementById('results3').innerHTML += "<h3>Year 1 PPA Revenue $" + lease.toFixed(2) + ".</h3>";
  147. });
  148. requestUtilityCompanies ="https://developer.nrel.gov/api/census_rate/v3.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&region=block&id=101&lat=" + lat + "&lon=" + lon;
  149. $.getJSON(requestUtilityCompanies, { }, function (data){
  150. document.getElementById('results2').innerHTML = "<br />Local Electric Utility Company: <br/>";
  151. var i=0;
  152. utility='';
  153. while(data.outputs.utility_info[i]){
  154. console.log(data.outputs.utility_info[i].utility_name);
  155. document.getElementById('results2').innerHTML += data.outputs.utility_info[i].utility_name + "<br />";
  156. utility += data.outputs.utility_info[i].utility_name ;
  157. i++;
  158. }
  159. });
  160. }
  161. /*=============================================
  162. Utility
  163. =============================================== */
  164. function show_utility_companies() {
  165. var city = document.getElementById('city').value;
  166. city = city.trim();
  167. city = city.split(' ').join('+');
  168. var address = city + "+" + document.getElementById('state').value;
  169. var requestUtilityCompanies ="https://developer.nrel.gov/api/census_rate/v3.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&region=block&id=101&address=" + address;
  170. $.getJSON(requestUtilityCompanies, {
  171. },
  172. function (data){
  173. document.getElementById('utility_companies').innerHTML = "<h3>Local Eletric Utility Companies:</h3>";
  174. var i=0;
  175. while(data.outputs.utility_info[i]){
  176. console.log(data.outputs.utility_info[i].utility_name);
  177. document.getElementById('utility_companies').innerHTML += data.outputs.utility_info[i].utility_name + "<br />";
  178. i++;
  179. }
  180. });
  181. }
  182. function show_average_electrcity_tariffs() {
  183. var city = document.getElementById('city').value;
  184. city = city.trim();
  185. city = city.split(' ').join('+');
  186. var address = city + "+" + document.getElementById('state').value;
  187. var requestAvgElectTariffs ="https://developer.nrel.gov/api/utility_rates/v3.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&address=" + address;
  188. $.getJSON(requestAvgElectTariffs, {
  189. },
  190. function (data){
  191. document.getElementById('average_electricity_tariffs').innerHTML = "<h3>Local Average Electricity Rates:</h3>";
  192. document.getElementById('average_electricity_tariffs').innerHTML += "<div><strong> Commercial:</strong> $" + data.outputs.commercial + "<br />" + "<strong>Industrial:</strong> $" + data.outputs.industrial + " <br/>" + "<strong>Residential:</strong> $" + data.outputs.residential + "</div>";
  193. });
  194. }
  195. /*=============================================
  196. Solar Irradiance
  197. =============================================== */
  198. function pvwatts_irradiance() {
  199. var city = document.getElementById('city').value;
  200. city = city.trim();
  201. city = city.split(' ').join('+');
  202. var address = city + "+" + document.getElementById('state').value;
  203. var size = document.getElementById('size').value;
  204. var array_type = parseInt(document.getElementById('array_type').value);
  205. var module_type = parseInt(document.getElementById('module_type').value);
  206. var tilt = parseInt(document.getElementById('tilt').value);
  207. var azimuth = parseInt(document.getElementById('azimuth').value);
  208. var requestUrl="https://developer.nrel.gov/api/pvwatts/v5.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&address=" + address + "&timeframe=monthly&system_capacity=" + size + "&module_type=" + module_type + "&losses=14&array_type=" + array_type + "&tilt=" + tilt + "&azimuth=" + azimuth + "&callback=?";
  209. $.getJSON(requestUrl, {},
  210. function (data){
  211. document.getElementById('pv_watts_annual_production').innerHTML = "Annual Production: " + data.outputs.ac_annual.toFixed(2) + " kWh/year <br>";
  212. var radiation = new Array ();
  213. radiation = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
  214. for (i=0; i<12; i++){
  215. document.getElementById('radiation_' + radiation[i] + '').innerHTML = data.outputs.ac_monthly[i].toFixed(0);
  216. document.getElementById('production_' + radiation[i] + '').innerHTML = data.outputs.ac_monthly[i].toFixed(0);
  217. }
  218. });
  219. }
  220. /*=============================================
  221. System Production
  222. =============================================== */
  223. function pvwatts() {
  224. var city = document.getElementById('city').value;
  225. city = city.trim();
  226. city = city.split(' ').join('+');
  227. var address = city + "+" + document.getElementById('state').value;
  228. var size = document.getElementById('size').value;
  229. var array_type = parseInt(document.getElementById('array_type').value);
  230. var module_type = parseInt(document.getElementById('module_type').value);
  231. var tilt = parseInt(document.getElementById('tilt').value);
  232. var azimuth = parseInt(document.getElementById('azimuth').value);
  233. var requestUrl="https://developer.nrel.gov/api/pvwatts/v5.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&address=" + address + "&timeframe=monthly&system_capacity=" + size + "&module_type=" + module_type + "&losses=14&array_type=" + array_type + "&tilt=" + tilt + "&azimuth=" + azimuth + "&callback=?";
  234. $.getJSON(requestUrl, {},
  235. function (data){
  236. document.getElementById('pv_watts_annual_production').innerHTML = "<br><br><b>Annual System Production:</b> " + data.outputs.ac_annual.toFixed(2) + " kWh/year AC<br>";
  237. document.getElementById('pv_watts_annual_production').innerHTML += "<b>Annual Solar Radiation Available:</b> " + data.outputs.solrad_annual.toFixed(3) * 365 + " kWh/year <br>";
  238. var radiation = new Array ();
  239. radiation = ['jan', 'feb', 'mar', 'apr', 'may', 'jun', 'jul', 'aug', 'sep', 'oct', 'nov', 'dec'];
  240. for (i=0; i<12; i++){
  241. document.getElementById('radiation_' + radiation[i] + '').innerHTML = data.outputs.solrad_monthly[i].toFixed(3)*1000;
  242. document.getElementById('production_' + radiation[i] + '').innerHTML = data.outputs.ac_monthly[i].toFixed(0);
  243. }
  244. });
  245. }
  246. /*=============================================
  247. Financial Incentives
  248. =============================================== */
  249. function show_incentives() {
  250. var city = document.getElementById('city').value;
  251. city = city.trim();
  252. city = city.split(' ').join('+');
  253. var address = city + "+" + document.getElementById('state').value;
  254. var requestDsire = "https://developer.nrel.gov/api/energy-incentives/v1.json?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&address=" + address + "&incentive_types=solar_incentives&callback=?";
  255. $.getJSON(requestDsire, {},
  256. function (data){
  257. document.getElementById('list_of_incentives').innerHTML = "<h2>List of Incentives:</h2><br>";
  258. var i=0;
  259. while(data.outputs.solar_incentives[i]){
  260. document.getElementById('list_of_incentives').innerHTML += "<div><strong> Program Name:</strong> " + data.outputs.solar_incentives[i].program_name + "<br />" + "<strong> Description:</strong> " + data.outputs.solar_incentives[i].notes + " <hr/> </div>";
  261. i++;
  262. }
  263. document.getElementById('list_of_incentives').innerHTML += "Read more <a href='" + "http://programs.dsireusa.org/system/program?zipcode=94649&technology=7" + "' target='_blank'> in the DSIRE website </a>";
  264. });
  265. }
  266. /*=============================================
  267. Installation Cost
  268. =============================================== */
  269. function avg_costperwatt(){
  270. document.getElementById("openpv_summary_results").innerHTML ="<h4>Please wait ... retrieving data</h4>";
  271. size = document.getElementById("openpv_system_size").value;
  272. minsize = size * 0.8;
  273. maxsize = size * 1.2;
  274. county = document.getElementById("openpv_county").value;
  275. var requestSystemCost ="https://developer.nrel.gov/api/solar/open_pv/installs/summaries?api_key=zoY9HFdYunwk1YAZ16nVrcmwzqotGDdnJONRA9oQ&county=" + county + "&minsize=" + minsize + "&maxsize=" + maxsize;
  276. $.getJSON(requestSystemCost, {},
  277. function (data){
  278. var number_of_system_costs = data.result.length;
  279. document.getElementById("openpv_summary_results").innerHTML ="<h4>Average Cost per Watt: " + data.result.avg_cost_pw + " $/W</h4>";
  280. document.getElementById("openpv_summary_results").innerHTML +="<h4>Best Average Cost per Watt: " + data.result.best_avg_cost_pw + " $/W</h4>";
  281. });
  282. }