Copy disabled (too large)
Download .txt
Showing preview only (22,307K chars total). Download the full file to get everything.
Repository: akrherz/iem
Branch: main
Commit: 6f5ebf7b4674
Files: 1813
Total size: 21.0 MB
Directory structure:
gitextract_wagou1ak/
├── .deepsource.toml
├── .editorconfig
├── .github/
│ ├── ci_db_testdata.py
│ ├── copilot-instructions.md
│ ├── dependabot.yml
│ ├── ms_environment.yml
│ ├── setupdata.sh
│ ├── setuppaths.sh
│ └── workflows/
│ ├── build.yml
│ ├── codeql.yml
│ ├── etchosts.txt
│ ├── mapserver.yml
│ ├── publish-iemjs.yml
│ └── test-iemjs.yml
├── .gitignore
├── .pre-commit-config.yaml
├── .prettierrc
├── LICENSE
├── README.md
├── cgi-bin/
│ ├── afos/
│ │ └── retrieve.py
│ ├── climate/
│ │ └── orc.py
│ ├── geocoder.py
│ ├── index.php
│ ├── mywindrose.py
│ ├── onsite/
│ │ └── birthday/
│ │ └── getweather.py
│ ├── precip/
│ │ ├── catAZOS.py
│ │ └── catSNET.py
│ ├── request/
│ │ ├── asos.py
│ │ ├── asos1min.py
│ │ ├── coop.py
│ │ ├── coopobs.py
│ │ ├── daily.py
│ │ ├── feel.py
│ │ ├── gis/
│ │ │ ├── awc_gairmets.py
│ │ │ ├── cwas.py
│ │ │ ├── lsr.py
│ │ │ ├── misc.py
│ │ │ ├── nexrad_storm_attrs.py
│ │ │ ├── pireps.py
│ │ │ ├── sigmets.py
│ │ │ ├── spc_mcd.py
│ │ │ ├── spc_outlooks.py
│ │ │ ├── spc_watch.py
│ │ │ ├── sps.py
│ │ │ ├── watch_by_county.py
│ │ │ ├── watchwarn.py
│ │ │ └── wpc_mpd.py
│ │ ├── grx_rings.py
│ │ ├── hads.py
│ │ ├── hml.py
│ │ ├── hourlyprecip.py
│ │ ├── index.php
│ │ ├── isusm.py
│ │ ├── metars.py
│ │ ├── mos.py
│ │ ├── nass_iowa.py
│ │ ├── nlaeflux.py
│ │ ├── normals.py
│ │ ├── other.py
│ │ ├── purpleair.py
│ │ ├── raob.py
│ │ ├── raster2netcdf.py
│ │ ├── rwis.py
│ │ ├── scan.py
│ │ ├── scp.py
│ │ ├── smos.py
│ │ ├── ss.py
│ │ ├── taf.py
│ │ ├── talltowers.py
│ │ ├── tempwind_aloft.py
│ │ ├── uscrn.py
│ │ └── wmo_bufr_srf.py
│ └── wms/
│ ├── goes/
│ │ ├── alaska_ir.cgi
│ │ ├── alaska_vis.cgi
│ │ ├── alaska_wv.cgi
│ │ ├── conus_ir.cgi
│ │ ├── conus_vis.cgi
│ │ ├── conus_wv.cgi
│ │ ├── east_ir.cgi
│ │ ├── east_vis.cgi
│ │ ├── east_wv.cgi
│ │ ├── goes.cgi
│ │ ├── hawaii_ir.cgi
│ │ ├── hawaii_vis.cgi
│ │ ├── hawaii_wv.cgi
│ │ ├── west_ir.cgi
│ │ ├── west_vis.cgi
│ │ └── west_wv.cgi
│ ├── goes_east.cgi
│ ├── goes_west.cgi
│ ├── hrrr/
│ │ ├── refd.cgi
│ │ └── refp.cgi
│ ├── idep.cgi
│ ├── index.php
│ ├── iowa/
│ │ ├── rainfall.cgi
│ │ └── roadcond.cgi
│ ├── nexrad/
│ │ ├── daa.cgi
│ │ ├── dta.cgi
│ │ ├── eet.cgi
│ │ ├── n0q-t.cgi
│ │ ├── n0r-t.cgi
│ │ ├── n1p.cgi
│ │ ├── net.cgi
│ │ ├── ntp.cgi
│ │ └── ridge.cgi
│ ├── q2.cgi
│ └── us/
│ ├── counties.cgi
│ ├── mrms.cgi
│ ├── mrms_nn.cgi
│ ├── obs.cgi
│ ├── roadtemps.cgi
│ └── states.cgi
├── config/
│ ├── 00iem-ssl.conf
│ ├── 00iem.conf
│ ├── backend.conf
│ ├── iem-archive.conf
│ ├── mesonet-longterm-vhost.conf
│ ├── mesonet.inc
│ ├── navbar.json
│ └── settings.inc.php.in
├── conftest.py
├── data/
│ └── gis/
│ ├── avl/
│ │ └── iemrainfall.avl
│ ├── base.sym
│ ├── fonts.list
│ ├── iem.mapinc
│ ├── lsrs.mapinc
│ ├── meta/
│ │ ├── 26914.prj
│ │ ├── 26915.prj
│ │ ├── 4326.prj
│ │ ├── 5070.prj
│ │ ├── current_ww.shp.xml
│ │ └── stereo.prj
│ ├── roads.mapinc
│ ├── shape/
│ │ ├── basins.dbf
│ │ ├── basins.sbn
│ │ ├── basins.sbx
│ │ ├── basins.shp
│ │ └── basins.shx
│ ├── stations.sym
│ └── symbols/
│ ├── images/
│ │ └── iem_logo.png-save
│ └── stations.sym
├── deployment/
│ ├── iem-tilecache.service
│ ├── start_tc_wsgi.sh
│ └── symlink_manager.py
├── docs/
│ ├── datasets/
│ │ ├── afos.md
│ │ ├── climodat.md
│ │ ├── iemre.md
│ │ ├── metar.md
│ │ ├── template.md
│ │ └── vtec.md
│ ├── deployment/
│ │ └── vendor-static-assets.md
│ ├── meetings.md
│ ├── nmp.md
│ ├── soilmoisture.md
│ └── yieldproject.md
├── environment.yml
├── eslint.config.js
├── htdocs/
│ ├── .well-known/
│ │ ├── ai-plugin.json
│ │ └── traffic-advice
│ ├── ASOS/
│ │ ├── current.phtml
│ │ ├── index.phtml
│ │ ├── precipnote.phtml
│ │ ├── recent.css
│ │ ├── recent.module.js
│ │ ├── recent.phtml
│ │ └── reports/
│ │ ├── mon_prec.css
│ │ ├── mon_prec.module.js
│ │ └── mon_prec.php
│ ├── AWOS/
│ │ ├── current.phtml
│ │ ├── index.phtml
│ │ ├── reports/
│ │ │ └── mon_prec.php
│ │ └── skyc.phtml
│ ├── COOP/
│ │ ├── 7am-app.js
│ │ ├── 7am.css
│ │ ├── 7am.php
│ │ ├── cat.module.js
│ │ ├── cat.phtml
│ │ ├── current.phtml
│ │ ├── dl/
│ │ │ └── normals.phtml
│ │ ├── extremes.css
│ │ ├── extremes.js
│ │ ├── extremes.php
│ │ ├── freezing.php
│ │ ├── hpd.php
│ │ ├── index.css
│ │ ├── index.phtml
│ │ ├── map/
│ │ │ ├── index.css
│ │ │ ├── index.js
│ │ │ └── index.php
│ │ ├── periods.phtml
│ │ └── snowd_duration.phtml
│ ├── DCP/
│ │ ├── cat.phtml
│ │ ├── current.phtml
│ │ ├── index.phtml
│ │ ├── map.css
│ │ ├── map.js
│ │ ├── map.php
│ │ ├── plot.module.js
│ │ ├── plot.php
│ │ ├── plot.phtml
│ │ ├── site.css
│ │ ├── site.phtml
│ │ ├── tomb.module.js
│ │ └── tomb.phtml
│ ├── GIS/
│ │ ├── ams_030211.phtml
│ │ ├── apps/
│ │ │ ├── agclimate/
│ │ │ │ ├── chill.php
│ │ │ │ ├── dayplot.phtml
│ │ │ │ ├── gsplot.css
│ │ │ │ ├── gsplot.js
│ │ │ │ ├── gsplot.php
│ │ │ │ ├── gsplot.phtml
│ │ │ │ ├── month.php
│ │ │ │ └── plot.php
│ │ │ ├── coop/
│ │ │ │ ├── gsplot.php
│ │ │ │ ├── gsplot.phtml
│ │ │ │ ├── index.php
│ │ │ │ ├── plot.phtml
│ │ │ │ └── request.php
│ │ │ ├── iem/
│ │ │ │ ├── freeze.js
│ │ │ │ └── freeze.phtml
│ │ │ ├── onsite/
│ │ │ │ └── robins.php
│ │ │ ├── profit/
│ │ │ │ ├── index.css
│ │ │ │ ├── index.js
│ │ │ │ └── index.php
│ │ │ └── rview/
│ │ │ ├── anim_gif.php
│ │ │ ├── compare.phtml
│ │ │ ├── warnings.css
│ │ │ ├── warnings.module.js
│ │ │ ├── warnings.phtml
│ │ │ ├── warnings_cat.phtml
│ │ │ └── watch.phtml
│ │ ├── awips211.aux.xml
│ │ ├── awips211.prj
│ │ ├── goes.phtml
│ │ ├── index.php
│ │ ├── isu_021120.phtml
│ │ ├── maps/
│ │ │ └── pyims.xml
│ │ ├── model.phtml
│ │ ├── rad-by-year-fe.phtml
│ │ ├── rad-by-year.php
│ │ ├── radmap.php
│ │ ├── radmap_api.phtml
│ │ ├── radview.phtml
│ │ ├── rasters.php
│ │ ├── rby-overview.php
│ │ ├── ridge.phtml
│ │ ├── sbw-history.php
│ │ └── tiff/
│ │ └── index.py
│ ├── QC/
│ │ ├── index.phtml
│ │ ├── madis/
│ │ │ ├── network.css
│ │ │ └── network.phtml
│ │ ├── offline.php
│ │ └── tickets.phtml
│ ├── RWIS/
│ │ ├── camera.module.js
│ │ ├── camera.phtml
│ │ ├── current.phtml
│ │ ├── currentSF.phtml
│ │ ├── index.phtml
│ │ ├── soil.phtml
│ │ └── traffic.phtml
│ ├── agclimate/
│ │ ├── ames_precip.phtml
│ │ ├── current.phtml
│ │ ├── display.php
│ │ ├── et.phtml
│ │ ├── hist/
│ │ │ ├── daily.php
│ │ │ ├── dailyRequest.php
│ │ │ ├── hourly.php
│ │ │ ├── hourlyRequest.php
│ │ │ ├── inversion.php
│ │ │ └── worker.php
│ │ ├── index.css
│ │ ├── index.js
│ │ ├── index.phtml
│ │ ├── info.phtml
│ │ ├── smts.php
│ │ ├── soilt-prob.php
│ │ ├── soilt.css
│ │ ├── soilt.module.js
│ │ └── soilt.php
│ ├── agweather/
│ │ └── index.php
│ ├── api/
│ │ ├── index.php
│ │ └── proxy_error_handler.py
│ ├── apps.module.js
│ ├── apps.php
│ ├── archive/
│ │ ├── codsat/
│ │ │ ├── index.css
│ │ │ ├── index.module.js
│ │ │ └── index.phtml
│ │ ├── index.php
│ │ ├── mrms.php
│ │ ├── raob/
│ │ │ ├── index.module.js
│ │ │ ├── index.phtml
│ │ │ ├── list.module.js
│ │ │ └── list.phtml
│ │ └── schema.php
│ ├── c/
│ │ ├── c.py
│ │ └── tile.py
│ ├── cache/
│ │ └── tile.py
│ ├── circa2001.phtml
│ ├── clientaccesspolicy.xml
│ ├── climate/
│ │ ├── index.phtml
│ │ ├── records.phtml
│ │ ├── week.phtml
│ │ ├── year.phtml
│ │ └── yesterday.phtml
│ ├── climodat/
│ │ ├── index.css
│ │ ├── index.phtml
│ │ ├── monitor.module.js
│ │ ├── monitor.php
│ │ ├── monthly_ks.txt
│ │ └── yearly_ks.txt
│ ├── cocorahs/
│ │ ├── current.phtml
│ │ ├── index.phtml
│ │ └── obs.phtml
│ ├── content/
│ │ ├── date.php
│ │ └── pil.php
│ ├── cool/
│ │ └── index.phtml
│ ├── cow/
│ │ ├── chart.php
│ │ ├── index.module.js
│ │ ├── index.phtml
│ │ ├── maplsr.phtml
│ │ ├── sbwstats.css
│ │ ├── sbwstats.phtml
│ │ ├── sbwsum.phtml
│ │ └── top10.phtml
│ ├── crossdomain.xml
│ ├── css/
│ │ ├── iastate-iem.css
│ │ ├── iemss.css
│ │ ├── main.css
│ │ └── print.css
│ ├── current/
│ │ ├── all.phtml
│ │ ├── bloop.phtml
│ │ ├── camera.module.js
│ │ ├── camera.phtml
│ │ ├── camlapse/
│ │ │ ├── app.js
│ │ │ ├── index.phtml
│ │ │ ├── kcrg.js
│ │ │ └── kcrg.phtml
│ │ ├── camrad.php
│ │ ├── index.phtml
│ │ ├── isucams.phtml
│ │ ├── live.py
│ │ ├── loop.phtml
│ │ ├── mcview.module.js
│ │ ├── mcview.phtml
│ │ ├── radar.phtml
│ │ ├── sel.phtml
│ │ ├── severe.phtml
│ │ ├── uscrn.phtml
│ │ ├── viewer.css
│ │ ├── viewer.js
│ │ ├── viewer.phtml
│ │ ├── webcam.css
│ │ ├── webcam.js
│ │ └── webcam.php
│ ├── disclaimer.php
│ ├── dm/
│ │ └── index.phtml
│ ├── docs/
│ │ ├── forecast/
│ │ │ └── highs.phtml
│ │ ├── nexrad_mosaic/
│ │ │ ├── index.phtml
│ │ │ └── wmst.html
│ │ ├── radmapserver/
│ │ │ ├── howto-0.rtf
│ │ │ ├── howto-1.html
│ │ │ ├── howto-2.html
│ │ │ ├── howto-3.html
│ │ │ ├── howto-4.html
│ │ │ ├── howto-5.html
│ │ │ ├── howto-6.html
│ │ │ ├── howto-7.html
│ │ │ ├── howto.html
│ │ │ ├── howto.rtf
│ │ │ ├── howto.sgml
│ │ │ ├── howto.txt
│ │ │ └── index.phtml
│ │ ├── unidata2006/
│ │ │ ├── index.phtml
│ │ │ └── wmst.html
│ │ └── unidata2021/
│ │ └── index.phtml
│ ├── explorer/
│ │ ├── index.css
│ │ ├── index.js
│ │ └── index.php
│ ├── feature_rss.php
│ ├── icons/
│ │ └── README
│ ├── iemre/
│ │ ├── daily.py
│ │ ├── hourly.py
│ │ ├── index.phtml
│ │ └── multiday.py
│ ├── index.css
│ ├── index.js
│ ├── index.phtml
│ ├── info/
│ │ ├── contacts.php
│ │ ├── datasets.php
│ │ ├── iem.php
│ │ ├── links.php
│ │ ├── nni.css
│ │ ├── nni.phtml
│ │ ├── nni_images/
│ │ │ └── morisita.xcf
│ │ ├── refs.php
│ │ └── variables.phtml
│ ├── info.php
│ ├── js/
│ │ ├── form2url.module.js
│ │ ├── iastate-iem.js
│ │ ├── iemss.js
│ │ ├── jsani.js
│ │ ├── maptable.js
│ │ ├── olselect-lonlat.js
│ │ ├── olselect.js
│ │ └── select2.js
│ ├── kml/
│ │ ├── network.php
│ │ ├── roadcond.php
│ │ ├── sbw_county_intersect.php
│ │ ├── sbw_exact_time.php
│ │ ├── sbw_interval.php
│ │ ├── sbw_lsrs.php
│ │ ├── timestamp.php
│ │ ├── vtec.php
│ │ └── webcams.php
│ ├── layar/
│ │ └── l3attr.php
│ ├── lsr/
│ │ ├── old.html
│ │ ├── old.phtml
│ │ ├── static.css
│ │ ├── static.js
│ │ └── wfos.js
│ ├── metadata/
│ │ └── xml/
│ │ ├── index.php
│ │ ├── pl.py
│ │ ├── rp_IEM.xml
│ │ ├── sc_CS_03002.xml
│ │ ├── sc_CS_CS215.xml
│ │ ├── sc_CS_CS300.xml
│ │ ├── sc_CS_CS655.xml
│ │ ├── sc_CS_TE525.xml
│ │ ├── sd.py
│ │ ├── sp_CS_03002_WindDirection.xml
│ │ ├── sp_CS_03002_WindSpeed.xml
│ │ ├── sp_CS_CS215_RH.xml
│ │ ├── sp_CS_CS215_Temp.xml
│ │ ├── sp_CS_CS300.xml
│ │ ├── sp_CS_CS655_Moisture.xml
│ │ ├── sp_CS_CS655_Temp.xml
│ │ └── sp_CS_TE525.xml
│ ├── mom.php
│ ├── mos/
│ │ ├── csv.php
│ │ ├── dl.php
│ │ ├── fe.phtml
│ │ ├── index.php
│ │ └── table.phtml
│ ├── my/
│ │ └── current.phtml
│ ├── nstl_flux/
│ │ ├── index.phtml
│ │ ├── plot.php
│ │ ├── plots.phtml
│ │ └── vars.phtml
│ ├── nws/
│ │ ├── ccoop_current.php
│ │ ├── cf6map.js
│ │ ├── cf6map.php
│ │ ├── cf6table.css
│ │ ├── cf6table.module.js
│ │ ├── cf6table.php
│ │ ├── cli-audit/
│ │ │ ├── index.css
│ │ │ ├── index.module.js
│ │ │ └── index.php
│ │ ├── climap.css
│ │ ├── climap.js
│ │ ├── climap.php
│ │ ├── clitable.css
│ │ ├── clitable.module.js
│ │ ├── clitable.php
│ │ ├── coop-cnts.php
│ │ ├── debug_latlon/
│ │ │ ├── generate_plot.py
│ │ │ ├── index.module.js
│ │ │ └── index.phtml
│ │ ├── index.php
│ │ ├── list_tags.css
│ │ ├── list_tags.module.js
│ │ ├── list_tags.php
│ │ ├── list_ugcs.css
│ │ ├── list_ugcs.module.js
│ │ ├── list_ugcs.php
│ │ ├── mcd_top10.phtml
│ │ ├── obs.php
│ │ ├── pds_watches.css
│ │ ├── pds_watches.module.js
│ │ ├── pds_watches.php
│ │ ├── snowfall_6hour.css
│ │ ├── snowfall_6hour.module.js
│ │ ├── snowfall_6hour.php
│ │ ├── spc_outlook_search/
│ │ │ ├── index.css
│ │ │ ├── index.js
│ │ │ └── index.phtml
│ │ ├── spc_top10.phtml
│ │ ├── sps_search/
│ │ │ ├── index.css
│ │ │ ├── index.js
│ │ │ └── index.php
│ │ ├── text.php
│ │ ├── vtec_obs.php
│ │ ├── watches.css
│ │ ├── watches.module.js
│ │ ├── watches.php
│ │ ├── wfo_vtec_count.php
│ │ ├── wpc_national_hilo/
│ │ │ ├── index.css
│ │ │ ├── index.module.js
│ │ │ └── index.php
│ │ └── wpc_outlook_search/
│ │ ├── index.css
│ │ ├── index.js
│ │ └── index.phtml
│ ├── ogc/
│ │ ├── arcgis_wtms.html
│ │ ├── googlemaps_v3.html
│ │ ├── index.phtml
│ │ ├── ol3_example.html
│ │ └── openlayers_example.html
│ ├── one/
│ │ └── README.md
│ ├── onsite/
│ │ ├── birthday/
│ │ │ ├── index.php
│ │ │ └── pals.css
│ │ ├── caucus2004/
│ │ │ ├── fx.txt
│ │ │ └── index.phtml
│ │ ├── features/
│ │ │ ├── cat.php
│ │ │ ├── content.py
│ │ │ ├── past.php
│ │ │ ├── tags/
│ │ │ │ └── index.php
│ │ │ ├── titles.php
│ │ │ └── vote.py
│ │ ├── news.phtml
│ │ └── robins.phtml
│ ├── other/
│ │ ├── current.phtml
│ │ ├── daily_plot.phtml
│ │ ├── index.phtml
│ │ ├── plot_temps.php
│ │ └── plot_winds.php
│ ├── p.php
│ ├── plotting/
│ │ ├── asos/
│ │ │ └── 1station_1min.phtml
│ │ ├── auto/
│ │ │ ├── autoplot.py
│ │ │ ├── gen_qrcode.py
│ │ │ ├── index.css
│ │ │ ├── index.module.js
│ │ │ ├── index.py
│ │ │ ├── js/
│ │ │ │ └── mapselect.js
│ │ │ └── meta.py
│ │ ├── awos/
│ │ │ ├── 1min.php
│ │ │ ├── 1min_P.php
│ │ │ ├── 1min_V.php
│ │ │ └── 1station_1min.php
│ │ ├── coop/
│ │ │ ├── acc.phtml
│ │ │ ├── climate_fe.php
│ │ │ ├── gddprobs.phtml
│ │ │ ├── gspread.phtml
│ │ │ ├── mspread.phtml
│ │ │ ├── precip_cdf_fe.phtml
│ │ │ ├── spread_fe.phtml
│ │ │ ├── threshold_histogram.php
│ │ │ └── threshold_histogram_fe.phtml
│ │ ├── gs/
│ │ │ └── fe.phtml
│ │ ├── index.php
│ │ ├── isumet/
│ │ │ ├── 1min.php
│ │ │ ├── 1min_P.php
│ │ │ ├── 1min_V.php
│ │ │ ├── 1min_inside.php
│ │ │ ├── 1station_1min.phtml
│ │ │ ├── ams2.phtml
│ │ │ ├── rh.php
│ │ │ └── srad.php
│ │ ├── mesoeast/
│ │ │ ├── 1min.php
│ │ │ ├── 1min_V.php
│ │ │ ├── 1min_inside.php
│ │ │ ├── baro.php
│ │ │ ├── dailyrain.php
│ │ │ ├── index.phtml
│ │ │ ├── rh.php
│ │ │ └── temp_rh.php
│ │ ├── mesonorth/
│ │ │ ├── 1min_ot.php
│ │ │ ├── battery.php
│ │ │ └── ot_10min.phtml
│ │ ├── month/
│ │ │ ├── rainfall.css
│ │ │ ├── rainfall.phtml
│ │ │ └── rainfall_plot.php
│ │ ├── rwis/
│ │ │ ├── SFtemps.php
│ │ │ ├── plot_soil.php
│ │ │ ├── plot_traffic.php
│ │ │ ├── sf_fe.css
│ │ │ └── sf_fe.php
│ │ ├── scan/
│ │ │ ├── index.phtml
│ │ │ ├── precip.php
│ │ │ ├── radn5temps.php
│ │ │ ├── radn5temps2.php
│ │ │ ├── smv.php
│ │ │ └── winds.php
│ │ └── snet/
│ │ ├── 1min_P.php
│ │ ├── 1min_T.php
│ │ ├── 1min_V.php
│ │ ├── 1station_1min.php
│ │ ├── data/
│ │ │ ├── SAMI4_051112.txt
│ │ │ ├── SBOI4_051112.txt
│ │ │ ├── SCHI4_060622.txt
│ │ │ ├── SINI4_071002.txt
│ │ │ ├── SMDI4_051112.txt
│ │ │ ├── SPKI4_071002.txt
│ │ │ └── STQI4_070506.txt
│ │ ├── dataformat.php
│ │ ├── indy_bore.php
│ │ ├── polk_bore.php
│ │ └── tama_bore.php
│ ├── projects/
│ │ ├── iao/
│ │ │ ├── analog_download.php
│ │ │ ├── iao_data_request_form.xlsx
│ │ │ ├── index.css
│ │ │ ├── index.php
│ │ │ ├── sodar_download.php
│ │ │ └── surface_download.php
│ │ ├── iembot/
│ │ │ ├── channels.html
│ │ │ ├── index.js
│ │ │ ├── index.phtml
│ │ │ ├── mastodon/
│ │ │ │ └── index.py
│ │ │ ├── public.phtml
│ │ │ ├── slack/
│ │ │ │ └── index.phtml
│ │ │ └── twitter.php
│ │ ├── index.phtml
│ │ └── webcam.php
│ ├── raccoon/
│ │ ├── index.phtml
│ │ └── wait.phtml
│ ├── radmapserver/
│ │ ├── gisdata/
│ │ │ ├── radar.tif
│ │ │ ├── radar.wld
│ │ │ ├── states.dbf
│ │ │ ├── states.prj
│ │ │ ├── states.sbn
│ │ │ ├── states.sbx
│ │ │ ├── states.shp
│ │ │ └── states.shx
│ │ └── radmapserver.html
│ ├── rainfall/
│ │ ├── bypoint.phtml
│ │ ├── dshape.php
│ │ ├── index.phtml
│ │ ├── mrms2img.py
│ │ ├── obhour-json.php
│ │ ├── obhour.css
│ │ ├── obhour.module.js
│ │ └── obhour.phtml
│ ├── request/
│ │ ├── asos/
│ │ │ ├── 1min.phtml
│ │ │ ├── 1min_dl.php
│ │ │ ├── csv.php
│ │ │ └── hourlyprecip.phtml
│ │ ├── awos/
│ │ │ ├── 1min.php
│ │ │ └── 1min_dl.php
│ │ ├── coop/
│ │ │ ├── dl.php
│ │ │ ├── fe.phtml
│ │ │ ├── obs-dl.php
│ │ │ └── obs-fe.phtml
│ │ ├── daily.css
│ │ ├── daily.phtml
│ │ ├── dcp/
│ │ │ └── fe.phtml
│ │ ├── download.css
│ │ ├── download.phtml
│ │ ├── gis/
│ │ │ ├── awc_gairmets.phtml
│ │ │ ├── awc_sigmets.phtml
│ │ │ ├── cwas.phtml
│ │ │ ├── lsrs.phtml
│ │ │ ├── misc.phtml
│ │ │ ├── n0q2gtiff.php
│ │ │ ├── n0r2gtiff.php
│ │ │ ├── nexrad_storm_attrs.module.js
│ │ │ ├── nexrad_storm_attrs.php
│ │ │ ├── outlooks.phtml
│ │ │ ├── pireps.module.js
│ │ │ ├── pireps.php
│ │ │ ├── spc_mcd.phtml
│ │ │ ├── spc_outlooks.phtml
│ │ │ ├── spc_watch.phtml
│ │ │ ├── sps.phtml
│ │ │ ├── watchwarn.module.js
│ │ │ ├── watchwarn.phtml
│ │ │ └── wpc_mpd.phtml
│ │ ├── grx/
│ │ │ ├── asos.php
│ │ │ ├── iadot_trucks.py
│ │ │ ├── index.phtml
│ │ │ ├── l3attr.py
│ │ │ ├── roadcond.php
│ │ │ ├── rwis.php
│ │ │ ├── sbw.php
│ │ │ ├── time_mot_loc.py
│ │ │ ├── vtec.php
│ │ │ ├── watch_by_county.php
│ │ │ └── webcams.php
│ │ ├── hml.php
│ │ ├── hourlyprecip.phtml
│ │ ├── ldm.php
│ │ ├── maxcsv.php
│ │ ├── maxcsv.py
│ │ ├── rwis/
│ │ │ ├── fe.phtml
│ │ │ ├── soil.phtml
│ │ │ └── traffic.phtml
│ │ ├── scan/
│ │ │ └── fe.phtml
│ │ ├── taf.css
│ │ ├── taf.php
│ │ ├── tempwind_aloft.php
│ │ ├── uscrn.php
│ │ └── wmo_bufr_srf.php
│ ├── river/
│ │ └── index.php
│ ├── roads/
│ │ ├── gis.phtml
│ │ ├── history.css
│ │ ├── history.module.js
│ │ ├── history.phtml
│ │ ├── iem.php
│ │ ├── index.phtml
│ │ ├── maps.css
│ │ ├── maps.js
│ │ ├── maps.phtml
│ │ ├── rc.phtml
│ │ └── tv.php
│ ├── robots.txt
│ ├── rss.php
│ ├── scan/
│ │ ├── current.phtml
│ │ └── index.phtml
│ ├── schoolnet/
│ │ ├── alerts/
│ │ │ └── index.phtml
│ │ ├── dl/
│ │ │ ├── index.php
│ │ │ ├── params.php
│ │ │ └── worker.php
│ │ └── index.php
│ ├── sites/
│ │ ├── cal.phtml
│ │ ├── current.php
│ │ ├── dyn_windrose.module.js
│ │ ├── dyn_windrose.phtml
│ │ ├── hist.module.js
│ │ ├── hist.phtml
│ │ ├── locate.php
│ │ ├── meteo.php
│ │ ├── monthlysum.module.js
│ │ ├── monthlysum.php
│ │ ├── neighbors.php
│ │ ├── networks.php
│ │ ├── new-rss.php
│ │ ├── obhistory.css
│ │ ├── obhistory.module.js
│ │ ├── obhistory.php
│ │ ├── pics.php
│ │ ├── porclimo.php
│ │ ├── scp.php
│ │ ├── site.js
│ │ ├── site.php
│ │ ├── taf.module.js
│ │ ├── taf.php
│ │ ├── test.py
│ │ ├── windrose.css
│ │ ├── windrose.module.js
│ │ └── windrose.phtml
│ ├── smos/
│ │ ├── index.php
│ │ └── smosmap.js
│ ├── timemachine/
│ │ ├── index.css
│ │ ├── index.js
│ │ └── index.php
│ ├── topics/
│ │ ├── first_freeze.phtml
│ │ ├── hardiness/
│ │ │ └── index.php
│ │ └── pests/
│ │ ├── index.css
│ │ ├── index.module.js
│ │ └── index.php
│ ├── uscrn/
│ │ └── index.phtml
│ ├── vtec/
│ │ ├── emergencies.css
│ │ ├── emergencies.js
│ │ ├── emergencies.php
│ │ ├── events.css
│ │ ├── events.module.js
│ │ ├── events.php
│ │ ├── f.py
│ │ ├── index.py
│ │ ├── json-text.php
│ │ ├── maxetn.css
│ │ ├── maxetn.module.js
│ │ ├── maxetn.php
│ │ ├── mobile.php
│ │ ├── pds.css
│ │ ├── pds.module.js
│ │ ├── pds.php
│ │ ├── search.css
│ │ ├── search.js
│ │ ├── search.php
│ │ ├── wfos.js
│ │ └── yearly_counts.php
│ ├── wfs/
│ │ └── ww.php
│ └── wx/
│ └── afos/
│ ├── bottom.php
│ ├── index.css
│ ├── index.module.js
│ ├── index.phtml
│ ├── list.css
│ ├── list.module.js
│ ├── list.phtml
│ ├── old.phtml
│ ├── p.css
│ ├── p.module.js
│ ├── p.php
│ ├── recent.php
│ ├── retreive.php
│ ├── text2png.py
│ └── top.php
├── include/
│ ├── agclimate_boxinc.phtml
│ ├── cameras.inc.php
│ ├── composer.json
│ ├── cow_worker.php
│ ├── database.inc.php
│ ├── dbase.stub.php
│ ├── forms.php
│ ├── generators.php
│ ├── iemmap.php
│ ├── iemprop.php
│ ├── jpgraph/
│ │ ├── README
│ │ ├── flag_mapping
│ │ ├── fonts/
│ │ │ ├── FF_FONT0-Bold.gdf
│ │ │ ├── FF_FONT0.gdf
│ │ │ ├── FF_FONT1-Bold.gdf
│ │ │ ├── FF_FONT1.gdf
│ │ │ ├── FF_FONT2-Bold.gdf
│ │ │ └── FF_FONT2.gdf
│ │ ├── gd_image.inc.php
│ │ ├── imageSmoothArc.php
│ │ ├── imgdata_balls.inc.php
│ │ ├── imgdata_bevels.inc.php
│ │ ├── imgdata_diamonds.inc.php
│ │ ├── imgdata_pushpins.inc.php
│ │ ├── imgdata_squares.inc.php
│ │ ├── imgdata_stars.inc.php
│ │ ├── jpg-config.inc.php
│ │ ├── jpgraph.php
│ │ ├── jpgraph_antispam-digits.php
│ │ ├── jpgraph_antispam.php
│ │ ├── jpgraph_bar.php
│ │ ├── jpgraph_canvas.php
│ │ ├── jpgraph_canvtools.php
│ │ ├── jpgraph_contour.php
│ │ ├── jpgraph_date.php
│ │ ├── jpgraph_errhandler.inc.php
│ │ ├── jpgraph_error.php
│ │ ├── jpgraph_flags.php
│ │ ├── jpgraph_gantt.php
│ │ ├── jpgraph_gb2312.php
│ │ ├── jpgraph_gradient.php
│ │ ├── jpgraph_iconplot.php
│ │ ├── jpgraph_imgtrans.php
│ │ ├── jpgraph_led.php
│ │ ├── jpgraph_legend.inc.php
│ │ ├── jpgraph_line.php
│ │ ├── jpgraph_log.php
│ │ ├── jpgraph_meshinterpolate.inc.php
│ │ ├── jpgraph_mgraph.php
│ │ ├── jpgraph_pie.php
│ │ ├── jpgraph_pie3d.php
│ │ ├── jpgraph_plotband.php
│ │ ├── jpgraph_plotline.php
│ │ ├── jpgraph_plotmark.inc.php
│ │ ├── jpgraph_polar.php
│ │ ├── jpgraph_radar.php
│ │ ├── jpgraph_regstat.php
│ │ ├── jpgraph_rgb.inc.php
│ │ ├── jpgraph_scatter.php
│ │ ├── jpgraph_stock.php
│ │ ├── jpgraph_table.php
│ │ ├── jpgraph_text.inc.php
│ │ ├── jpgraph_theme.inc.php
│ │ ├── jpgraph_ttf.inc.php
│ │ ├── jpgraph_utils.inc.php
│ │ ├── jpgraph_windrose.php
│ │ ├── lang/
│ │ │ ├── de.inc.php
│ │ │ ├── en.inc.php
│ │ │ └── prod.inc.php
│ │ └── themes/
│ │ ├── AquaTheme.class.php
│ │ ├── GreenTheme.class.php
│ │ ├── OceanTheme.class.php
│ │ ├── OrangeTheme.class.php
│ │ ├── PastelTheme.class.php
│ │ ├── RoseTheme.class.php
│ │ ├── SoftyTheme.class.php
│ │ ├── UniversalTheme.class.php
│ │ └── VividTheme.class.php
│ ├── memcache.php
│ ├── mesoeast.php
│ ├── mlib.php
│ ├── mos_lib.php
│ ├── myview.php
│ ├── network.php
│ ├── reference.php
│ ├── rview_lib.php
│ ├── sites.php
│ ├── station.php
│ ├── templates/
│ │ ├── footer.phtml
│ │ ├── full.phtml
│ │ ├── header.phtml
│ │ ├── navbar.phtml
│ │ ├── single.phtml
│ │ ├── sitebar.phtml
│ │ ├── sites.phtml
│ │ └── sortables.phtml
│ ├── throttle.php
│ ├── vendor/
│ │ ├── abraham/
│ │ │ └── twitteroauth/
│ │ │ ├── LICENSE.md
│ │ │ ├── autoload.php
│ │ │ ├── composer.json
│ │ │ └── src/
│ │ │ ├── Config.php
│ │ │ ├── Consumer.php
│ │ │ ├── HmacSha1.php
│ │ │ ├── Request.php
│ │ │ ├── Response.php
│ │ │ ├── SignatureMethod.php
│ │ │ ├── Token.php
│ │ │ ├── TwitterOAuth.php
│ │ │ ├── TwitterOAuthException.php
│ │ │ ├── Util/
│ │ │ │ └── JsonDecoder.php
│ │ │ └── Util.php
│ │ ├── autoload.php
│ │ ├── composer/
│ │ │ ├── ClassLoader.php
│ │ │ ├── InstalledVersions.php
│ │ │ ├── LICENSE
│ │ │ ├── autoload_classmap.php
│ │ │ ├── autoload_namespaces.php
│ │ │ ├── autoload_psr4.php
│ │ │ ├── autoload_real.php
│ │ │ ├── autoload_static.php
│ │ │ ├── ca-bundle/
│ │ │ │ ├── LICENSE
│ │ │ │ ├── README.md
│ │ │ │ ├── composer.json
│ │ │ │ ├── res/
│ │ │ │ │ └── cacert.pem
│ │ │ │ └── src/
│ │ │ │ └── CaBundle.php
│ │ │ ├── installed.json
│ │ │ ├── installed.php
│ │ │ └── platform_check.php
│ │ ├── erusev/
│ │ │ └── parsedown/
│ │ │ ├── LICENSE.txt
│ │ │ ├── Parsedown.php
│ │ │ ├── README.md
│ │ │ └── composer.json
│ │ └── mapscript.php
│ └── warnings_plot.php
├── package.json
├── pip_requirements.txt
├── pylib/
│ └── iemweb/
│ ├── GIS/
│ │ ├── __init__.py
│ │ └── tiff/
│ │ ├── __init__.py
│ │ └── index.py
│ ├── __init__.py
│ ├── afos/
│ │ ├── __init__.py
│ │ └── retrieve.py
│ ├── agclimate/
│ │ ├── __init__.py
│ │ ├── ames_precip.py
│ │ ├── isusm.py
│ │ └── nmp_csv.py
│ ├── autoplot/
│ │ ├── __init__.py
│ │ ├── autoplot.py
│ │ ├── barchart.py
│ │ ├── gen_qrcode.py
│ │ ├── index.py
│ │ ├── meta.py
│ │ ├── scripts/
│ │ │ ├── __init__.py
│ │ │ ├── p1.py
│ │ │ ├── p10.py
│ │ │ ├── p11.py
│ │ │ ├── p12.py
│ │ │ ├── p13.py
│ │ │ ├── p14.py
│ │ │ ├── p15.py
│ │ │ ├── p16.py
│ │ │ ├── p17.py
│ │ │ ├── p18.py
│ │ │ ├── p19.py
│ │ │ ├── p2.py
│ │ │ ├── p20.py
│ │ │ ├── p21.py
│ │ │ ├── p22.py
│ │ │ ├── p23.py
│ │ │ ├── p24.py
│ │ │ ├── p25.py
│ │ │ ├── p26.py
│ │ │ ├── p27.py
│ │ │ ├── p28.py
│ │ │ ├── p29.py
│ │ │ ├── p3.py
│ │ │ ├── p30.py
│ │ │ ├── p31.py
│ │ │ ├── p32.py
│ │ │ ├── p33.py
│ │ │ ├── p34.py
│ │ │ ├── p35.py
│ │ │ ├── p36.py
│ │ │ ├── p37.py
│ │ │ ├── p38.py
│ │ │ ├── p39.py
│ │ │ ├── p4.py
│ │ │ ├── p40.py
│ │ │ ├── p41.py
│ │ │ ├── p42.py
│ │ │ ├── p43.py
│ │ │ ├── p44.py
│ │ │ ├── p45.py
│ │ │ ├── p46.py
│ │ │ ├── p47.py
│ │ │ ├── p48.py
│ │ │ ├── p49.py
│ │ │ ├── p5.py
│ │ │ ├── p50.py
│ │ │ ├── p51.py
│ │ │ ├── p52.py
│ │ │ ├── p53.py
│ │ │ ├── p54.py
│ │ │ ├── p55.py
│ │ │ ├── p56.py
│ │ │ ├── p57.py
│ │ │ ├── p58.py
│ │ │ ├── p59.py
│ │ │ ├── p6.py
│ │ │ ├── p60.py
│ │ │ ├── p61.py
│ │ │ ├── p62.py
│ │ │ ├── p63.py
│ │ │ ├── p64.py
│ │ │ ├── p65.py
│ │ │ ├── p66.py
│ │ │ ├── p67.py
│ │ │ ├── p68.py
│ │ │ ├── p69.py
│ │ │ ├── p7.py
│ │ │ ├── p70.py
│ │ │ ├── p71.py
│ │ │ ├── p72.py
│ │ │ ├── p73.py
│ │ │ ├── p74.py
│ │ │ ├── p75.py
│ │ │ ├── p76.py
│ │ │ ├── p77.py
│ │ │ ├── p78.py
│ │ │ ├── p79.py
│ │ │ ├── p8.py
│ │ │ ├── p80.py
│ │ │ ├── p81.py
│ │ │ ├── p82.py
│ │ │ ├── p83.py
│ │ │ ├── p84.py
│ │ │ ├── p85.py
│ │ │ ├── p86.py
│ │ │ ├── p87.py
│ │ │ ├── p88.py
│ │ │ ├── p89.py
│ │ │ ├── p9.py
│ │ │ ├── p90.py
│ │ │ ├── p91.py
│ │ │ ├── p92.py
│ │ │ ├── p93.py
│ │ │ ├── p94.py
│ │ │ ├── p95.py
│ │ │ ├── p96.py
│ │ │ ├── p97.py
│ │ │ ├── p98.py
│ │ │ └── p99.py
│ │ ├── scripts100/
│ │ │ ├── __init__.py
│ │ │ ├── p100.py
│ │ │ ├── p101.py
│ │ │ ├── p102.py
│ │ │ ├── p103.py
│ │ │ ├── p104.py
│ │ │ ├── p105.py
│ │ │ ├── p106.py
│ │ │ ├── p107.py
│ │ │ ├── p108.py
│ │ │ ├── p109.py
│ │ │ ├── p110.py
│ │ │ ├── p111.py
│ │ │ ├── p112.py
│ │ │ ├── p113.py
│ │ │ ├── p114.py
│ │ │ ├── p115.py
│ │ │ ├── p116.py
│ │ │ ├── p117.py
│ │ │ ├── p118.py
│ │ │ ├── p119.py
│ │ │ ├── p120.py
│ │ │ ├── p121.py
│ │ │ ├── p122.py
│ │ │ ├── p123.py
│ │ │ ├── p124.py
│ │ │ ├── p125.py
│ │ │ ├── p126.py
│ │ │ ├── p127.py
│ │ │ ├── p128.py
│ │ │ ├── p129.py
│ │ │ ├── p130.py
│ │ │ ├── p131.py
│ │ │ ├── p132.py
│ │ │ ├── p133.py
│ │ │ ├── p134.py
│ │ │ ├── p135.py
│ │ │ ├── p136.py
│ │ │ ├── p137.py
│ │ │ ├── p138.py
│ │ │ ├── p139.py
│ │ │ ├── p140.py
│ │ │ ├── p141.py
│ │ │ ├── p142.py
│ │ │ ├── p143.py
│ │ │ ├── p144.py
│ │ │ ├── p145.py
│ │ │ ├── p146.py
│ │ │ ├── p147.py
│ │ │ ├── p148.py
│ │ │ ├── p149.py
│ │ │ ├── p150.py
│ │ │ ├── p151.py
│ │ │ ├── p152.py
│ │ │ ├── p153.py
│ │ │ ├── p154.py
│ │ │ ├── p155.py
│ │ │ ├── p156.py
│ │ │ ├── p157.py
│ │ │ ├── p158.py
│ │ │ ├── p159.py
│ │ │ ├── p160.py
│ │ │ ├── p161.py
│ │ │ ├── p162.py
│ │ │ ├── p163.py
│ │ │ ├── p164.py
│ │ │ ├── p165.py
│ │ │ ├── p166.py
│ │ │ ├── p167.py
│ │ │ ├── p168.py
│ │ │ ├── p169.py
│ │ │ ├── p170.py
│ │ │ ├── p171.py
│ │ │ ├── p172.py
│ │ │ ├── p173.py
│ │ │ ├── p174.py
│ │ │ ├── p175.py
│ │ │ ├── p176.py
│ │ │ ├── p177.py
│ │ │ ├── p178.py
│ │ │ ├── p179.py
│ │ │ ├── p180.py
│ │ │ ├── p181.py
│ │ │ ├── p182.py
│ │ │ ├── p183.py
│ │ │ ├── p184.py
│ │ │ ├── p185.py
│ │ │ ├── p186.py
│ │ │ ├── p187.py
│ │ │ ├── p188.py
│ │ │ ├── p189.py
│ │ │ ├── p190.py
│ │ │ ├── p191.py
│ │ │ ├── p192.py
│ │ │ ├── p193.py
│ │ │ ├── p194.py
│ │ │ ├── p195.py
│ │ │ ├── p196.py
│ │ │ ├── p197.py
│ │ │ ├── p198.py
│ │ │ └── p199.py
│ │ └── scripts200/
│ │ ├── __init__.py
│ │ ├── p200.py
│ │ ├── p201.py
│ │ ├── p202.py
│ │ ├── p203.py
│ │ ├── p204.py
│ │ ├── p205.py
│ │ ├── p206.py
│ │ ├── p207.py
│ │ ├── p208.py
│ │ ├── p209.py
│ │ ├── p210.py
│ │ ├── p211.py
│ │ ├── p212.py
│ │ ├── p213.py
│ │ ├── p214.py
│ │ ├── p215.py
│ │ ├── p216.py
│ │ ├── p217.py
│ │ ├── p218.py
│ │ ├── p219.py
│ │ ├── p220.py
│ │ ├── p221.py
│ │ ├── p222.py
│ │ ├── p223.py
│ │ ├── p224.py
│ │ ├── p225.py
│ │ ├── p226.py
│ │ ├── p227.py
│ │ ├── p228.py
│ │ ├── p229.py
│ │ ├── p230.py
│ │ ├── p231.py
│ │ ├── p232.py
│ │ ├── p233.py
│ │ ├── p234.py
│ │ ├── p235.py
│ │ ├── p236.py
│ │ ├── p237.py
│ │ ├── p238.py
│ │ ├── p239.py
│ │ ├── p240.py
│ │ ├── p241.py
│ │ ├── p242.py
│ │ ├── p243.py
│ │ ├── p244.py
│ │ ├── p245.py
│ │ ├── p246.py
│ │ ├── p247.py
│ │ ├── p248.py
│ │ ├── p249.py
│ │ ├── p250.py
│ │ ├── p251.py
│ │ ├── p252.py
│ │ ├── p253.py
│ │ ├── p254.py
│ │ ├── p255.py
│ │ ├── p256.py
│ │ ├── p257.py
│ │ ├── p258.py
│ │ ├── p259.py
│ │ ├── p260.py
│ │ ├── p261.py
│ │ └── p262.py
│ ├── c/
│ │ ├── __init__.py
│ │ ├── tile.py
│ │ └── tilecache.cfg
│ ├── cache/
│ │ ├── __init__.py
│ │ ├── tile.py
│ │ └── tilecache.cfg
│ ├── climate/
│ │ ├── __init__.py
│ │ └── orc.py
│ ├── current/
│ │ ├── __init__.py
│ │ └── live.py
│ ├── dispatch.py
│ ├── fields.py
│ ├── geocoder.py
│ ├── geojson/
│ │ ├── __init__.py
│ │ ├── agclimate.py
│ │ ├── cf6.py
│ │ ├── cli.py
│ │ ├── climodat_dayclimo.py
│ │ ├── convective_sigmet.py
│ │ ├── coopobs.py
│ │ ├── lsr.py
│ │ ├── network.py
│ │ ├── networks.py
│ │ ├── nexrad_attr.py
│ │ ├── recent_metar.py
│ │ ├── sbw.py
│ │ ├── sbw_county_intersect.py
│ │ ├── seven_am.py
│ │ ├── sps.py
│ │ ├── station_neighbors.py
│ │ ├── usdm.py
│ │ ├── vtec_event.py
│ │ ├── webcam.py
│ │ └── winter_roads.py
│ ├── getweather.py
│ ├── iemre/
│ │ ├── __init__.py
│ │ ├── daily.py
│ │ ├── hourly.py
│ │ └── multiday.py
│ ├── json/
│ │ ├── __init__.py
│ │ ├── cf6.py
│ │ ├── cli.py
│ │ ├── cli_audit.py
│ │ ├── climodat_dd.py
│ │ ├── climodat_stclimo.py
│ │ ├── current.py
│ │ ├── dcp_vars.py
│ │ ├── ibw_tags.py
│ │ ├── mcd_bysize.py
│ │ ├── network.py
│ │ ├── nwstext.py
│ │ ├── nwstext_center_date.py
│ │ ├── nwstext_search.py
│ │ ├── outlook_progression.py
│ │ ├── prism.py
│ │ ├── products.py
│ │ ├── radar.py
│ │ ├── raob.py
│ │ ├── reference.py
│ │ ├── ridge_current.py
│ │ ├── sbw_by_point.py
│ │ ├── snowfall_observations_v2.py
│ │ ├── spc_bysize.py
│ │ ├── spcmcd.py
│ │ ├── spcoutlook.py
│ │ ├── spcwatch.py
│ │ ├── sps_by_point.py
│ │ ├── stage4.py
│ │ ├── state_ugc.py
│ │ ├── stations.py
│ │ ├── tms.py
│ │ ├── vtec_emergencies.py
│ │ ├── vtec_event.py
│ │ ├── vtec_events.py
│ │ ├── vtec_events_bypoint.py
│ │ ├── vtec_events_bystate.py
│ │ ├── vtec_events_byugc.py
│ │ ├── vtec_events_bywfo.py
│ │ ├── vtec_max_etn.py
│ │ ├── vtec_pds.py
│ │ ├── watches.py
│ │ ├── webcam.py
│ │ ├── webcams.py
│ │ ├── wpcmpd.py
│ │ └── wpcoutlook.py
│ ├── metadata/
│ │ ├── __init__.py
│ │ └── xml/
│ │ ├── __init__.py
│ │ ├── pl.py
│ │ └── sd.py
│ ├── mlib.py
│ ├── mywindrose.py
│ ├── nws/
│ │ ├── __init__.py
│ │ └── debug_latlon/
│ │ ├── __init__.py
│ │ └── generate_plot.py
│ ├── onsite/
│ │ ├── __init__.py
│ │ └── features/
│ │ ├── __init__.py
│ │ ├── content.py
│ │ └── vote.py
│ ├── precip/
│ │ ├── __init__.py
│ │ ├── catAZOS.py
│ │ └── catSNET.py
│ ├── projects/
│ │ ├── __init__.py
│ │ └── iembot/
│ │ ├── __init__.py
│ │ └── mastodon/
│ │ ├── __init__.py
│ │ └── index.py
│ ├── proxy_error_handler.py
│ ├── rainfall/
│ │ ├── __init__.py
│ │ └── mrms2img.py
│ ├── request/
│ │ ├── __init__.py
│ │ ├── asos.py
│ │ ├── asos1min.py
│ │ ├── coop.py
│ │ ├── coopobs.py
│ │ ├── daily.py
│ │ ├── feel.py
│ │ ├── gis/
│ │ │ ├── __init__.py
│ │ │ ├── awc_gairmets.py
│ │ │ ├── cwas.py
│ │ │ ├── lsr.py
│ │ │ ├── misc.py
│ │ │ ├── nexrad_storm_attrs.py
│ │ │ ├── pireps.py
│ │ │ ├── sigmets.py
│ │ │ ├── spc_mcd.py
│ │ │ ├── spc_outlooks.py
│ │ │ ├── spc_watch.py
│ │ │ ├── sps.py
│ │ │ ├── watch_by_county.py
│ │ │ ├── watchwarn.py
│ │ │ └── wpc_mpd.py
│ │ ├── grx/
│ │ │ ├── __init__.py
│ │ │ ├── iadot_trucks.py
│ │ │ ├── l3attr.py
│ │ │ └── time_mot_loc.py
│ │ ├── grx_rings.py
│ │ ├── hads.py
│ │ ├── hml.py
│ │ ├── hourlyprecip.py
│ │ ├── isusm.py
│ │ ├── maxcsv.py
│ │ ├── metars.py
│ │ ├── mos.py
│ │ ├── nass_iowa.py
│ │ ├── nlaeflux.py
│ │ ├── normals.py
│ │ ├── other.py
│ │ ├── purpleair.py
│ │ ├── raob.py
│ │ ├── raster2netcdf.py
│ │ ├── rwis.py
│ │ ├── scan.py
│ │ ├── scp.py
│ │ ├── smos.py
│ │ ├── ss.py
│ │ ├── taf.py
│ │ ├── talltowers.py
│ │ ├── tempwind_aloft.py
│ │ ├── uscrn.py
│ │ └── wmo_bufr_srf.py
│ ├── search.py
│ ├── sites/
│ │ ├── __init__.py
│ │ └── test.py
│ ├── tilecache_dispatch.py
│ ├── util.py
│ ├── vtec/
│ │ ├── __init__.py
│ │ ├── f.py
│ │ └── index.py
│ └── wx/
│ ├── __init__.py
│ └── afos/
│ ├── __init__.py
│ └── text2png.py
├── pyproject.toml
├── scripts/
│ ├── 00z/
│ │ ├── asos_high.py
│ │ └── generate_rtp.py
│ ├── 12z/
│ │ ├── asos_low.py
│ │ └── generate_rtp.py
│ ├── GIS/
│ │ ├── 24h_lsr.py
│ │ ├── attribute2shape.py
│ │ ├── current_ww.shp.xml
│ │ └── wwa2shp.py
│ ├── RUN_0Z.sh
│ ├── RUN_0Z_ERA5LAND.sh
│ ├── RUN_10MIN.sh
│ ├── RUN_10_AFTER.sh
│ ├── RUN_12Z.sh
│ ├── RUN_1MIN.sh
│ ├── RUN_20MIN.sh
│ ├── RUN_20_AFTER.sh
│ ├── RUN_2AM.sh
│ ├── RUN_40_AFTER.sh
│ ├── RUN_50_AFTER.sh
│ ├── RUN_59_AFTER.sh
│ ├── RUN_5MIN.sh
│ ├── RUN_CLIMODAT_STATE.sh
│ ├── RUN_COOP.sh
│ ├── RUN_HRRR_REF.sh
│ ├── RUN_MIDNIGHT.sh
│ ├── RUN_NOON.sh
│ ├── RUN_STAGE4.sh
│ ├── RUN_SUMMARY.sh
│ ├── asos/
│ │ ├── adjust_report_type.py
│ │ ├── cf6_to_iemaccess.py
│ │ ├── iem_scraper_example.py
│ │ ├── iem_scraper_example2.py
│ │ └── use_acis.py
│ ├── cache/
│ │ ├── download_cpc.sh
│ │ ├── midwest_winter_roads.py
│ │ ├── nws_wawa_archive.py
│ │ └── warn_cache.py
│ ├── climate/
│ │ ├── today_hilo.py
│ │ └── today_rec_hilo.py
│ ├── climodat/
│ │ ├── avg_temp.py
│ │ ├── check_database.py
│ │ ├── compute4regions.py
│ │ ├── compute_climate.py
│ │ ├── daily_estimator.py
│ │ ├── era5land_extract.py
│ │ ├── estimate_missing.py
│ │ ├── hrrr_solarrad.py
│ │ ├── ks_monthly.py
│ │ ├── ks_yearly.py
│ │ ├── merra_solarrad.py
│ │ ├── narr_solarrad.py
│ │ ├── nldas_extract.py
│ │ ├── power_extract.py
│ │ ├── precip_days.py
│ │ ├── run.sh
│ │ ├── sync_coop_updates.py
│ │ ├── use_acis.py
│ │ └── yearly_precip.py
│ ├── coop/
│ │ ├── PREC.sh
│ │ ├── cfs_extract.py
│ │ ├── data.desc
│ │ ├── day_precip.py
│ │ ├── email_rr3_to_harry.py
│ │ ├── extract_coop_obs.py
│ │ ├── extract_idhs.py
│ │ ├── first_guess_for_harry.py
│ │ ├── month_precip.py
│ │ ├── ndfd_extract.py
│ │ ├── plot_coop.py
│ │ ├── plot_precip_12z.py
│ │ ├── today_precip.py
│ │ ├── use_acis.py
│ │ └── year_precip.py
│ ├── crontab
│ ├── current/
│ │ ├── ifc_today_total.py
│ │ ├── lsr_snow_mapper.py
│ │ ├── mrms_today_total.py
│ │ ├── plot_hilo.py
│ │ ├── q3_xhour.py
│ │ ├── rwis_station.py
│ │ ├── stage4_hourly.py
│ │ ├── stage4_today_total.py
│ │ ├── stage4_xhour.py
│ │ ├── temperature.py
│ │ ├── today_gust.py
│ │ ├── today_high.py
│ │ ├── today_min_windchill.py
│ │ ├── today_precip.py
│ │ └── vsby.py
│ ├── dailyb/
│ │ ├── spammer.py
│ │ └── wwa.py
│ ├── dbutil/
│ │ ├── SYNC_STATIONS.sh
│ │ ├── add_iem_data_entry.py
│ │ ├── asos2archive.py
│ │ ├── clean_afos.py
│ │ ├── clean_mos.py
│ │ ├── clean_telemetry.py
│ │ ├── clean_unknown_hads.py
│ │ ├── compute_alldata_sts.py
│ │ ├── compute_climate_sts.py
│ │ ├── compute_cocorahs_sts.py
│ │ ├── compute_coop_sts.py
│ │ ├── compute_hads_sts.py
│ │ ├── compute_isusm_sts.py
│ │ ├── compute_network_extent.py
│ │ ├── compute_rwis_sts.py
│ │ ├── delete_station.py
│ │ ├── hads_delete_dups.py
│ │ ├── mine_autoplot.py
│ │ ├── network_timezone.py
│ │ ├── rwis2archive.py
│ │ ├── set_attribute_phour.py
│ │ ├── set_climate.py
│ │ ├── set_county.py
│ │ ├── set_elevation.py
│ │ ├── set_timezone.py
│ │ ├── set_wfo.py
│ │ ├── sync_stations.py
│ │ ├── unknown_stations.py
│ │ ├── uscrn.py
│ │ ├── xcheck_SFQ.py
│ │ └── xcheck_madis.py
│ ├── dl/
│ │ ├── archive_composite.py
│ │ ├── download_cfs.py
│ │ ├── download_ffg.py
│ │ ├── download_gfs.py
│ │ ├── download_hrrr_rad.py
│ │ ├── download_hrrr_tsoil.py
│ │ ├── download_imerg.py
│ │ ├── download_nam.py
│ │ ├── download_narr.py
│ │ ├── download_ndfd.py
│ │ ├── download_rtma_ru.py
│ │ ├── fetch_merra.py
│ │ ├── fetch_power.py
│ │ ├── ncep_stage4.py
│ │ └── radar_composite.py
│ ├── era5/
│ │ ├── fetch_era5.py
│ │ └── init_hourly.py
│ ├── gfs/
│ │ ├── gfs2csv.py
│ │ ├── gfs2iemre.py
│ │ └── gfs_4inch.py
│ ├── gs/
│ │ └── plot_gdd.py
│ ├── hads/
│ │ ├── assign_has_hml.py
│ │ ├── compute_hads_pday.py
│ │ ├── compute_hads_phour.py
│ │ ├── dedup_hml_forecasts.py
│ │ ├── process_hads_inbound.py
│ │ ├── process_nwps_stages.py
│ │ ├── raw2obs.py
│ │ └── sync_idpgis.py
│ ├── hrrr/
│ │ ├── dl_hrrrref.py
│ │ ├── hrrr_jobs.py
│ │ ├── hrrr_ref2raster.py
│ │ └── plot_ref.py
│ ├── iemplot/
│ │ ├── IAMESONET_plot.csh
│ │ ├── RUN.csh
│ │ ├── coltbl.xwp
│ │ ├── dump_altm.py
│ │ ├── oa.csh
│ │ ├── pres_plot.csh
│ │ └── templates/
│ │ ├── createFile.csh
│ │ ├── grid_25_25.grd
│ │ ├── grid_50_50.grd
│ │ ├── sf.pack
│ │ ├── surface.gem
│ │ └── use.stns
│ ├── iemre/
│ │ ├── README.md
│ │ ├── daily_analysis.py
│ │ ├── db_to_netcdf.py
│ │ ├── grid_climate.py
│ │ ├── grid_climate_ifc.py
│ │ ├── grid_climate_stage4.py
│ │ ├── grid_rsds.py
│ │ ├── hourly_analysis.py
│ │ ├── ingest_nohrsc.py
│ │ ├── init_daily.py
│ │ ├── init_daily_ifc.py
│ │ ├── init_dailyc.py
│ │ ├── init_hourly.py
│ │ ├── init_ifc_dailyc.py
│ │ ├── init_narr.py
│ │ ├── init_stage4_daily.py
│ │ ├── init_stage4_dailyc.py
│ │ ├── init_stage4_hourly.py
│ │ ├── merge_ifc.py
│ │ ├── merge_narr.py
│ │ ├── por_dailyc.py
│ │ ├── precip_ingest.py
│ │ ├── prism_adjust_stage4.py
│ │ ├── stage4_12z_adjust.py
│ │ ├── use_icon.py
│ │ └── use_ifs.py
│ ├── ingestors/
│ │ ├── asos_1minute/
│ │ │ ├── p1_examples.txt
│ │ │ ├── p2_examples.txt
│ │ │ └── parse_ncei_asos1minute.py
│ │ ├── awos/
│ │ │ └── parse_monthly_maint.py
│ │ ├── cocorahs/
│ │ │ ├── cocorahs_data_ingest.py
│ │ │ └── cocorahs_stations.py
│ │ ├── dot_plows.py
│ │ ├── dot_truckcams.py
│ │ ├── dotcams/
│ │ │ ├── ingest_dot_webcams.py
│ │ │ └── sync_roadcam_meta.py
│ │ ├── elnino.py
│ │ ├── flux_ingest.py
│ │ ├── ifc/
│ │ │ └── ingest_ifc_precip.py
│ │ ├── isusm/
│ │ │ ├── ingest_isusm.py
│ │ │ └── run_ingest_isusm.sh
│ │ ├── madis/
│ │ │ ├── extract_hfmetar.py
│ │ │ ├── extract_madis.py
│ │ │ ├── extract_metar.py
│ │ │ ├── sync_stations.py
│ │ │ └── to_iemaccess.py
│ │ ├── ncei/
│ │ │ ├── 91_20/
│ │ │ │ ├── ingest.py
│ │ │ │ └── merge_stations.py
│ │ │ ├── ingest_fisherporter.py
│ │ │ ├── ingest_isd.py
│ │ │ ├── run_network_isd_ingest.py
│ │ │ └── xcheck_ghcn_stations.py
│ │ ├── onewire.py
│ │ ├── other/
│ │ │ ├── feel_ingest.py
│ │ │ ├── parse0006.py
│ │ │ ├── parse0010.py
│ │ │ └── purpleair.py
│ │ ├── parse0002.py
│ │ ├── rwis/
│ │ │ ├── process_rwis.py
│ │ │ ├── process_rwis_dtn.py
│ │ │ ├── process_soil.py
│ │ │ └── process_traffic.py
│ │ ├── soilm_ingest.py
│ │ ├── squaw/
│ │ │ └── ingest_squaw.py
│ │ └── uscrn_ingest.py
│ ├── isuag/
│ │ └── fix_temps.py
│ ├── isusm/
│ │ ├── agg_1minute.py
│ │ ├── agg_precip.py
│ │ ├── archiver.py
│ │ ├── backfill_summary.py
│ │ ├── csv2ldm.py
│ │ ├── fancy_4inch.py
│ │ ├── fix_high_low.py
│ │ ├── fix_precip.py
│ │ ├── fix_soil4t.py
│ │ ├── fix_solar.py
│ │ ├── isusm2rr5.py
│ │ ├── nmp_monthly_email.py
│ │ ├── run_plots.sh
│ │ ├── zap_temp_humid.py
│ │ └── zero_daily_precip.py
│ ├── model/
│ │ └── motherlode_ingest.py
│ ├── month/
│ │ ├── obs_precip.py
│ │ ├── obs_precip_coop.py
│ │ ├── plot_avgt.py
│ │ ├── plot_gdd.py
│ │ └── plot_sdd.py
│ ├── mos/
│ │ └── current_bias.py
│ ├── mrms/
│ │ ├── README.md
│ │ ├── copy_daily_24h.py
│ │ ├── gr2ae.txt
│ │ ├── init_daily_mrms.py
│ │ ├── init_mrms_dailyc.py
│ │ ├── make_mrms_rasters.py
│ │ ├── merge_mrms_q3.py
│ │ ├── mesh_contours.py
│ │ ├── mrms_lcref_comp.py
│ │ ├── mrms_monthly_plot.py
│ │ └── mrms_rainrate_comp.py
│ ├── nass/
│ │ ├── ingest_iowa_pdf.py
│ │ └── nass_quickstats.py
│ ├── ncei/
│ │ └── ingest_climdiv.py
│ ├── ndfd/
│ │ ├── grid_climate_ndfd.py
│ │ ├── init_ndfd_dailyc.py
│ │ ├── ndfd2iemre.py
│ │ ├── ndfd2netcdf.py
│ │ └── plot_temps.py
│ ├── nldas/
│ │ ├── init_hourly.py
│ │ └── process_nldasv2_noah.py
│ ├── other/
│ │ ├── ot2archive.py
│ │ └── update_daily_srad.py
│ ├── outgoing/
│ │ └── madis2csv.py
│ ├── plots/
│ │ ├── ARX_overlay.csh
│ │ ├── ASOS_plot.csh
│ │ ├── DEWPS_plot.csh
│ │ ├── DMX_overlay.csh
│ │ ├── DVN_overlay.csh
│ │ ├── EAX_overlay.csh
│ │ ├── FSD_overlay.csh
│ │ ├── HEAT_plot.csh
│ │ ├── HOURLY_PLOTS
│ │ ├── MPX_overlay.csh
│ │ ├── MW_mesonet.csh
│ │ ├── OAX_overlay.csh
│ │ ├── RELH_plot.csh
│ │ ├── RUN_PLOTS
│ │ ├── SDMESONET_plot.csh
│ │ ├── TEMPS_plot.csh
│ │ ├── WCHT_plot.csh
│ │ ├── WINDS_plot.csh
│ │ ├── black/
│ │ │ └── surfaceContours.csh
│ │ ├── coltbl.xwp
│ │ ├── createGrids.csh
│ │ ├── plot_rwis_sf.py
│ │ └── radar.tbl
│ ├── prism/
│ │ ├── README.md
│ │ ├── grid_climate_prism.py
│ │ ├── ingest_prism.py
│ │ ├── init_daily.py
│ │ └── init_prism_dailyc.py
│ ├── qc/
│ │ ├── check_afos.py
│ │ ├── check_awos_online.py
│ │ ├── check_isusm_online.py
│ │ ├── check_n0q.py
│ │ ├── check_station_geom.py
│ │ ├── check_vtec_eventids.py
│ │ └── check_webcams.py
│ ├── ridge/
│ │ ├── ReflectivityColorCurveManager.xml
│ │ └── ZDRColorCurveManager.xml
│ ├── roads/
│ │ ├── archive_roadsplot.py
│ │ ├── check_roads_geom.py
│ │ ├── ingest_roads_rest.py
│ │ ├── init_roads_database.py
│ │ └── merge_roads.py
│ ├── rtma/
│ │ ├── rtma_backfill.py
│ │ └── wind_power.py
│ ├── sbw/
│ │ ├── compute_shared_border_pct.py
│ │ └── raccoon_sbw_to_ppt.py
│ ├── scan/
│ │ ├── init_stations.py
│ │ └── scan_ingest.py
│ ├── season/
│ │ ├── plot_4month_stage4.py
│ │ └── plot_cli_jul1_snow.py
│ ├── smos/
│ │ ├── ingest_smos.py
│ │ └── plot.py
│ ├── summary/
│ │ ├── compute_daily.py
│ │ ├── hourly_precip.py
│ │ ├── max_reflect.py
│ │ └── update_dailyrain.py
│ ├── swat/
│ │ └── swat_realtime.py
│ ├── ua/
│ │ ├── compute_params.py
│ │ ├── compute_sts_ets.py
│ │ ├── igra2_ingest.py
│ │ └── ingest_from_spc.py
│ ├── uscrn/
│ │ └── compute_uscrn_pday.py
│ ├── usdm/
│ │ └── process_usdm.py
│ ├── util/
│ │ ├── list_stale_autoplots.py
│ │ ├── make_archive_baseline.py
│ │ ├── monthly.sh
│ │ ├── pick_state.py
│ │ ├── poker2afos.py
│ │ └── set_iemdb_etc_hosts.py
│ ├── webalizer/
│ │ ├── agclimate.conf
│ │ ├── combine_logs.py
│ │ ├── datateam.conf
│ │ ├── depbackend.conf
│ │ ├── mesonet.conf
│ │ ├── processlogs.sh
│ │ ├── sustainablecorn.conf
│ │ └── weatherim.conf
│ ├── week/
│ │ └── plot_obs.py
│ ├── windrose/
│ │ ├── daily_drive_network.py
│ │ ├── drive_network_windrose.py
│ │ └── make_windrose.py
│ ├── year/
│ │ ├── plot_gdd.py
│ │ ├── plot_stage4.py
│ │ └── precip.py
│ └── yieldfx/
│ ├── README.md
│ ├── baseline/
│ │ ├── ames.met
│ │ ├── cobs.met
│ │ ├── crawfordsville.met
│ │ ├── kanawha.met
│ │ ├── lewis.met
│ │ ├── mcnay.met
│ │ ├── muscatine.met
│ │ ├── nashua.met
│ │ └── sutherland.met
│ ├── baseline2db.py
│ ├── cfs2iemre_netcdf.py
│ ├── cfs_tiler.py
│ ├── cfs_tiler_lastyear.py
│ ├── counties.csv
│ ├── county_csv.py
│ ├── dump_hybridmaize.py
│ ├── dumpbaseline.py
│ ├── psims_baseline.py
│ └── yieldfx_workflow.py
├── src/
│ ├── iemjs/
│ │ ├── CHANGELOG.md
│ │ ├── LICENSE
│ │ ├── README.md
│ │ ├── package.json
│ │ ├── src/
│ │ │ ├── domUtils.d.ts
│ │ │ ├── domUtils.js
│ │ │ ├── iemdata.d.ts
│ │ │ ├── iemdata.js
│ │ │ ├── index.d.ts
│ │ │ └── index.js
│ │ └── tests/
│ │ ├── runner.js
│ │ ├── test-exports.js
│ │ └── test-imports.js
│ └── release-iemjs.sh
├── tests/
│ ├── iemweb/
│ │ ├── autoplot/
│ │ │ ├── test_api.py
│ │ │ ├── test_barchar.py
│ │ │ ├── test_extweb_failures.py
│ │ │ ├── test_index.py
│ │ │ ├── test_meta.py
│ │ │ ├── test_one_offs.py
│ │ │ ├── test_urls.py
│ │ │ ├── urllist.txt
│ │ │ └── urllist_index.txt
│ │ ├── current/
│ │ │ └── test_live.py
│ │ ├── geojson/
│ │ │ ├── test_geojson_index.py
│ │ │ └── test_sbw.py
│ │ ├── iembot/
│ │ │ └── test_mastodon.py
│ │ ├── json/
│ │ │ ├── test_json_index.py
│ │ │ ├── test_radar.py
│ │ │ └── test_spcoutlook.py
│ │ ├── onsite/
│ │ │ └── test_features.py
│ │ ├── request/
│ │ │ ├── gis/
│ │ │ │ ├── test_lsr.py
│ │ │ │ └── test_watchwarn.py
│ │ │ ├── test_asos.py
│ │ │ ├── test_coop.py
│ │ │ ├── test_maxcsv.py
│ │ │ └── test_metars.py
│ │ ├── test_afos.py
│ │ ├── test_all_application.py
│ │ ├── test_dispatch.py
│ │ ├── test_doc_urls.py
│ │ ├── test_fields.py
│ │ ├── test_iemweb_urls.py
│ │ ├── test_module.py
│ │ ├── test_proxy_error_handler.py
│ │ ├── test_util.py
│ │ ├── urls.txt
│ │ ├── urls422.txt
│ │ └── vtec/
│ │ └── test_vtec.py
│ ├── run_feature_autoplots.py
│ ├── run_mapserver.sh
│ ├── stress_tilecache.py
│ ├── test_mod_wsgi.py
│ ├── test_php.py
│ ├── urls.txt
│ └── urls405.txt
└── tsconfig.json
================================================
FILE CONTENTS
================================================
================================================
FILE: .deepsource.toml
================================================
version = 1
test_patterns = ["**/tests/**"]
exclude_patterns = [
"include/vendor/**",
"include/jpgraph/**",
]
[[analyzers]]
name = "shell"
[[analyzers]]
name = "javascript"
[analyzers.meta]
environment = ["browser"]
[[analyzers]]
name = "python"
[analyzers.meta]
runtime_version = "3.x.x"
max_line_length = 188
[[analyzers]]
name = "php"
[analyzers.meta]
bootstrap_files = ["include/dbase.stub.php", "config/settings.inc.php.in"]
================================================
FILE: .editorconfig
================================================
# EditorConfig helps maintain consistent coding styles between editors and IDEs.
# See https://editorconfig.org
# Root marker
root = true
[*]
charset = utf-8
end_of_line = lf
insert_final_newline = true
trim_trailing_whitespace = true
# Let linters/formatters (ruff, eslint) enforce line length
max_line_length = off
[*.{py,php,js,jsx,ts,tsx,cjs,mjs,sh,bash}]
indent_style = space
indent_size = 4
tab_width = 4
[*.{yml,yaml}]
indent_style = space
indent_size = 2
[*.{json,jsonc}]
indent_style = space
indent_size = 2
[*.md]
# Preserve intentional double-space line breaks and trailing spaces in tables
trim_trailing_whitespace = false
insert_final_newline = true
[Makefile]
# Tabs are required for make recipes
indent_style = tab
[Dockerfile]
indent_style = space
indent_size = 4
[*.{ini,conf}]
indent_style = space
indent_size = 4
================================================
FILE: .github/ci_db_testdata.py
================================================
"""Update The Test Database.
The test database instance for CI has static data for testing. This is static
from the time of the docker image build. This script runs from GHA and does
some mucking with the database to improve coverage.
"""
from pyiem.database import sql_helper, with_sqlalchemy_conn
from pyiem.network import Table as NetworkTable
from pyiem.util import logger
from sqlalchemy.engine import Connection
LOG = logger()
@with_sqlalchemy_conn("isuag")
def create_realtime_isuag(conn: Connection | None = None) -> None:
"""Create the realtime table if needed."""
nt = NetworkTable("ISUSM")
for sid in nt.sts:
conn.execute(
sql_helper("""
insert into sm_minute (station, valid, tair_c_avg_qc, sv_t2_qc,
sv_vwc2_qc) values
(:sid, now(), :tmpc, :tmpc, :vwc)"""),
{
"sid": sid,
"tmpc": None if sid == "AHDI4" else 20.0,
"vwc": None if sid in ["AMFI4", "AHDI4"] else 0.2,
},
)
conn.execute(
sql_helper("""
insert into sm_daily (station, valid, tair_c_max_qc) values
(:sid, now(), :tmpc)"""),
{"sid": sid, "tmpc": 20.0},
)
if sid in ["CRFI4", "BOOI4", "CAMI4"]:
conn.execute(
sql_helper("""
insert into sm_inversion (station, valid, tair_15_c_avg_qc) values
(:sid, now(), :tmpc)"""),
{"sid": sid, "tmpc": 20.0},
)
conn.commit()
@with_sqlalchemy_conn("iem")
def create_iemaccess_isuag(conn: Connection | None = None) -> None:
"""Create the realtime table if needed."""
nt = NetworkTable("ISUSM")
for sid in nt.sts:
conn.execute(
sql_helper("""
insert into current (iemid, valid, tmpf) values
(:iemid, now(), :tmpf)"""),
{
"iemid": nt.sts[sid]["iemid"],
"tmpf": 20.0 if sid[2] > "F" else None,
},
)
conn.commit()
@with_sqlalchemy_conn("id3b")
def ldm_product_log(conn: Connection | None = None) -> None:
"""Update these to the future."""
conn.execute(
sql_helper("""
update ldm_product_log SET
entered_at = now() - ('2024-12-03 19:30+00'::timestamptz - entered_at),
valid_at = now() - ('2024-12-03 19:30+00'::timestamptz - valid_at),
wmo_valid_at = now() -
('2024-12-03 19:30+00'::timestamptz - wmo_valid_at)
where entered_at between '2024-12-03 16:00+00'
and '2024-12-03 20:00+00'
""")
)
conn.commit()
@with_sqlalchemy_conn("radar")
def nexrad_attributes(conn: Connection | None = None) -> None:
"""Update these to be current."""
res = conn.execute(
sql_helper("update nexrad_attributes SET valid = now()")
)
LOG.warning("Updated %s nexrad_attributes to current time", res.rowcount)
conn.commit()
def main():
"""Go Main."""
ldm_product_log()
nexrad_attributes()
create_realtime_isuag()
create_iemaccess_isuag()
if __name__ == "__main__":
main()
================================================
FILE: .github/copilot-instructions.md
================================================
# IEM Repo
Every time you choose to apply a rule(s), explicitly state the rule(s) in the
output. You can abbreviate the rule description to a single word or phrase.
## Code Stack
- PHP 8.4
- Tabulator JavaScript library for interactive tables
- Python 3.14
- PostgreSQL 18
- Bootstrap 5
- OpenLayers for interactive maps
## Code Organization and Abstractions
- Before creating new utility functions, check if similar functionality exists
in `/htdocs/js/iemjs/` or `/src/iemjs/`.
- When refactoring for complexity, prefer creating reusable abstractions
in `/htdocs/js/iemjs/` or `/src/iemjs/`.
- Look for patterns that appear across multiple modules and extract them to
shared utilities.
- When fixing ESLint complexity warnings, prioritize creating shared utilities
over module-specific helper functions.
- Always search the codebase for similar patterns before creating new functions.
- Common patterns that should be abstracted:
- Form validation and input handling
- URL parameter parsing/updating and hash migration
- API request handling with error management and loading states
- DOM element selection and manipulation beyond what's in domUtils.js
- Date/time formatting and parsing utilities
- Table/data processing and formatting
- Keyboard navigation and event handling patterns
## Refactoring Strategy
- When asked to "address complexity", first analyze if the complexity comes from:
1. **Reusable logic** → extract to shared utilities in `/src/iemjs/`
2. **Module-specific orchestration** → break into smaller, focused functions
3. **Repetitive patterns** → create abstractions that multiple modules can use
- Before creating 3+ similar helper functions across different modules,
consolidate into a shared utility.
- When creating shared utilities, design them to handle the most common use cases
across the codebase, not just the immediate problem.
**Note**: This abstraction strategy applies only to ES modules (files using `import`/`export`).
Legacy JavaScript files should keep complexity-reducing functions within their own modules.
## Rules
- It is not acceptable to rewrite a file by creating a new file and then overwriting
the original file with the new file. Instead, you should edit the original file
directly.
- Jquery should not be used and any instances of it should be replaced
with vanilla JavaScript.
- Code comments should explain functionality, not detail why the code was
added.
- JavaScript code should not be embedded in HTML files.
- Jquery-UI should not be used and any instances of it should be replaced
with vanilla JavaScript.
- Avoid usage of `this` in JavaScript code, as it can lead to confusion
and bugs. Use arrow functions or bind methods to the correct context instead.
- When you suggest URLs to open for testing, you should use the domain name
of `iem.local` instead of `localhost`. HTTPS is required.
## ESLint Usage
- **ALWAYS use `npx eslint <filepath>` for linting individual files.**
- Use the direct ESLint command to get accurate, file-specific linting results.
## Project Context
This repo does a lot of different things with weather data modification.
## Code Style and Structure
```text
cgi-bin/ # One line front end references to pylib application code
config/ # PHP configuration
data/ # Stuff used by PHP and python scripts
deployment/ # Stuff associated with deployment of this code
docs/ # centralized docs
htdocs/ # The apache webroot with mostly PHP stuff and python pointers
# to things within pylib
├── agclimate/ # ISU Soil Moisture Network
include/ # PHP include scripts
pylib/ # python library stuff used within this repo only
scripts/ # python cron jobs that process data, these are not web accessible
src/iemjs/ # Centralized `iemjs` npm ES package, used by this repo and friends.
# This is where new utility functions should be added.
tests/ # Python testing code mostly for pylib and for integration tests
```
## Code Quality and Technical Debt
- Avoid creating many small, single-purpose functions when a more general
utility would serve multiple modules.
- When fixing the same type of complexity issue across multiple files,
step back and create a shared solution.
- If you find yourself writing similar JSDoc comments across different modules,
that's a signal the functionality should be abstracted.
- Consider the maintenance burden: 10 lines of shared utility code is better
than 50 lines of duplicated helper functions across 5 modules.
## Decision Making Process
- When approaching complexity refactoring:
1. First, semantic_search for similar patterns in other modules
2. Check existing utilities in `/src/iemjs/` and `/htdocs/js/iemjs/`
3. If pattern exists 2+ times, create shared utility
4. If truly module-specific, create focused helper functions
5. Document the decision rationale in comments
================================================
FILE: .github/dependabot.yml
================================================
version: 2
updates:
- package-ecosystem: "github-actions"
directory: "/"
schedule:
interval: "monthly"
labels:
- "Bot"
groups:
github-actions:
patterns:
- '*'
- package-ecosystem: "npm"
directory: "/"
schedule:
interval: "monthly"
labels:
- "Bot"
groups:
npm:
patterns:
- '*'
================================================
FILE: .github/ms_environment.yml
================================================
dependencies:
- mapserver
================================================
FILE: .github/setupdata.sh
================================================
# Ensure we error out
set -x -e
# Paths are setup in setuppaths.sh
python .github/ci_db_testdata.py
python scripts/dbutil/sync_stations.py
python scripts/mrms/init_daily_mrms.py --year=2024
python scripts/mrms/init_mrms_dailyc.py
python scripts/prism/init_daily.py --year=2024
python scripts/iemre/init_daily.py --year=2022 --domain=conus
python scripts/iemre/init_daily.py --year=2023 --ci
python scripts/iemre/init_daily.py --year=2024 --domain=conus
python scripts/iemre/init_daily.py --year=2024 --domain=europe
python scripts/iemre/init_daily.py --year=2024 --domain=sa
python scripts/iemre/init_hourly.py --year=2023 --ci
python scripts/iemre/init_dailyc.py
python scripts/iemre/init_stage4_hourly.py --year=2024 --ci
python scripts/iemre/init_stage4_daily.py --year=2024 --ci
python scripts/iemre/init_daily_ifc.py --year=2024 --ci
curl -o /mesonet/share/features/2022/03/220325.png \
https://mesonet.agron.iastate.edu/onsite/features/2022/03/220325.png
curl -o /mesonet/ldmdata/gis/images/4326/USCOMP/n0q_0.json \
https://mesonet.agron.iastate.edu/data/gis/images/4326/USCOMP/n0q_0.json
curl -o /mesonet/ldmdata/gis/images/4326/USCOMP/n0r_0.json \
https://mesonet.agron.iastate.edu/data/gis/images/4326/USCOMP/n0r_0.json
curl -o /mesonet/share/pickup/yieldfx/ames.met \
https://mesonet.agron.iastate.edu/pickup/yieldfx/ames.met
curl -o /mesonet/data/iemre/ndfd_current.nc \
https://mesonet.agron.iastate.edu/onsite/iemre/ndfd_current.nc
curl -o /mesonet/data/iemre/gfs_current.nc \
https://mesonet.agron.iastate.edu/onsite/iemre/gfs_current.nc
curl -o /opt/iem/htdocs/vtec/assets.json \
https://mesonet.agron.iastate.edu/vtec/assets.json
# A corrupted RTMA file
mkdir -p /mesonet/ARCHIVE/data/2024/01/01/model/rtma/00
echo > /mesonet/ARCHIVE/data/2024/01/01/model/rtma/00/rtma2p5_ru.t0000z.2dvaranl_ndfd.grb2
# A corrupted HRRR refd file
mkdir -p /mesonet/ARCHIVE/data/2024/01/01/model/hrrr/00
echo > /mesonet/ARCHIVE/data/2024/01/01/model/hrrr/00/hrrr.t00z.refd.grib2
================================================
FILE: .github/setuppaths.sh
================================================
set -e -x
# Only path setups here, adding data handled in setupdata.sh
sudo ln -s `pwd` /opt/iem
# Kind of hacky, but that is what daryl does
# needed by all kinds of things
# /mesonet was setup in ci_tooling
mkdir -p /mesonet/ldmdata/gis/images/4326/USCOMP
mkdir -p /mesonet/share/pickup/yieldfx
mkdir -p /mesonet/share/features/2022/03
mkdir _webtmp
sudo ln -s `pwd`/_webtmp /var/webtmp
================================================
FILE: .github/workflows/build.yml
================================================
name: IEM CI
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build:
defaults:
run:
# Ensures environment gets sourced right
shell: bash -l -e {0}
name: Python (${{ matrix.PYTHON_VERSION }}) Data (${{ matrix.WITH_TEST_DATA }}) Test Web (${{ matrix.TEST_WEB }})
runs-on: ubuntu-latest
strategy:
matrix:
PYTHON_VERSION: ["3.14"]
WITH_TEST_DATA: ["test_data", "no_test_data"]
TEST_WEB: ["YES", "NO"]
exclude:
# This combination is not all that useful
- PYTHON_VERSION: "3.14"
TEST_WEB: "NO"
WITH_TEST_DATA: "no_test_data"
env:
PYTHON_VERSION: ${{ matrix.PYTHON_VERSION }}
WITH_TEST_DATA: ${{ matrix.WITH_TEST_DATA }}
TEST_WEB: ${{ matrix.TEST_WEB }}
steps:
- uses: actions/checkout@v6
# Lots of daryl's codes use aliases defined in /etc/hosts
- name: Add /etc/hosts entries
run: |
cat .github/workflows/etchosts.txt | sudo tee -a /etc/hosts
# Required for all matrix jobs
- name: Create Docker Network
run: docker network create iem_network
# Required for all matrix jobs
- name: Run IEM Database Container label:${{ env.WITH_TEST_DATA }}
run: |
docker run -d --name iem_database --network iem_network -p 5432:5432 ghcr.io/akrherz/iem_database:${{ env.WITH_TEST_DATA }}
n=0
until docker exec iem_database pg_isready -h localhost; do
n=$((n+1))
if [ $n -ge 10 ]; then
echo "iem_database did not become ready in time"
docker logs iem_database
exit 1
fi
sleep 6
done
# Required for all matrix jobs
- name: Run IEM Web Services Container
run: |
docker run -d --name iem_web_services --network iem_network -p 8080:8000 -e IEMWS_DBHOST=iem_database -e IEMWS_DBUSER=mesonet ghcr.io/akrherz/iem-web-services:latest
n=0
# Test something that does a db query
until curl -sf http://localhost:8080/networks.geojson; do
n=$((n+1))
if [ $n -ge 10 ]; then
echo "iem-web-services did not become ready in time"
docker logs iem_web_services
exit 1
fi
sleep 1
done
# Required for all matrix jobs
- name: Run Memcached container
run: |
docker run -d --name iem_memcached -p 11211:11211 memcached:1.6.9
- uses: akrherz/ci_tooling/actions/iemwebfarm@main
with:
environment-file: environment.yml
python-version: ${{ matrix.PYTHON_VERSION }}
environment-name: prod
# Copy repo's default settings into the real position
- name: Copy PHP Setting Defaults
run: |
cp config/settings.inc.php.in config/settings.inc.php
# All jobs need to have directories laid out
- name: Setup Directory Paths
run: sh .github/setuppaths.sh
# Only one job needs to load the test data
- name: Setup IEM Data
if: ${{ matrix.WITH_TEST_DATA == 'test_data' }}
run: sh .github/setupdata.sh
- name: IEM TileCache Backend
if: ${{ matrix.TEST_WEB == 'YES' }}
run: |
nohup bash deployment/start_tc_wsgi.sh > /tmp/iem-tilecache.log 2>&1 &
echo $! > /tmp/iem-tilecache.pid
n=0
until curl -sS -o /dev/null http://127.0.0.1:9081/; do
n=$((n+1))
if [ $n -ge 30 ]; then
echo "iem-tilecache did not become ready in time"
cat /tmp/iem-tilecache.log
exit 1
fi
sleep 1
done
- name: Configure Webfarm Server
if: ${{ matrix.TEST_WEB == 'YES' }}
run: |
echo '<VirtualHost *:80>' | sudo tee /etc/apache2/sites-enabled/iem.conf > /dev/null
cat config/mesonet.inc | sudo tee -a /etc/apache2/sites-enabled/iem.conf > /dev/null
echo '</VirtualHost>' | sudo tee -a /etc/apache2/sites-enabled/iem.conf > /dev/null
# ci_tooling places a mod_wsgi conf with startup disabled, we enable it
sudo sed -i 's/# WSGIImportScript/WSGIImportScript/' /etc/apache2/sites-enabled/mod_wsgi.conf
# restart apache
sudo service apache2 restart
sudo systemctl status apache2.service -l
- name: Run IEM Production checks
if: ${{ matrix.TEST_WEB == 'YES' }}
run: |
git clone --depth 1 https://github.com/akrherz/iem-production-checks.git .ipc
SERVICE=http://iem.local pytest -n 4 .ipc/tests/test_*.py
- name: Run mod_wsgi smoke test
if: ${{ matrix.TEST_WEB == 'YES' }}
run: pytest -n 4 tests/test_mod_wsgi.py
- name: Test PHP webscripts
if: ${{ matrix.TEST_WEB == 'YES' }}
run: pytest -n 4 tests/test_php.py
# - name: Setup upterm session
# if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_TEST_DATA == 'test_data' }}
# uses: owenthereal/action-upterm@v1
# with:
# limit-access-to-actor: true
- name: Run IEMWeb Python Check
if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_TEST_DATA == 'test_data' }}
run: |
export PYTHONPATH=/opt/iem/pylib
python -m pytest --mpl --cov=iemweb --durations=10 -n 4 -W error::FutureWarning tests/iemweb/
python -m coverage xml
- name: Upload to Codecov
if: ${{ matrix.TEST_WEB == 'NO' && matrix.WITH_TEST_DATA == 'test_data' }}
uses: codecov/codecov-action@v6
with:
files: coverage.xml
fail_ci_if_error: true
- name: View Apache Logs
if: ${{ failure() && matrix.TEST_WEB == 'YES' }}
run: |
sudo systemctl status apache2 -l
sudo cat /var/log/apache2/error.log
- name: View TileCache Logs
if: ${{ failure() && matrix.TEST_WEB == 'YES' }}
run: |
if [ -f /tmp/iem-tilecache.pid ]; then
ps -fp "$(cat /tmp/iem-tilecache.pid)" || true
fi
if [ -f /tmp/iem-tilecache.log ]; then
cat /tmp/iem-tilecache.log
fi
- name: View PHP-FPM Logs
if: ${{ failure() && matrix.TEST_WEB == 'YES' }}
run: |
sudo cat /var/log/php*-fpm.log
================================================
FILE: .github/workflows/codeql.yml
================================================
name: "CodeQL"
on:
push:
branches: [ "main" ]
pull_request:
branches: [ "main" ]
schedule:
- cron: "22 12 * * 1"
jobs:
analyze:
name: Analyze (${{ matrix.language }})
runs-on: ubuntu-latest
timeout-minutes: 360
permissions:
actions: read
contents: read
security-events: write
strategy:
fail-fast: false
matrix:
language: [ javascript, python ]
steps:
- name: Checkout repository
uses: actions/checkout@v6
- name: Initialize CodeQL
uses: github/codeql-action/init@v4
with:
languages: ${{ matrix.language }}
queries: +security-and-quality
- name: Autobuild
uses: github/codeql-action/autobuild@v4
- name: Perform CodeQL Analysis
uses: github/codeql-action/analyze@v4
with:
category: "/language:${{ matrix.language }}"
upload: true
================================================
FILE: .github/workflows/etchosts.txt
================================================
127.0.0.1 iem.local
127.0.0.1 iemdb.local
127.0.0.1 iemdb-hads.local
127.0.0.1 iemdb-mos.local
127.0.0.1 iemdb-idep.local
127.0.0.1 iemdb-dep_china.local
127.0.0.1 iemdb-dep_europe.local
127.0.0.1 iemdb-dep_sa.local
127.0.0.1 iemdb-iembot.local
127.0.0.1 iemdb-iemre.local
127.0.0.1 iemdb-iemre_china.local
127.0.0.1 iemdb-iemre_europe.local
127.0.0.1 iemdb-iemre_sa.local
127.0.0.1 iemdb-postgis.local
127.0.0.1 iemdb-mesosite.local
127.0.0.1 iemdb-afos.local
127.0.0.1 iemdb-asos.local
127.0.0.1 iemdb-hml.local
127.0.0.1 iemdb-id3b.local
127.0.0.1 iemdb-nldn.local
127.0.0.1 iemdb-snet.local
127.0.0.1 iemdb-mos.local
127.0.0.1 iemdb-raob.local
127.0.0.1 iemdb-rwis.local
127.0.0.1 iemdb-squaw.local
127.0.0.1 iemdb-awos.local
127.0.0.1 iemdb-iem.local
127.0.0.1 iemdb-other.local
127.0.0.1 iemdb-radar.local
127.0.0.1 iemdb-scan.local
127.0.0.1 iemdb-wepp.local
127.0.0.1 iemdb-coop.local
127.0.0.1 iemdb-isuag.local
127.0.0.1 iemdb-portfolio.local
127.0.0.1 iemdb-smos.local
127.0.0.1 iemdb-talltowers.local
127.0.0.1 iemdb-td.local
127.0.0.1 iemdb-uscrn.local
127.0.0.1 iemdb-sustainablecorn.local
127.0.0.1 iemdb-asos1min.local
127.0.0.1 iem-memcached3
127.0.0.1 iem-memcached
127.0.0.1 iem-web-services
127.0.0.1 iem-web-services.agron.iastate.edu
================================================
FILE: .github/workflows/mapserver.yml
================================================
name: Test Mapserver Files
on:
pull_request:
branches:
- main
push:
branches:
- main
jobs:
build-linux:
name: Test Mapserver Files
defaults:
run:
# Ensures environment gets sourced right
shell: bash -l -e {0}
runs-on: ubuntu-latest
steps:
- uses: actions/checkout@v6
- name: Add /etc/hosts entries
run: |
cat .github/workflows/etchosts.txt | sudo tee -a /etc/hosts
# setup conda-forge with micromamba
- name: Setup Python
uses: mamba-org/setup-micromamba@v3
with:
environment-file: .github/ms_environment.yml
condarc: |
channels:
- conda-forge
create-args: >-
python=3.14
environment-name: prod
cache-environment: true
- name: Run IEM Database container
run: |
docker run -d --name iem_database -p 5432:5432 ghcr.io/akrherz/iem_database:test_data
until docker exec iem_database pg_isready -h localhost; do
sleep 6
done
- name: Setup CI from ci-tooling
run: |
set -e
sudo ln -s `pwd` /opt/iem
sudo mkdir -p /mesonet/ldmdata/
wget -q http://mesonet.agron.iastate.edu/pickup/ci_msinc.tgz
sudo tar -C / -xzf ci_msinc.tgz
- name: Run map2img
run: |
set -e
bash tests/run_mapserver.sh
================================================
FILE: .github/workflows/publish-iemjs.yml
================================================
name: Publish iemjs to npm
on:
push:
tags:
- 'iemjs-v*' # Triggers on tags like iemjs-v1.0.0, iemjs-v1.2.3, etc.
jobs:
publish:
runs-on: ubuntu-latest
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: '18'
registry-url: 'https://registry.npmjs.org'
- name: Extract version from tag
id: extract_version
run: |
# Extract version from tag (iemjs-v1.0.0 -> 1.0.0)
VERSION=${GITHUB_REF#refs/tags/iemjs-v}
echo "version=$VERSION" >> $GITHUB_OUTPUT
echo "Publishing version: $VERSION"
- name: Validate package
run: |
cd src/iemjs
npm pack --dry-run
- name: Run basic syntax check
run: |
cd src/iemjs
node -c src/domUtils.js
node -c src/iemdata.js
node -c src/index.js
- name: Publish to npm
run: |
cd src/iemjs
npm publish --access public
env:
NODE_AUTH_TOKEN: ${{ secrets.NPM_TOKEN }}
- name: Extract changelog for this version
id: changelog
run: |
cd src/iemjs
if [ -f "CHANGELOG.md" ]; then
# Extract changelog section for this version
VERSION=${{ steps.extract_version.outputs.version }}
CHANGELOG_SECTION=$(sed -n "/## \[$VERSION\]/,/## \[/p" CHANGELOG.md | head -n -1)
if [ -z "$CHANGELOG_SECTION" ]; then
CHANGELOG_SECTION="See CHANGELOG.md for details."
fi
# Save to output, escaping newlines
echo "content<<EOF" >> $GITHUB_OUTPUT
echo "$CHANGELOG_SECTION" >> $GITHUB_OUTPUT
echo "EOF" >> $GITHUB_OUTPUT
else
echo "content=No changelog available." >> $GITHUB_OUTPUT
fi
- name: Create GitHub Release
uses: actions/create-release@v1
env:
GITHUB_TOKEN: ${{ secrets.GITHUB_TOKEN }}
with:
tag_name: ${{ github.ref }}
release_name: iemjs v${{ steps.extract_version.outputs.version }}
body: |
## iemjs v${{ steps.extract_version.outputs.version }}
Published to npm: https://www.npmjs.com/package/iemjs
### Changes
${{ steps.changelog.outputs.content }}
### Installation
```bash
npm install iemjs@${{ steps.extract_version.outputs.version }}
```
draft: false
prerelease: false
================================================
FILE: .github/workflows/test-iemjs.yml
================================================
name: Test iemjs package
on:
push:
branches: [ main, master ]
paths:
- 'src/iemjs/**'
- '.github/workflows/test-iemjs.yml'
pull_request:
branches: [ main, master ]
paths:
- 'src/iemjs/**'
- '.github/workflows/test-iemjs.yml'
jobs:
test:
runs-on: ubuntu-latest
strategy:
matrix:
node-version: [16, 18, 20]
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js ${{ matrix.node-version }}
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- name: Run iemjs tests
run: |
cd src/iemjs
npm test
- name: Test npm pack (dry run)
run: |
cd src/iemjs
npm pack --dry-run
echo "✅ npm pack simulation successful"
- name: Run ESLint on iemjs files
run: |
# Check ESLint against our iemjs files
npx eslint src/iemjs/src/*.js --format=compact || echo "⚠️ ESLint warnings found (not failing build)"
# Test on different operating systems
cross-platform:
runs-on: ${{ matrix.os }}
strategy:
matrix:
os: [ubuntu-latest, windows-latest, macos-latest]
node-version: [18]
steps:
- name: Checkout code
uses: actions/checkout@v6
- name: Setup Node.js
uses: actions/setup-node@v6
with:
node-version: ${{ matrix.node-version }}
- name: Test basic functionality
run: |
cd src/iemjs
npm run test:syntax
shell: bash
================================================
FILE: .gitignore
================================================
/.settings
/.buildpath
/.project
/.pydevproject
**/fe.py
/.vscode
**/gemglb.nts
**/last.nts
/config/settings.inc.php
node_modules
**/.coverage
coverage.xml
# Stuff built by iemvtec
htdocs/vtec/assets*
htdocs/vtec/legends
htdocs/vtec/_index_content.html
================================================
FILE: .pre-commit-config.yaml
================================================
ci:
autoupdate_schedule: quarterly
repos:
- repo: https://github.com/pre-commit/mirrors-eslint
rev: 'v10.3.0'
hooks:
- id: eslint
additional_dependencies:
- "eslint"
- "@eslint/js"
- "globals"
files: \.js?$
types: [file]
args:
- --fix
language_version: 'system' # Use system Node.js which should support ES modules
- repo: https://github.com/astral-sh/ruff-pre-commit
rev: "v0.15.13"
hooks:
- id: ruff-check
args: [--fix, --exit-non-zero-on-fix]
- id: ruff-format
================================================
FILE: .prettierrc
================================================
{
"semi": true,
"trailingComma": "es5",
"singleQuote": true,
"printWidth": 100,
"tabWidth": 4,
"useTabs": false,
"bracketSpacing": true,
"arrowParens": "avoid",
"endOfLine": "lf",
"overrides": [
{
"files": "*.php",
"options": {
"parser": "php",
"printWidth": 120
}
},
{
"files": "*.html",
"options": {
"printWidth": 120,
"htmlWhitespaceSensitivity": "css"
}
}
]
}
================================================
FILE: LICENSE
================================================
Copyright (c) 2005 Iowa State University
Permission is hereby granted, free of charge, to any person obtaining
a copy of this software and associated documentation files (the
"Software"), to deal in the Software without restriction, including
without limitation the rights to use, copy, modify, merge, publish,
distribute, sublicense, and/or sell copies of the Software, and to
permit persons to whom the Software is furnished to do so, subject to
the following conditions:
The above copyright notice and this permission notice shall be
included in all copies or substantial portions of the Software.
THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND,
EXPRESS OR IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF
MERCHANTABILITY, FITNESS FOR A PARTICULAR PURPOSE AND
NONINFRINGEMENT. IN NO EVENT SHALL THE AUTHORS OR COPYRIGHT HOLDERS BE
LIABLE FOR ANY CLAIM, DAMAGES OR OTHER LIABILITY, WHETHER IN AN ACTION
OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, OUT OF OR IN CONNECTION
WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE SOFTWARE.
================================================
FILE: README.md
================================================
# Iowa Environmental Mesonet
If using this code causes your server to have kittens, it is your own fault.
This monolith drives much of the ingest, processing, product generation, and
web presence of the [IEM](https://mesonet.agron.iastate.edu). Hopefully it can
be found useful for others to at least look at to see how some of the magic happens.
Limited integration testing is done on Github Actions: [](https://github.com/akrherz/iem)
[](https://app.deepsource.com/gh/akrherz/iem/)
[](https://codecov.io/gh/akrherz/iem)
[](https://results.pre-commit.ci/latest/github/akrherz/iem/main)
See [@akrherz Github Profile](https://github.com/akrherz) for an overview of
repositories found here and how the fit together.
## Requirements
- Python 3.10+ (CI tests with 3.14)
- PHP 8
## Deployment Notes
- Vendor static assets used by web pages are documented in
[docs/deployment/vendor-static-assets.md](docs/deployment/vendor-static-assets.md).
================================================
FILE: cgi-bin/afos/retrieve.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/afos/retrieve.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/afos/retrieve.py?help"""
from iemweb.afos.retrieve import application
__all__ = ["application"]
================================================
FILE: cgi-bin/climate/orc.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/climate/orc.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/climate/orc.py?help"""
from iemweb.climate.orc import application
__all__ = ["application"]
================================================
FILE: cgi-bin/geocoder.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/geocoder.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/geocoder.py?help"""
from iemweb.geocoder import application
__all__ = ["application"]
================================================
FILE: cgi-bin/index.php
================================================
<?php
Header("Location: /api");
================================================
FILE: cgi-bin/mywindrose.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/mywindrose.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/mywindrose.py?help"""
from iemweb.mywindrose import application
__all__ = ["application"]
================================================
FILE: cgi-bin/onsite/birthday/getweather.py
================================================
"""Implementation at pylib/iemweb/getweather.py"""
from iemweb.getweather import application
__all__ = ["application"]
================================================
FILE: cgi-bin/precip/catAZOS.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/precip/catAZOS.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/precip/catAZOS.py?help"""
from iemweb.precip.catAZOS import application
__all__ = ["application"]
================================================
FILE: cgi-bin/precip/catSNET.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/precip/catSNET.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/precip/catSNET.py?help"""
from iemweb.precip.catSNET import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/asos.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/asos.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/asos.py?help"""
from iemweb.request.asos import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/asos1min.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/asos1min.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/asos1min.py?help"""
from iemweb.request.asos1min import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/coop.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/coop.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/coop.py?help"""
from iemweb.request.coop import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/coopobs.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/coopobs.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/coopobs.py?help"""
from iemweb.request.coopobs import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/daily.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/daily.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/daily.py?help"""
from iemweb.request.daily import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/feel.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/feel.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/feel.py?help"""
from iemweb.request.feel import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/awc_gairmets.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/awc_gairmets.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/awc_gairmets.py?help"""
from iemweb.request.gis.awc_gairmets import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/cwas.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/cwas.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/cwas.py?help"""
from iemweb.request.gis.cwas import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/lsr.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/lsr.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/lsr.py?help"""
from iemweb.request.gis.lsr import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/misc.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/misc.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/misc.py?help"""
from iemweb.request.gis.misc import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/nexrad_storm_attrs.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/nexrad_storm_attrs.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/nexrad_storm_attrs.py?help"""
from iemweb.request.gis.nexrad_storm_attrs import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/pireps.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/pireps.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/pireps.py?help"""
from iemweb.request.gis.pireps import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/sigmets.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/sigmets.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/sigmets.py?help"""
from iemweb.request.gis.sigmets import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/spc_mcd.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_mcd.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/spc_mcd.py?help"""
from iemweb.request.gis.spc_mcd import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/spc_outlooks.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_outlooks.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/spc_outlooks.py?help"""
from iemweb.request.gis.spc_outlooks import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/spc_watch.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_watch.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/spc_watch.py?help"""
from iemweb.request.gis.spc_watch import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/sps.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/sps.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/sps.py?help"""
from iemweb.request.gis.sps import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/watch_by_county.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/watch_by_county.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/watch_by_county.py?help"""
from iemweb.request.gis.watch_by_county import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/watchwarn.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/watchwarn.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/watchwarn.py?help"""
from iemweb.request.gis.watchwarn import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/gis/wpc_mpd.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/wpc_mpd.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/gis/wpc_mpd.py?help"""
from iemweb.request.gis.wpc_mpd import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/grx_rings.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/grx_rings.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/grx_rings.py?help"""
from iemweb.request.grx_rings import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/hads.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hads.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/hads.py?help"""
from iemweb.request.hads import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/hml.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hml.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/hml.py?help"""
from iemweb.request.hml import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/hourlyprecip.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hourlyprecip.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/hourlyprecip.py?help"""
from iemweb.request.hourlyprecip import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/index.php
================================================
<?php
header("Location: /api/");
================================================
FILE: cgi-bin/request/isusm.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/isusm.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/isusm.py?help"""
from iemweb.request.isusm import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/metars.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/metars.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/metars.py?help"""
from iemweb.request.metars import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/mos.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/mos.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/mos.py?help"""
from iemweb.request.mos import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/nass_iowa.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/nass_iowa.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/nass_iowa.py?help"""
from iemweb.request.nass_iowa import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/nlaeflux.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/nlaeflux.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/nlaeflux.py?help"""
from iemweb.request.nlaeflux import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/normals.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/normals.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/normals.py?help"""
from iemweb.request.normals import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/other.py
================================================
"""implemented in /pylib/iemweb/request/other.py"""
from iemweb.request.other import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/purpleair.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/purpleair.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/purpleair.py?help"""
from iemweb.request.purpleair import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/raob.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/raob.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/raob.py?help"""
from iemweb.request.raob import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/raster2netcdf.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/raster2netcdf.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/raster2netcdf.py?help"""
from iemweb.request.raster2netcdf import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/rwis.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/rwis.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/rwis.py?help"""
from iemweb.request.rwis import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/scan.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/scan.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/scan.py?help"""
from iemweb.request.scan import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/scp.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/scp.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/scp.py?help"""
from iemweb.request.scp import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/smos.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/smos.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/smos.py?help"""
from iemweb.request.smos import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/ss.py
================================================
"""implemented in /pylib/iemweb/request/ss.py"""
from iemweb.request.ss import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/taf.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/taf.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/taf.py?help"""
from iemweb.request.taf import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/talltowers.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/talltowers.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/talltowers.py?help"""
from iemweb.request.talltowers import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/tempwind_aloft.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/tempwind_aloft.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/tempwind_aloft.py?help"""
from iemweb.request.tempwind_aloft import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/uscrn.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/uscrn.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/uscrn.py?help"""
from iemweb.request.uscrn import application
__all__ = ["application"]
================================================
FILE: cgi-bin/request/wmo_bufr_srf.py
================================================
"""Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/wmo_bufr_srf.py
User documentation available at https://mesonet.agron.iastate.edu/cgi-bin/request/wmo_bufr_srf.py?help"""
from iemweb.request.wmo_bufr_srf import application
__all__ = ["application"]
================================================
FILE: cgi-bin/wms/goes/alaska_ir.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/alaska_ir.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/alaska_vis.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/alaska_vis.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/alaska_wv.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/alaska_wv.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/conus_ir.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/goes/conus_ir.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/conus_vis.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/goes/conus_vis.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/conus_wv.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/goes/conus_wv.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/east_ir.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/east_ir.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/east_vis.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/east_vis.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/east_wv.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/east_wv.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/goes.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/goes.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/hawaii_ir.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/hawaii_ir.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/hawaii_vis.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/hawaii_vis.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/hawaii_wv.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/hawaii_wv.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/west_ir.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/west_ir.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/west_vis.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/west_vis.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes/west_wv.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes/west_wv.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes_east.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes_east.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/goes_west.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/goes_west.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/hrrr/refd.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/model/hrrr_refd.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/hrrr/refp.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/model/hrrr_refp.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/idep.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/idep.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/index.php
================================================
<?php
Header("Location: /ogc");
================================================
FILE: cgi-bin/wms/iowa/rainfall.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/iowa/rainfall.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/iowa/roadcond.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/iowa/roadcond.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/daa.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/daa.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/dta.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/dta.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/eet.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/eet.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/n0q-t.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/n0q-t.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/n0r-t.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/nexrad/n0r-t.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/n1p.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/daa.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/net.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/nexrad/net.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/ntp.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/nexrad/dta.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/nexrad/ridge.cgi
================================================
#!/bin/sh
#echo -e "Content-type: text/plain\n\n"
#echo -e "\n"
#exit 0
MS_MAPFILE=/opt/iem/data/wms/nexrad/ridge.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/q2.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/q2.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/counties.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/political.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/mrms.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/us/mrms.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/mrms_nn.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/us/mrms_nn.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/obs.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/us/obs.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/roadtemps.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/us/roadtemps.map
export MS_MAPFILE
mapserv
================================================
FILE: cgi-bin/wms/us/states.cgi
================================================
#!/bin/sh
MS_MAPFILE=/opt/iem/data/wms/political.map
export MS_MAPFILE
mapserv
================================================
FILE: config/00iem-ssl.conf
================================================
<VirtualHost *:443>
# Use a daily deadicated log file, this avoids server reloads every day
# which are not much fun when servicing a 1,000 req/sec
CustomLog "|/usr/sbin/rotatelogs -l ${IEMWEBFARM_LOGROOT}/iemssl-%Y%m%d 86400" combined
SSLEngine on
# using ISU Certs due to cross-signing ugliness with LE and ancient kiosks
# https://mesonet.agron.iastate.edu/onsite/news.phtml?id=1423
# SSLCertificateChainFile was removed in Apache 2.4.8
# Termination happening at the F5, so the cert here is simple
# Note that I manually reorder the chain to put the ISU cert first
SSLCertificateFile /etc/pki/tls/iem.cert_and_chain
SSLCertificateKeyFile /etc/pki/tls/iem.key
Include conf.d/mesonet.inc
</VirtualHost>
================================================
FILE: config/00iem.conf
================================================
<VirtualHost *:80>
# Use a daily deadicated log file, this avoids server reloads every day
# which are not much fun when servicing a 1,000 req/sec
CustomLog "|/usr/sbin/rotatelogs -l ${IEMWEBFARM_LOGROOT}/iem-%Y%m%d 86400" combined
Include conf.d/mesonet.inc
</VirtualHost>
================================================
FILE: config/backend.conf
================================================
# It turns out that backending everything with one mapserv.fcgi instance
# was not ideal as having one slow node would quickly back everything up
# as other nodes could then not reach this backend. So instead, lets keep
# things isolated and make the nodes backend themselves
<VirtualHost *:80>
ServerName iem-backend.local
DocumentRoot /opt/iem/htdocs
# Don't log any accesses
CustomLog /dev/null common
# Point to system-installed mapserv binary (from conda env)
ScriptAlias /cgi-bin/mapserv/mapserv.fcgi ${IEMWEBFARM_MAPSERV}
ScriptAlias /cgi-bin/mapserv/mapserv ${IEMWEBFARM_MAPSERV}
<Location "/cgi-bin/mapserv">
SetHandler fcgid-script
Options +ExecCGI
</Location>
# Only need cgi-bin, note we have AllowOverride None, which saves a bit
# in performance as apache does not need to look for .htaccess with each
# request
ScriptAlias /cgi-bin/ "/opt/iem/cgi-bin/"
<Directory "/opt/iem/cgi-bin">
AllowOverride None
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
================================================
FILE: config/iem-archive.conf
================================================
# backend for /archive/data requests from webfarm
<VirtualHost *:80>
ServerName iem-archive.agron.iastate.edu
ServerAlias iem-archive.local
DocumentRoot /var/www/html
# Don't log any accesses
CustomLog /dev/null common
Alias /archive/data /mesonet/ARCHIVE/data
<Directory "/mesonet/ARCHIVE/data">
Options Indexes FollowSymLinks
IndexOptions NameWidth=*
AllowOverride None
Require all granted
</Directory>
</VirtualHost>
================================================
FILE: config/mesonet-longterm-vhost.conf
================================================
# apache vhost file for mesonet-longterm.agron.iastate.edu
# This now resides on anticyclone
<VirtualHost 129.186.185.7:80>
ServerName mesonet-longterm.agron.iastate.edu
ServerAlias mesonet-longterm.local
Alias "/archive/nexrad" "/mnt/mesonet2/longterm/nexrad3_iowa"
<Directory "/mnt/mesonet2/longterm/nexrad3_iowa">
# Need FollowSymLinks for mod_rewrite to work!
Options Indexes FollowSymLinks
Order allow,deny
Allow from all
</Directory>
Alias "/archive/gempak" "/mnt/mesonet2/longterm/gempak"
<Directory "/mnt/mesonet2/longterm/gempak">
# Need FollowSymLinks for mod_rewrite to work!
Options Indexes
Order allow,deny
Allow from all
</Directory>
Alias "/archive/raw" "/mnt/mesonet2/longterm/raw"
<Directory "/mnt/mesonet2/longterm/raw">
# Need FollowSymLinks for mod_rewrite to work!
Options Indexes
Order allow,deny
Allow from all
</Directory>
</VirtualHost>
================================================
FILE: config/mesonet.inc
================================================
# Apache vhost configuration for IEM
# mod_wsgi is configured from https://github.com/akrherz/iemwebfarm
# DirectoryIndex index.py
# WSGIDaemonProcess iemwsgi_ap processes=24 threads=1 display-name=%{GROUP} maximum-requests=100
Include /opt/iemwebfarm/config/vhost_common.conf
ServerName mesonet.agron.iastate.edu
ServerAlias www.mesonet.agron.iastate.edu
ServerAlias mesonet1.agron.iastate.edu
ServerAlias mesonet2.agron.iastate.edu
ServerAlias mesonet3.agron.iastate.edu
ServerAlias iem.local
ServerAdmin akrherz@iastate.edu
DocumentRoot /opt/iem/htdocs
# http://enable-cors.org/server_apache.html
Header set Access-Control-Allow-Origin "*"
# RewriteEngine is not enabled for vhosts by default
RewriteEngine On
# Useful for debugging
# LogLevel alert rewrite:trace3
Redirect permanent /archive/nexrad https://mesonet-longterm.agron.iastate.edu/archive/nexrad
Redirect permanent /archive/gempak https://mesonet-longterm.agron.iastate.edu/archive/gempak
Redirect permanent /archive/raw https://mesonet-longterm.agron.iastate.edu/archive/raw
Redirect permanent /data/nexrd2/raw https://nomads.ncep.noaa.gov/pub/data/nccf/radar/nexrad_level2
<Directory "/opt/iem/htdocs">
# Need FollowSymLinks for mod_rewrite to work!
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
# Default handler for python scripts
WSGIProcessGroup iemwsgi_ap
# Allow wsgi scripts to emit 404s that can come back to the handler.
# FIXME this causes all error handling to come back, which is a problem
# https://github.com/GrahamDumpleton/mod_wsgi/issues/825
# WSGIErrorOverride On
AddHandler wsgi-script .py
Options +ExecCGI
</Directory>
<Directory "/mesonet/ARCHIVE">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/mesonet/data">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
<Directory "/mesonet/share">
Options Indexes FollowSymLinks
AllowOverride None
Require all granted
</Directory>
# Point to system-installed mapserv binary (from conda env)
ScriptAlias /cgi-bin/mapserv/mapserv.fcgi ${IEMWEBFARM_MAPSERV}
ScriptAlias /cgi-bin/mapserv/mapserv ${IEMWEBFARM_MAPSERV}
<Location "/cgi-bin/mapserv">
SetHandler fcgid-script
Options +ExecCGI
</Location>
Alias /cgi-bin/ "/opt/iem/cgi-bin/"
<Directory "/opt/iem/cgi-bin">
AllowOverride None
Options FollowSymLinks
Require all granted
# Default handler for python scripts
WSGIProcessGroup iemwsgi_ap
AddHandler wsgi-script .py
AddHandler cgi-script .cgi
Options +ExecCGI
</Directory>
<LocationMatch "^/one(/index\.html)?$">
# Prevent caching of index.html
Header set Cache-Control "no-cache, no-store, must-revalidate"
Header set Pragma "no-cache"
Header set Expires "0"
</LocationMatch>
Alias /usage "/mesonet/share/usage/mesonet.agron.iastate.edu/"
<Directory "/mesonet/share/usage/mesonet.agron.iastate.edu/">
Options Indexes MultiViews
AllowOverride None
Require all granted
</Directory>
Alias /agclimate/usage "/mesonet/share/usage/agclimate/"
<Directory "/mesonet/share/usage/agclimate/">
Options Indexes MultiViews
AllowOverride None
Require all granted
</Directory>
<Directory "/opt/iem/htdocs/river">
RewriteRule wfo.phtml index.php
</Directory>
Alias /data "/mesonet/ldmdata"
<Directory "/mesonet/ldmdata">
Options Indexes MultiViews FollowSymLinks
AllowOverride None
Require all granted
Redirect permanent /data/gis/images/unproj /data/gis/images/4326
Redirect permanent /data/gis/shape/unproj /data/gis/shape/4326
</Directory>
Alias "/onsite/lapses" "/mesonet/share/lapses"
Alias "/onsite/windrose" "/mesonet/share/windrose"
Alias "/onsite/iemre" "/mesonet/data/iemre"
Alias "/onsite/iemre_china" "/mesonet/data/iemre_china"
Alias "/onsite/iemre_europe" "/mesonet/data/iemre_europe"
Alias "/onsite/iemre_sa" "/mesonet/data/iemre_sa"
Alias "/onsite/mrms" "/mesonet/data/mrms"
Alias "/onsite/prism" "/mesonet/data/prism"
Alias "/onsite/stage4" "/mesonet/data/stage4"
Alias "/onsite/era5land" "/mesonet/data/era5"
Alias "/present" "/mesonet/share/present"
Alias "/cases" "/mesonet/share/cases"
Alias "/GIS/data/gis" "/mesonet/data/gis"
Alias "/archive/awos" "/mesonet/ARCHIVE/awos"
Alias "/archive/raw" "/mesonet/ARCHIVE/raw"
# 7 Mar 2026 removeme at some point
Alias "/archive/rer" "/mesonet/ARCHIVE/rer"
Alias "/m/img" "/mesonet/share/iemmaps"
Alias "/sites/pics" "/mesonet/share/pics"
Alias "/climodat/reports" "/mesonet/share/climodat/reports"
Alias "/climodat/ks" "/mesonet/share/climodat/ks"
Alias "/pickup" "/mesonet/share/pickup"
<Directory "/mesonet/share/pickup">
AllowOverride None
Options FollowSymLinks Indexes MultiViews
Require all granted
</Directory>
Alias /tmp /var/webtmp
<Directory "/var/webtmp">
AllowOverride None
</Directory>
<Directory "/opt/iem/cgi-bin/wms/nexrad">
RewriteRule n0r.cgi /cgi-bin/mapserv/mapserv.fcgi?map=/opt/iem/data/wms/nexrad/n0r.map& [QSA,L]
RewriteRule n0q.cgi /cgi-bin/mapserv/mapserv.fcgi?map=/opt/iem/data/wms/nexrad/n0q.map& [QSA,L]
</Directory>
<Directory "/opt/iem/cgi-bin/wms/us">
RewriteRule wwa.cgi /cgi-bin/mapserv/mapserv.fcgi?map=/opt/iem/data/wms/us/wwa.map& [QSA,L]
</Directory>
<Proxy "http://127.0.0.1:9081/*">
# The backend doesn't really care about the hostname attm
ProxyPreserveHost Off
RequestHeader set "Host" "iem.local"
# Attempt to reduce random proxy noise
ProxySet connectiontimeout=5 timeout=55 retry=0 disablereuse=On
</Proxy>
ProxyPass /c http://127.0.0.1:9081/c
ProxyPass /cache http://127.0.0.1:9081/cache
<Directory "/opt/iem/htdocs/GIS">
RewriteRule vtec_(.*).png radmap.php?layers[]=places&layers[]=nexrad&layers[]=cities&layers[]=interstates&layers[]=uscounties&vtec=$1&width=797&height=400
</Directory>
<Directory "/opt/iem/htdocs/agclimate">
# Lots of old links out there to bad URIs
RewriteRule index\.(html|pl|php)$ /agclimate/ [R]
Redirect /agclimate/daily-pics https://mesonet.agron.iastate.edu/agclimate/daily_pics
Redirect /agclimate/daily_pics https://mesonet.agron.iastate.edu/data/agclimate
Redirect /agclimate/info.txt https://mesonet.agron.iastate.edu/agclimate/info.phtml
#
RewriteRule smplot/([0-9]{1,12})/(.*).png$ isusm.py?t=$1&v=$2
RewriteRule isusm.csv nmp_csv.py
</Directory>
<Directory "/opt/iem/htdocs/info">
RewriteRule datasets/([a-z_]+).html$ datasets.php?id=$1 [QSA]
RewriteRule datasets/?$ datasets.php [QSA]
</Directory>
<LocationMatch "/api/1">
# As a reminder, we are going via this route to take advantage of caching
# port 8080 is nginx, which proxies to fastapi on 8000
# Always immediately retry a connection
# We wait up to 5 seconds to connect to the remote server
# We wait up to 60 seconds for the remote server to respond
ProxyPass "http://iem-web-services.agron.iastate.edu:8080" retry=0 connectiontimeout=5 timeout=60
ProxyPassReverse "http://iem-web-services.agron.iastate.edu:8080"
ProxyErrorOverride On 502 503 504
ErrorDocument 502 /api/proxy_error_handler.py
ErrorDocument 503 /api/proxy_error_handler.py
ErrorDocument 504 /api/proxy_error_handler.py
</LocationMatch>
<Location "/archive/data">
RequestHeader set "Host" "iem-archive.local"
ProxyPreserveHost Off
# Send 404s back here
ProxyErrorOverride On
# hacky to keep the paths matching in auto-index
ProxyPass "http://iem-archive.local/archive/data"
ProxyPassReverse "http://iem-archive.local/archive/data"
</Location>
<Directory "/opt/iem/htdocs/content">
RewriteRule pil_([A-Z0-9]{3,6}).png$ pil.php?pil=$1
</Directory>
<Directory "/opt/iem/htdocs/sites">
# Allow for python scripts to act has directories NETWORK/SID/TOOL
RewriteRule ^([^/]{3,20})/([^/]{3,20})/([^/]+)$ $3.py
</Directory>
<Directory "/opt/iem/htdocs/wx/afos">
RewriteRule ([0-9]{12})_([A-Z0-9\s]+).png$ text2png.py?e=$1&pil=$2 [B,L]
</Directory>
<Directory "/opt/iem/pylib/iemweb/">
Require all granted
WSGIProcessGroup iemwsgi_ap
AddHandler wsgi-script .py
</Directory>
# note the preceding directory config
WSGIScriptAlias /geojson /opt/iem/pylib/iemweb/dispatch.py
WSGIScriptAlias /json /opt/iem/pylib/iemweb/dispatch.py
WSGIScriptAlias /search /opt/iem/pylib/iemweb/dispatch.py
WSGIScriptAlias /agclimate/ames_precip.py /opt/iem/pylib/iemweb/dispatch.py
WSGIScriptAlias /agclimate/isusm.py /opt/iem/pylib/iemweb/dispatch.py
WSGIScriptAlias /agclimate/nmp_csv.py /opt/iem/pylib/iemweb/dispatch.py
<Directory "/opt/iem/htdocs/iemre">
RewriteRule daily/([0-9\-]+)/([0-9\.\-]+)/([0-9\.\-]+)/(json) daily.py?date=$1&lat=$2&lon=$3&format=$4
RewriteRule hourly/([0-9\-]+)/([0-9\.\-]+)/([0-9\.\-]+)/(json) hourly.py?date=$1&lat=$2&lon=$3&format=$4
RewriteRule multiday/([0-9\-]+)/([0-9\-]+)/([0-9\.]+)/([0-9\.\-]+)/(json) multiday.py?sdate=$1&edate=$2&lat=$3&lon=$4&format=$5
RewriteRule cum/([0-9\-]+)/([0-9\-]+)/(shp) cum.py?date0=$1&date1=$2&format=$3&base=50&ceil=86
RewriteRule cumcounty/([0-9]+)/([0-9\-]+)/([0-9\-]+)/([0-9]+)/([0-9]+)/(json) cum.py?county=$1&date0=$2&date1=$3&format=$6&base=$4&ceil=$5
</Directory>
<Directory "/opt/iem/htdocs/kml">
RewriteRule roadcond.kml roadcond.php
RewriteRule roadcond_v2.kml roadcond.php?linewidth=6&maxtype=2
</Directory>
<Directory "/opt/iem/htdocs/nws">
RewriteRule days_since_([A-Z][A-Z])_([A-Z]).png /plotting/auto/plot/92/phenomena:$1::significance:$2::dpi:100.png
</Directory>
<Directory "/opt/iem/htdocs/onsite/features">
RewriteRule tags/([^\.]+)\.html tags/index.php?tag=$1 [L]
RewriteRule vote/(good|bad|abstain).json$ vote.py?vote=$1
RewriteRule vote.json$ vote.py
RewriteRule ^[0-9]{4}/[0-9]{2}/.*$ content.py [PT]
</Directory>
<Directory "/opt/iem/htdocs/current">
RewriteRule live/(.*).jpg live.py?id=$1 [L]
</Directory>
<Directory "/opt/iem/htdocs/plotting/auto">
RewriteRule qrcode/([0-9]{1,12})/(.*).png$ gen_qrcode.py?p=$1&q=$2&fmt=png [B]
RewriteRule plot/([0-9]{1,12})/(.*).(png|csv|txt|xlsx|js|geojson|pdf|svg|geotiff)$ autoplot.py?p=$1&q=$2&fmt=$3 [B]
RewriteRule meta/([0-9]{1,12}).json meta.py?p=$1 [QSA,B]
</Directory>
<Directory "/opt/iem/htdocs/request">
RewriteRule maxcsv/(.*).txt$ maxcsv.py?q=$1
RewriteRule grx/iadot_trucks.txt grx/iadot_trucks.py
# Legacy link was removed 5 Jan 2015
RewriteRule grx/idot_trucks.php grx/iadot_trucks.py
# PHP replaced by python 24 May 2020
RewriteRule grx/time_mot_loc.(php|txt) grx/time_mot_loc.py [QSA]
# .php was legacy stuff, lets not break old paths
RewriteRule grx/l3attr.(php|txt) grx/l3attr.py [QSA]
</Directory>
<Directory "/opt/iem/htdocs/roads">
RewriteRule kcau.jpg kcau.php
RewriteRule ktiv.jpg ktiv.php
RewriteRule kwwl.jpg kwwl.php?v2
</Directory>
<Directory "/opt/iem/htdocs/vtec">
RewriteRule ^event/.* index.py [L]
RewriteRule ([^\.]+)\.html index.py?vtec=$1 [L]
RewriteRule f/(.*)$ f.py [QSA]
</Directory>
<Directory "/opt/iem/htdocs/metadata/xml">
RewriteRule pl_(.*)_(.*).xml pl.py?network=$1&station=$2 [QSA]
RewriteRule sd_(.*)_(.*).xml sd.py?network=$1&station=$2 [QSA]
</Directory>
================================================
FILE: config/navbar.json
================================================
{
"tabs": [
{
"title": "Apps",
"subs": [
{
"title": "Application Index",
"url": "/apps.php"
},
{
"title": "Automated Data Plotting",
"url": "/plotting/auto/"
},
{
"title": "Climodat",
"url": "/climodat/"
},
{
"title": "Climodat Monitor",
"url": "/climodat/monitor.php"
},
{
"title": "IEM Explorer",
"url": "/explorer/"
},
{
"title": "Hourly Precip",
"url": "/rainfall/obhour.phtml"
},
{
"title": "Interactive Radar",
"url": "/GIS/apps/rview/warnings.phtml"
},
{
"title": "Pest Maps + Forecasting",
"url": "/topics/pests/"
},
{
"title": "Sortable Currents",
"url": "/my/current.phtml"
},
{
"title": "Time Machine",
"url": "/timemachine/"
},
{
"title": "Wind Roses",
"url": "/sites/windrose.phtml?station=AMW&network=IA_ASOS"
}
]
},
{
"title": "Areas",
"subs": [
{
"title": "Ag Weather/Climate Info",
"url": "/agweather/"
},
{
"title": "Archive Mainpage",
"url": "/archive/"
},
{
"title": "Climate Mainpage",
"url": "/climate/"
},
{
"title": "Current Mainpage",
"url": "/current/"
},
{
"title": "Drought",
"url": "/dm/"
},
{
"title": "GIS Mainpage",
"url": "/GIS/"
},
{
"title": "NWS Mainpage",
"url": "/nws/"
},
{
"title": "Severe Weather Mainpage",
"url": "/current/severe.phtml"
}
]
},
{
"title": "Datasets",
"subs": [
{
"title": "Daily Climatology",
"url": "/COOP/extremes.php"
},
{
"title": "Daily Observations",
"url": "/request/daily.phtml"
},
{
"title": "Dataset Documentation",
"url": "/info/datasets/"
},
{
"title": "IEM Reanalysis",
"url": "/iemre/"
},
{
"title": "Model Output Statistics",
"url": "/mos/"
},
{
"title": "NEXRAD Mosaic",
"url": "/docs/nexrad_mosaic/"
},
{
"title": "PIREP - Pilot Reports",
"url": "/request/gis/pireps.php"
},
{
"title": "Roads Mainpage",
"url": "/roads/"
},
{
"title": "RADAR & Satellite",
"url": "/current/radar.phtml"
},
{
"title": "Rainfall Data",
"url": "/rainfall/"
},
{
"title": "Sounding Archive",
"url": "/archive/raob/"
},
{
"title": "Soil Moisture Satellite",
"url": "/smos/"
}
]
},
{
"title": "Info",
"subs": [
{
"title": "Info Mainpage",
"url": "/info.php"
},
{
"title": "Daily Features",
"url": "/onsite/features/past.php"
},
{
"title": "Links",
"url": "/info/links.php"
},
{
"title": "News",
"url": "/onsite/news.phtml"
},
{
"title": "Presentations",
"url": "/present/"
},
{
"title": "Referenced By",
"url": "/info/refs.php"
},
{
"title": "Station Data and Metadata",
"url": "/sites/locate.php"
},
{
"title": "Quality Control",
"url": "/QC/"
},
{
"title": "Variables",
"url": "/info/variables.phtml"
}
]
},
{
"title": "Networks",
"subs": [
{
"title": "Network Tables",
"url": "/sites/networks.php"
},
{
"title": "ASOS/AWOS Airports",
"url": "/ASOS/"
},
{
"title": "CoCoRaHS - Citizen Science",
"url": "/cocorahs/"
},
{
"title": "DCP/HADS/SHEF - Hydrological",
"url": "/DCP/"
},
{
"title": "NWS COOP - Daily Climate",
"url": "/COOP/"
},
{
"title": "ISU Soil Moisture",
"url": "/agclimate/"
},
{
"title": "NLAE Flux",
"url": "/nstl_flux/"
},
{
"title": "RWIS - Roadway Weather",
"url": "/RWIS/"
},
{
"title": "SCAN - NRCS Soil Climate",
"url": "/scan/"
},
{
"title": "Other",
"url": "/other/"
},
{
"title": "US Climate Reference",
"url": "/uscrn/"
}
]
},
{
"title": "NWS Data",
"subs": [
{
"title": "NWS Mainpage",
"url": "/nws/"
},
{
"title": "Local Storm Report App",
"url": "/lsr/"
},
{
"title": "IEM Cow (SBW Verification)",
"url": "/cow/"
},
{
"title": "IEM Raccoon (SBW Powerpoints)",
"url": "/raccoon/"
},
{
"title": "River Summary",
"url": "/river/"
},
{
"title": "Satellite Data",
"url": "/GIS/goes.phtml"
},
{
"title": "Search for Warnings",
"url": "/vtec/search.php"
},
{
"title": "Special Weather Statement (SPS) Search",
"url": "/nws/sps_search/"
},
{
"title": "SPC Convective Outlook / MCD Search",
"url": "/nws/spc_outlook_search/"
},
{
"title": "SPC Watches",
"url": "/GIS/apps/rview/watch.phtml"
},
{
"title": "Text Archives Mainpage",
"url": "/nws/text.php"
},
{
"title": "Text Listing by WFO/Center/Product",
"url": "/wx/afos/list.phtml"
},
{
"title": "Text by Product ID",
"url": "/wx/afos/"
},
{
"title": "VTEC Browser",
"url": "/vtec/"
}
]
},
{
"title": "Services",
"subs": [
{
"title": "API Mainpage",
"url": "/api/"
},
{
"title": "CGI / Bulk Data",
"url": "/api/#cgi"
},
{
"title": "Gibson Ridge Placefiles",
"url": "/request/grx/"
},
{
"title": "iembot",
"url": "/projects/iembot/"
},
{
"title": "JSON Webservices",
"url": "/api/#json"
},
{
"title": "LDM",
"url": "/request/ldm.php"
},
{
"title": "Max CSV",
"url": "/request/maxcsv.py?help"
},
{
"title": "OGC Webservices",
"url": "/ogc/"
},
{
"title": "RadMap API",
"url": "/GIS/radmap_api.phtml"
},
{
"title": "RADAR Services",
"url": "/GIS/radview.phtml"
}
]
},
{
"title": "Webcams",
"subs": [
{
"title": "Webcam mainpage",
"url": "/projects/webcam.php"
},
{
"title": "Build your own lapses",
"url": "/current/bloop.phtml"
},
{
"title": "Cool lapses",
"url": "/cool/"
},
{
"title": "IEM Webcam Viewer",
"url": "/current/viewer.phtml"
},
{
"title": "ISU Campus Webcams",
"url": "/current/isucams.phtml"
},
{
"title": "Recent lapses",
"url": "/current/camlapse/"
},
{
"title": "Still images",
"url": "/current/webcam.php"
}
]
}
]
}
================================================
FILE: config/settings.inc.php.in
================================================
<?php
/**
* This is a template file for the settings.inc.php file that is used to
* configure the IEM. You should copy this file to settings.inc.php and
* edit it to match your configuration.
*/
// Ensure our dates default to Iowa
date_default_timezone_set('America/Chicago');
class IEMConfig{
// How internal code finds a webserver to make calls to
const INTERNAL_BASEURL = "http://iem.local"; // no trail slash
// How we document references to this server to the outside world
const EXTERNAL_BASEURL = "https://mesonet.agron.iastate.edu"; // no trail slash
// Bing Maps API Key
const BING_MAPS_API_KEY = "...";
}
// Shortcuts to allow usage in string blocks
$INTERNAL_BASEURL = IEMConfig::INTERNAL_BASEURL;
$EXTERNAL_BASEURL = IEMConfig::EXTERNAL_BASEURL;
$BING_MAPS_API_KEY = IEMConfig::BING_MAPS_API_KEY;
// Legacy cruft to remove
$fb_feature_key='';
$fb_feature_secret='';
$fb_feature_id='';
================================================
FILE: conftest.py
================================================
"""Centralized Testing Stuff."""
import pytest
from pyiem.database import get_dbconnc
@pytest.fixture
def dbcursor(database: str):
"""Yield a cursor for the given database."""
dbconn, cursor = get_dbconnc(database)
yield cursor
cursor.close()
dbconn.close()
================================================
FILE: data/gis/avl/iemrainfall.avl
================================================
/3.1
(ODB.1
FirstRootClassName: "Legend"
Roots: 2
Version: 31
)
(Legend.2
SymType: 0x02
LegType: 0x02
ClassType: 0x03
FieldNames: 3
Symbols: 4
Class: 49
Class: 50
Class: 51
Class: 52
Class: 53
Class: 54
Class: 55
Class: 56
Class: 57
Class: 58
Class: 59
StdDevs: 1.00000000000000
NullSym: 60
NullValues: 64
StatValues: 65
Precision: -3
)
(AVStr.3
S: "Rainfall"
)
(SymList.4
Child: 5
Child: 9
Child: 13
Child: 17
Child: 21
Child: 25
Child: 29
Child: 33
Child: 37
Child: 41
Child: 45
)
(BShSym.5
Color: 6
OutlineColor: 7
OutlineWidth: 0.10000000000000
BgColor: 8
)
(TClr.6
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(TClr.7
)
(TClr.8
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.9
Color: 10
OutlineColor: 11
OutlineWidth: 0.10000000000000
BgColor: 12
)
(TClr.10
Red: 0xc3b5
Green: 0xff00
Blue: 0xc33b
)
(TClr.11
)
(TClr.12
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.13
Color: 14
OutlineColor: 15
OutlineWidth: 0.10000000000000
BgColor: 16
)
(TClr.14
Green: 0xffff
)
(TClr.15
)
(TClr.16
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.17
Color: 18
OutlineColor: 19
OutlineWidth: 0.10000000000000
BgColor: 20
)
(TClr.18
Red: 0x189
Green: 0x8200
Blue: 0x81
)
(TClr.19
)
(TClr.20
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.21
Color: 22
OutlineColor: 23
OutlineWidth: 0.10000000000000
BgColor: 24
)
(TClr.22
Red: 0xae6d
Green: 0xa559
Blue: 0xff00
)
(TClr.23
)
(TClr.24
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.25
Color: 26
OutlineColor: 27
OutlineWidth: 0.10000000000000
BgColor: 28
)
(TClr.26
Blue: 0xffff
)
(TClr.27
)
(TClr.28
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.29
Color: 30
OutlineColor: 31
OutlineWidth: 0.10000000000000
BgColor: 32
)
(TClr.30
Red: 0xdc00
Green: 0xdb
Blue: 0xdb
)
(TClr.31
)
(TClr.32
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.33
Color: 34
OutlineColor: 35
OutlineWidth: 0.10000000000000
BgColor: 36
)
(TClr.34
Red: 0x6400
Green: 0x63
Blue: 0x6025
)
(TClr.35
)
(TClr.36
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.37
Color: 38
OutlineColor: 39
OutlineWidth: 0.10000000000000
BgColor: 40
)
(TClr.38
Red: 0xae0b
Green: 0x13e
Blue: 0x313d
)
(TClr.39
)
(TClr.40
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.41
Color: 42
OutlineColor: 43
OutlineWidth: 0.10000000000000
BgColor: 44
)
(TClr.42
Red: 0xfb84
Green: 0x6a67
Blue: 0xa6ed
)
(TClr.43
)
(TClr.44
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(BShSym.45
Color: 46
Outline: 1
OutlineColor: 47
OutlineWidth: 0.10000000000000
BgColor: 48
)
(TClr.46
Name: "Transparent"
)
(TClr.47
Name: "Transparent"
)
(TClr.48
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(LClass.49
Label: "0 - 0.01"
MaxNum: 0.01000000000000
Precision: -3
)
(LClass.50
Label: "0.02 - 0.04"
MinNum: 0.02000000000000
MaxNum: 0.04000000000000
Precision: -3
)
(LClass.51
Label: "0.05 - 0.24"
MinNum: 0.05000000000000
MaxNum: 0.24000000000000
Precision: -3
)
(LClass.52
Label: "0.25 - 0.49"
MinNum: 0.25000000000000
MaxNum: 0.49000000000000
Precision: -3
)
(LClass.53
Label: "0.5 - 0.74"
MinNum: 0.50000000000000
MaxNum: 0.74000000000000
Precision: -3
)
(LClass.54
Label: "0.75 - 0.99"
MinNum: 0.75000000000000
MaxNum: 0.99000000000000
Precision: -3
)
(LClass.55
Label: "1 - 1.99"
MinNum: 1.00000000000000
MaxNum: 1.99000000000000
Precision: -3
)
(LClass.56
Label: "2 - 3.99"
MinNum: 2.00000000000000
MaxNum: 3.99000000000000
Precision: -3
)
(LClass.57
Label: "4 - 5.99"
MinNum: 4.00000000000000
MaxNum: 5.99000000000000
Precision: -3
)
(LClass.58
Label: "6 - 12"
MinNum: 6.00000000000000
MaxNum: 12.00000000000000
Precision: -3
)
(LClass.59
IsNoData: 1
Label: "No Data"
MaxNum: -1.00000000000000
Precision: -3
)
(BShSym.60
Color: 61
Outline: 1
OutlineColor: 62
OutlineWidth: 0.10000000000000
BgColor: 63
)
(TClr.61
Name: "Transparent"
)
(TClr.62
Name: "Transparent"
)
(TClr.63
Red: 0xffff
Green: 0xffff
Blue: 0xffff
)
(NameDict.64
)
(NameDict.65
)
================================================
FILE: data/gis/base.sym
================================================
SYMBOLSET
SYMBOL
NAME 'circle'
TYPE ELLIPSE
Filled TRUE
POINTS 1 1 END
END
SYMBOL
NAME "triangle"
TYPE vector
POINTS
0 4
2 0
4 4
0 4
END
END
SYMBOL
NAME "tornado"
TYPE vector
FILLED TRUE
POINTS
0 0
2 4
4 0
0 0
END
END
Symbol
Name 'iem_logo'
Type PIXMAP
Image 'symbols/iem_logo.png'
Transparent 0
END
Symbol
Name 'arrow'
Type PIXMAP
Image 'symbols/arrow.gif'
Transparent 2
END
Symbol
Name 'interstate_shield'
Type PIXMAP
Image 'symbols/interstate-2.png'
Transparent 0
END
END
================================================
FILE: data/gis/fonts.list
================================================
liberation-bold /usr/share/fonts/liberation-serif/LiberationSerif-Bold.ttf
liberation /usr/share/fonts/liberation-serif/LiberationSerif-Regular.ttf
liberation-mono /usr/share/fonts/liberation-mono/LiberationMono-Regular.ttf
weather weather.ttf
esri34 esri_34.ttf
================================================
FILE: data/gis/iem.mapinc
================================================
#
# AWIPS Cities
#
LAYER
NAME 'cities'
METADATA
"wms_title" "city"
END
PROJECTION
"init=epsg:4326"
END
STATUS OFF
TYPE POINT
DATA "/mesonet/data/gis/static/shape/4326/nws/cities.shp"
LABELITEM 'name'
LABELCACHE TRUE
CLASS
LABEL
COLOR 255 255 153
OUTLINECOLOR 0 0 0
FONT "liberation-bold"
TYPE truetype
SIZE 11
OFFSET 0 2
BUFFER 40
ANGLE AUTO
POSITION UC
PARTIALS FALSE
PRIORITY 10
STYLE
SYMBOL 'circle'
COLOR 0 0 0
SIZE 4
END
END
END
END
# Credits
LAYER
NAME "bar640t-title"
TYPE POINT
STATUS OFF
TRANSFORM FALSE
LABELCACHE OFF
CLASS
NAME 's14y'
LABEL
COLOR 255 255 0
TYPE TRUETYPE
SIZE 14
FONT 'liberation'
POSITION CR
END
END
CLASS
NAME 's12w'
LABEL
COLOR 255 255 255
TYPE TRUETYPE
SIZE 12
FONT 'liberation'
POSITION CR
END
END
END
LAYER
CONNECTIONTYPE postgis
NAME airtemps
# Connect to a remote spatial database
CONNECTION "user=nobody dbname=iem host=iemdb-iem.local"
# Get the lines from the 'geom' column of the 'roads' table
DATA "geom from (select geom, round(tmpf::numeric,0) as tmpf,
c.iemid as foid from current c JOIN stations t ON (t.iemid = c.iemid)
WHERE (valid > CURRENT_TIMESTAMP - '70 minutes'::interval)
and tmpf is not null
) as foo using unique foid using srid=4326"
STATUS OFF
TYPE POINT
LABELCACHE ON
PROJECTION
"init=epsg:4326"
END
CLASS
EXPRESSION ([tmpf] >= 35 AND [tmpf] < 120)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 30 190 20
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] >= 34)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 215 255 0
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] >= 33)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 255 164 0
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] >= 32)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 255 50 0
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] >= 31)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
COLOR 255 0 144
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] >= 30)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
#COLOR 232 164 226
COLOR 255 0 255
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
CLASS
EXPRESSION ([tmpf] > -40)
TEXT ([tmpf])
STYLE
COLOR -1 -1 -1
END
LABEL
#COLOR 232 214 226
COLOR 255 255 255
OUTLINECOLOR 0 0 0
TYPE TRUETYPE
FONT 'liberation'
SIZE 10
POSITION UL
OFFSET 2 2
BUFFER 1
PARTIALS TRUE
FORCE FALSE
END
END
END
#
# Generic stuff useful to all IEM base*.map
#
# USDM!
LAYER
NAME usdm
STATUS OFF
TYPE LINE
DATA /mesonet/ldmdata/gis/shape/4326/us/dm_current.shp
PROJECTION
"init=epsg:4326"
END
CLASSITEM "DM"
CLASS
EXPRESSION /0/
STYLE
COLOR 100 0 0
SIZE 4
SYMBOL 'circle'
END
TEXT "D0"
LABEL
COLOR 255 255 255
END
END
CLASS
EXPRESSION /1/
TEXT "D1"
STYLE
COLOR 120 0 0
SIZE 4
SYMBOL 'circle'
END
LABEL
COLOR 255 255 255
END
END
CLASS
EXPRESSION /2/
TEXT "D2"
STYLE
COLOR 160 0 0
SIZE 4
SYMBOL 'circle'
END
LABEL
COLOR 255 255 255
END
END
CLASS
EXPRESSION /3/
TEXT "D3"
STYLE
COLOR 200 0 0
SYMBOL 'circle'
SIZE 4
END
LABEL
COLOR 255 255 255
END
END
CLASS
EXPRESSION /4/
TEXT "D4"
STYLE
COLOR 255 0 0
SIZE 4
SYMBOL 'circle'
END
LABEL
COLOR 255 255 255
END
END
END
LAYER
NAME "iem_headerbar"
TYPE POLYGON
TRANSFORM FALSE
UNITS pixels
FEATURE
POINTS 0 0 0 53 2000 53 2000 0 0 0 END
END
STATUS OFF
LABELCACHE OFF
CLASS
STYLE
COLOR 0 0 0
END
END
END
LAYER
NAME "iem_headerbar_logo"
TYPE POINT
TRANSFORM FALSE
LABELCACHE ON
UNITS pixels
FEATURE
POINTS 40 30 END
END
STATUS OFF
LABELCACHE OFF
CLASS
STYLE
SYMBOL 'iem_logo'
END
END
END
LAYER
NAME "iem_headerbar_title"
TYPE POINT
STATUS OFF
LABELCACHE ON
TRANSFORM FALSE
UNITS pixels
CLASS
LABEL
COLOR 255 255 0
TYPE TRUETYPE
SIZE 18
FONT 'liberation-bold'
POSITION UR
FORCE TRUE
PARTIALS TRUE
END
END
CLASS
LABEL
COLOR 255 255 255
TYPE TRUETYPE
SIZE 12
FONT 'liberation-mono'
POSITION UR
FORCE TRUE
PARTIALS TRUE
END
END
END
LAYER
NAME "station_plot"
TYPE POINT
PROJECTION
"init=epsg:4326"
END
LABELCACHE ON
STATUS OFF
CLASS
NAME "station-cr"
STYLE
COLOR 0 0 0
END
LABEL
COLOR 0 0 0
FONT 'liberation'
POSITION CR
TYPE TRUETYPE
FORCE TRUE
SIZE 12
PARTIALS FALSE
END
END
CLASS
NAME "station-ul"
STYLE
COLOR 0 0 0
END
LABEL
COLOR 255 0 0
FONT 'liberation'
POSITION UL
TYPE TRUETYPE
FORCE TRUE
SIZE 12
PARTIALS FALSE
END
END
CLASS
NAME "station-ll"
STYLE
COLOR 0 0 255
END
LABEL
COLOR 0 0 255
FONT 'liberation'
POSITION LL
TYPE TRUETYPE
FORCE TRUE
SIZE 12
PARTIALS FALSE
END
END
END
LAYER
NAME cwas
STATUS OFF
TYPE POLYGON
DATA /mesonet/data/gis/static/shape/4326/nws/cwas.shp
PROJECTION
"init=epsg:4326"
END
LABELITEM "WFO"
CLASS
STYLE
OUTLINECOLOR 255 165 0
END
LABEL
MINFEATURESIZE 50
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION CC
PARTIALS FALSE
END
END
END
LAYER
NAME cwsu
STATUS OFF
TYPE POLYGON
DATA /mesonet/data/gis/static/shape/4326/nws/cwsu.shp
PROJECTION
"init=epsg:4326"
END
LABELITEM "ID"
CLASS
STYLE
OUTLINECOLOR 255 165 0
END
LABEL
MINFEATURESIZE 50
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION CC
PARTIALS FALSE
END
END
END
LAYER
CONNECTIONTYPE postgis
NAME warnings0_c
CONNECTION "user=nobody dbname=postgis host=iemdb-postgis.local"
DATA "geom from (select phenomena, significance, u.geom, random() as oid from warnings w JOIN ugcs u on (u.gid = w.gid) WHERE expire > CURRENT_TIMESTAMP) as foo using unique oid using SRID=4326"
STATUS OFF
TYPE LINE
PROJECTION
"init=epsg:4326"
END
CLASS
NAME "Flash Flood Warn"
EXPRESSION (('[phenomena]' = 'FF' or '[phenomena]' = 'MA') and '[significance]' = 'W')
STYLE
COLOR 0 255 0
SIZE 2
SYMBOL 'circle'
END
END
CLASS
NAME "Svr T'storm Warn"
EXPRESSION ('[phenomena]' = 'SV' and '[significance]' = 'W')
STYLE
COLOR 0 0 0
SIZE 4
SYMBOL 'circle'
END
STYLE
COLOR 255 255 0
SIZE 2
SYMBOL 'circle'
END
END
CLASS
NAME "Tornado Warn"
EXPRESSION ('[phenomena]' = 'TO' and '[significance]' = 'W')
STYLE
COLOR 0 0 0
SIZE 4
SYMBOL 'circle'
END
STYLE
COLOR 255 0 0
SIZE 2
SYMBOL 'circle'
END
END
# Advisories
CLASS
NAME "Winter Advisory"
EXPRESSION (('[phenomena]' = 'WW' or '[phenomena]' = 'BZ' or '[phenomena]' = 'WS' or '[phenomena]' = 'IP' or '[phenomena]' = 'HP' or '[phenomena]' = 'ZR' or '[phenomena]' = 'IS') and '[significance]' = 'Y')
STYLE
COLOR 222 184 135
SIZE 3
SYMBOL 'circle'
END
#STYLE
# COLOR 222 184 135
# SIZE 1
# SYMBOL 'circle'
#END
END
# Snow and Blowing snow
CLASS
NAME "Sn or Blow Sn Adv"
EXPRESSION (('[phenomena]' = 'LE' or '[phenomena]' = 'SN' or '[phenomena]' = 'BS' or '[phenomena]' = 'SB') and '[significance]' = 'Y')
STYLE
COLOR 176 224 230
SIZE 3
SYMBOL 'circle'
END
STYLE
COLOR 255 255 255
SIZE 1
SYMBOL 'circle'
END
END
# Heavy Snow
CLASS
NAME "Heavy Snow Warn"
EXPRESSION ('[phenomena]' = 'HS' and '[significance]' = 'W')
STYLE
COLOR 138 43 226
SIZE 3
SYMBOL 'circle'
END
STYLE
COLOR 255 255 255
SIZE 1
SYMBOL 'circle'
END
END
# WW Warning
CLASS
NAME "Winter Storm Warn"
EXPRESSION (('[phenomena]' = 'LE' or '[phenomena]' = 'WS' or '[phenomena]' = 'WW') and '[significance]' = 'W')
STYLE
COLOR 255 105 180
SIZE 3
SYMBOL 'circle'
END
END
# Sleet Fz
CLASS
NAME "Ice/Frz/Sleet Warn"
EXPRESSION (('[phenomena]' = 'IP' or '[phenomena]' = 'HP' or '[phenomena]' = 'ZR' or '[phenomena]' = 'IS') and '[significance]' = 'W')
STYLE
COLOR 255 20 147
SIZE 3
SYMBOL 'circle'
END
END
# Blizzard
CLASS
NAME "Blizzard Warn"
EXPRESSION ('[phenomena]' = 'BZ' and '[significance]' = 'W')
STYLE
COLOR 255 0 0
SIZE 3
SYMBOL 'circle'
END
END
# Freeze Warning
CLASS
NAME "Freeze Warn"
EXPRESSION ('[phenomena]' = 'FZ' and '[significance]' = 'W')
STYLE
COLOR 255 0 0
SIZE 3
SYMBOL 'circle'
END
END
# Marine Statement?
CLASS
NAME "Marine Statement"
EXPRESSION ('[phenomena]' = 'MA' and '[significance]' = 'S')
STYLE
COLOR 0 200 0
SIZE 3
SYMBOL 'circle'
END
END
END
# Bar Header Bar!
LAYER
NAME bar640t
TYPE POLYGON
TRANSFORM FALSE
STATUS OFF
FEATURE
POINTS 0 0 0 36 640 36 640 0 0 0 END
END
LABELCACHE FALSE
CLASS
STYLE
COLOR 0 0 0
END
END
END
LAYER
NAME "n0q-ramp"
TYPE POINT
STATUS default
TRANSFORM FALSE
CLASS
LABEL
END
STYLE
SYMBOL 'n0q-ramp'
COLOR 0 0 0
END
END
END
# IEM Logo
LAYER
NAME logo
TYPE POINT
STATUS default
TRANSFORM FALSE
FEATURE
WKT "POINT(100 100)"
END
CLASS
STYLE
SYMBOL 'iem_logo'
END
END
END
LAYER
NAME "n0r-ramp"
TYPE POINT
STATUS default
TRANSFORM FALSE
CLASS
LABEL
END
STYLE
SYMBOL 'n0r-ramp'
COLOR 0 0 0
END
END
END
================================================
FILE: data/gis/lsrs.mapinc
================================================
LAYER
CONNECTIONTYPE postgis
NAME lsrs
CONNECTION "user=nobody dbname=postgis host=iemdb-postgis.local"
DATA "geom from (select distinct city, magnitude, valid, geom, type as ltype, city || magnitude || x(geom) || y(geom) as k from lsrs WHERE valid > 'YESTERDAY'::timestamp) as foo USING unique k USING SRID=4326 "
STATUS OFF
TYPE POINT
PROJECTION
"init=epsg:4326"
END
CLASSITEM "ltype"
CLASS
EXPRESSION /W/
TEXT 'WATERSPOUT'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'tornado'
SIZE 10
END
END
CLASS
EXPRESSION /G/
TEXT 'G[magnitude] MPH'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 10
END
END
CLASS
EXPRESSION /M/
TEXT 'G[magnitude] MPH'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 10
END
END
CLASS
EXPRESSION /T/
TEXT 'TORNADO [magnitude]'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'tornado'
SIZE 10
END
END
CLASS
EXPRESSION /R/
TEXT 'HEAVY RAIN [magnitude]'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 10
END
END
CLASS
EXPRESSION /F/
TEXT 'FLASH FLOOD'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 10
END
END
CLASS
EXPRESSION /H/
TEXT 'HAIL [magnitude]'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'triangle'
SIZE 10
END
END
CLASS
EXPRESSION /S/
TEXT 'SNOW [magnitude]inch'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 7
END
END
CLASS
EXPRESSION /5/
TEXT 'ICE [magnitude]inch'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'circle'
SIZE 7
END
END
CLASS
EXPRESSION /D/
TEXT 'WND DMG [city]'
LABEL
OUTLINECOLOR 0 0 0
COLOR 255 255 255
TYPE BITMAP
SIZE MEDIUM
POSITION AUTO
PARTIALS FALSE
END
STYLE
COLOR 255 255 255
SYMBOL 'triangle'
SIZE 10
END
END
END
================================================
FILE: data/gis/meta/26914.prj
================================================
PROJCS["NAD_1983_UTM_Zone_14N",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-99.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
================================================
FILE: data/gis/meta/26915.prj
================================================
PROJCS["NAD_1983_UTM_Zone_15N",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Transverse_Mercator"],PARAMETER["False_Easting",500000.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-93.0],PARAMETER["Scale_Factor",0.9996],PARAMETER["Latitude_Of_Origin",0.0],UNIT["Meter",1.0]]
================================================
FILE: data/gis/meta/5070.prj
================================================
PROJCS["NAD_1983_Contiguous_USA_Albers",GEOGCS["GCS_North_American_1983",DATUM["D_North_American_1983",SPHEROID["GRS_1980",6378137.0,298.257222101]],PRIMEM["Greenwich",0.0],UNIT["Degree",0.0174532925199433]],PROJECTION["Albers"],PARAMETER["False_Easting",0.0],PARAMETER["False_Northing",0.0],PARAMETER["Central_Meridian",-96.0],PARAMETER["Standard_Parallel_1",29.5],PARAMETER["Standard_Parallel_2",45.5],PARAMETER["Latitude_Of_Origin",23.0],UNIT["Meter",1.0]]
================================================
FILE: data/gis/meta/current_ww.shp.xml
================================================
<?xml version="1.0"?>
<!--<!DOCTYPE metadata SYSTEM "http://www.esri.com/metadata/esriprof80.dtd">-->
<metadata xml:lang="en"><Esri><MetaID>{FE96CD88-E2E3-4F1F-80D8-3DA8C64033D4}</MetaID><CreaDate>20080625</CreaDate><CreaTime>11070300</CreaTime><SyncOnce>FALSE</SyncOnce><SyncDate>20080625</SyncDate><SyncTime>11173200</SyncTime><ModDate>20080625</ModDate><ModTime>11232900</ModTime></Esri><idinfo><native>Red Hat Enterprise Linux 5; PostGIS</native><descript><langdata Sync="TRUE">en</langdata><abstract>Shapefile of National Weather Service issued short and long fuse watch/warning/advisories. This file is by no means complete, but covers most of the high impact weather statements.</abstract><purpose>Provide GIS users with something usable without worry about parsing lots of nasty text formats :)</purpose></descript><citation><citeinfo><origin>REQUIRED: The name of an organization or individual that developed the data set.</origin><pubdate>REQUIRED: The date when the data set is published or otherwise made available for release.</pubdate><title>Current Watch Warnings</title><ftname Sync="TRUE">current_ww</ftname><geoform Sync="TRUE">vector digital data</geoform><onlink Sync="TRUE">\\AKRHERZ-VM222\C$\Documents and Settings\akrherz\Desktop\IEM\current_ww.shp</onlink></citeinfo></citation><timeperd><current>publication date</current><timeinfo><sngdate><caldate>unknown</caldate></sngdate></timeinfo></timeperd><status><progress>In work</progress><update>Continually</update></status><spdom><bounding><westbc Sync="TRUE">-112.700000</westbc><eastbc Sync="TRUE">-66.566666</eastbc><northbc Sync="TRUE">48.645798</northbc><southbc Sync="TRUE">18.150459</southbc></bounding><lboundng><leftbc Sync="TRUE">-112.700000</leftbc><rightbc Sync="TRUE">-66.566666</rightbc><bottombc Sync="TRUE">18.150459</bottombc><topbc Sync="TRUE">48.645798</topbc></lboundng></spdom><keywords><theme><themekt>unknown</themekt><themekey>warnings, nws</themekey></theme></keywords><accconst>None</accconst><useconst>None</useconst><natvform Sync="TRUE">Shapefile</natvform><ptcontac><cntinfo><cntperp><cntper>Daryl Herzmann</cntper><cntorg>Iowa State University</cntorg></cntperp><cntpos>Assistant Scientist</cntpos><cntvoice>515 294 5978</cntvoice><cntemail>akrherz@iastate.edu</cntemail></cntinfo></ptcontac><datacred>National Weather Service</datacred><secinfo><secclass>Unclassified</secclass></secinfo></idinfo><dataIdInfo><envirDesc Sync="TRUE">Microsoft Windows XP Version 5.1 (Build 2600) Service Pack 3; ESRI ArcCatalog 9.2.4.1420</envirDesc><dataLang><languageCode Sync="TRUE" value="en"></languageCode></dataLang><idCitation><resTitle Sync="TRUE">current_ww</resTitle><presForm><PresFormCd Sync="TRUE" value="005"></PresFormCd></presForm></idCitation><spatRpType><SpatRepTypCd Sync="TRUE" value="001"></SpatRepTypCd></spatRpType><dataExt><geoEle><GeoBndBox esriExtentType="native"><westBL Sync="TRUE">-112.7</westBL><eastBL Sync="TRUE">-66.566666</eastBL><northBL Sync="TRUE">48.645798</northBL><southBL Sync="TRUE">18.150459</southBL><exTypeCode Sync="TRUE">1</exTypeCode></GeoBndBox></geoEle></dataExt><geoBox esriExtentType="decdegrees"><westBL Sync="TRUE">-112.7</westBL><eastBL Sync="TRUE">-66.566666</eastBL><northBL Sync="TRUE">48.645798</northBL><southBL Sync="TRUE">18.150459</southBL><exTypeCode Sync="TRUE">1</exTypeCode></geoBox></dataIdInfo><metainfo><langmeta Sync="TRUE">en</langmeta><metstdn Sync="TRUE">FGDC Content Standards for Digital Geospatial Metadata</metstdn><metstdv Sync="TRUE">FGDC-STD-001-1998</metstdv><mettc Sync="TRUE">local time</mettc><metc><cntinfo><cntorgp><cntper>REQUIRED: The person responsible for the metadata information.</cntper><cntorg>REQUIRED: The organization responsible for the metadata information.</cntorg></cntorgp><cntaddr><addrtype>REQUIRED: The mailing and/or physical address for the organization or individual.</addrtype><city>REQUIRED: The city of the address.</city><state>REQUIRED: The state or province of the address.</state><postal>REQUIRED: The ZIP or other postal code of the address.</postal></cntaddr><cntvoice>REQUIRED: The telephone number by which individuals can speak to the organization or individual.</cntvoice></cntinfo></metc><metd Sync="TRUE">20080625</metd><metextns><onlink Sync="TRUE">http://www.esri.com/metadata/esriprof80.html</onlink><metprof Sync="TRUE">ESRI Metadata Profile</metprof></metextns></metainfo><mdLang><languageCode Sync="TRUE" value="en"></languageCode></mdLang><mdStanName Sync="TRUE">ISO 19115 Geographic Information - Metadata</mdStanName><mdStanVer Sync="TRUE">DIS_ESRI1.0</mdStanVer><mdChar><CharSetCd Sync="TRUE" value="004"></CharSetCd></mdChar><mdHrLv><ScopeCd Sync="TRUE" value="005"></ScopeCd></mdHrLv><mdHrLvName Sync="TRUE">dataset</mdHrLvName><distinfo><resdesc Sync="TRUE">Downloadable Data</resdesc><stdorder><digform><digtinfo><transize Sync="TRUE">0.500</transize><dssize Sync="TRUE">0.500</dssize></digtinfo></digform></stdorder></distinfo><distInfo><distributor><distorTran><onLineSrc><orDesc Sync="TRUE">002</orDesc><linkage Sync="TRUE">file://\\AKRHERZ-VM222\C$\Documents and Settings\akrherz\Desktop\IEM\current_ww.shp</linkage><protocol Sync="TRUE">Local Area Network</protocol></onLineSrc><transSize Sync="TRUE">0.500</transSize></distorTran><distorFormat><formatName Sync="TRUE">Shapefile</formatName></distorFormat></distributor></distInfo><spdoinfo><direct Sync="TRUE">Vector</direct><ptvctinf><esriterm Name="current_ww"><efeatyp Sync="TRUE">Simple</efeatyp><efeageom Sync="TRUE">Polygon</efeageom><esritopo Sync="TRUE">FALSE</esritopo><efeacnt Sync="TRUE">137</efeacnt><spindex Sync="TRUE">FALSE</spindex><linrefer Sync="TRUE">FALSE</linrefer></esriterm><sdtsterm Name="current_ww"><sdtstype Sync="TRUE">G-polygon</sdtstype><ptvctcnt Sync="TRUE">137</ptvctcnt></sdtsterm></ptvctinf></spdoinfo><spref><horizsys><cordsysn><geogcsn Sync="TRUE">GCS_North_American_1983</geogcsn></cordsysn><geograph><geogunit Sync="TRUE">Decimal degrees</geogunit><latres Sync="TRUE">0.000000</latres><longres Sync="TRUE">0.000000</longres></geograph><geodetic><horizdn Sync="TRUE">North American Datum of 1983</horizdn><ellips Sync="TRUE">Geodetic Reference System 80</ellips><semiaxis Sync="TRUE">6378137.000000</semiaxis><denflat Sync="TRUE">298.257222</denflat></geodetic></horizsys></spref><refSysInfo><RefSystem><refSysID><identCode Sync="TRUE">GCS_North_American_1983</identCode></refSysID></RefSystem></refSysInfo><spatRepInfo><VectSpatRep><topLvl><TopoLevCd Sync="TRUE" value="001"></TopoLevCd></topLvl><geometObjs Name="current_ww"><geoObjTyp><GeoObjTypCd Sync="TRUE" value="001"></GeoObjTypCd></geoObjTyp><geoObjCnt Sync="TRUE">137</geoObjCnt></geometObjs></VectSpatRep></spatRepInfo><eainfo><detailed Name="current_ww"><enttyp><enttypl Sync="TRUE">current_ww</enttypl><enttypt Sync="TRUE">Feature Class</enttypt><enttypc Sync="TRUE">137</enttypc></enttyp><attr><attrlabl Sync="TRUE">FID</attrlabl><attalias Sync="TRUE">FID</attalias><attrtype Sync="TRUE">OID</attrtype><attwidth Sync="TRUE">4</attwidth><atprecis Sync="TRUE">0</atprecis><attscale Sync="TRUE">0</attscale><attrdef Sync="TRUE">Internal feature number.</attrdef><attrdefs Sync="TRUE">ESRI</attrdefs><attrdomv><udom Sync="TRUE">Sequential unique whole numbers that are automatically generated.</udom></attrdomv></attr><attr><attrlabl Sync="TRUE">Shape</attrlabl><attalias Sync="TRUE">Shape</attalias><attrtype Sync="TRUE">Geometry</attrtype><attwidth Sync="TRUE">0</attwidth><atprecis Sync="TRUE">0</atprecis><attscale Sync="TRUE">0</attscale><attrdef Sync="TRUE">Feature geometry.</attrdef><attrdefs Sync="TRUE">ESRI</attrdefs><attrdomv><udom Sync="TRUE">Coordinates defining the features.</udom></attrdomv></attr><attr><attrlabl Sync="TRUE">ISSUED</attrlabl><attalias Sync="TRUE">ISSUED</attalias><attrtype Sync="TRUE">String</attrtype><attwidth Sync="TRUE">12</attwidth></attr><attr><attrlabl Sync="TRUE">EXPIRED</attrlabl><attalias Sync="TRUE">EXPIRED</attalias><attrtype Sync="TRUE">String</attrtype><attwidth Sync="TRUE">12</attwidth></attr><attr><attrlabl Sync="TRUE">TYPE</attrlabl><attalias Sync="TRUE">TYPE</attalias><attrtype Sync="TRUE">String</attrtype><attwidth Sync="TRUE">2</attwidth></attr><attr><attrlabl Sync="TRUE">GTYPE</attrlabl><attalias Sync="TRUE">GTYPE</attalias><attrtype Sync="TRUE">String</attrtype><attwidth Sync="TRUE">1</attwidth></attr><attr><attrlabl Sync="TRUE">SIG</attrlabl><attalias Sync="TRUE">SIG</attalias><attrtype Sync="TRUE">String</attrtype><attwidth Sync="TRUE">1</attwidth></attr></detailed></eainfo><mdDateSt Sync="TRUE">20080625</mdDateSt></metadata>
================================================
FILE: data/gis/roads.mapinc
================================================
LAYER
CONNECTIONTYPE postgis
NAME "roads"
CONNECTION "user=nobody dbname=postgis host=iemdb-postgis.local"
DATA "geom from (select b.type as rtype, b.int1, random() as boid, b.segid, c.cond_code, b.geom from roads_base b, roads_current c WHERE b.segid = c.segid and b.type > 1 ORDER by b.segid DESC) as foo using UNIQUE boid using SRID=26915"
STATUS OFF
TYPE LINE
METADATA
"wfs_title" "Iowa Non-Interstates Conditions"
"wms_title" "Iowa Non-Interstates Conditions"
"wms_srs" "EPSG:4326 EPSG:26915 EPSG:3857"
END
#FILTER "expire > CURRENT_TIMESTAMP and gtype = 'C'"
PROJECTION
"init=epsg:26915"
END
TEMPLATE "roadsq.html"
LABELCACHE ON
CLASS
NAME 'normal'
EXPRESSION ([cond_code] = 0 or [cond_code] = 76)
STYLE
COLOR 153 153 153
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 0 0 0
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'wet'
EXPRESSION ([cond_code] = 1)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 0 204 0
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'frost'
EXPRESSION ([cond_code] >= 3 and [cond_code] <= 14)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 240 240 0
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'closed'
EXPRESSION ([cond_code] = 86)
STYLE
COLOR 250 250 0
WIDTH 7
ANTIALIAS TRUE
END
STYLE
COLOR 230 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 250 250 0
SIZE 3
SYMBOL 'fill45'
END
END
CLASS
NAME 'not advised'
EXPRESSION ([cond_code] = 51)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 232 95 1
WIDTH 3
ANTIALIAS TRUE
END
END
# SLUSH!
CLASS
NAME 'pc-mix'
EXPRESSION ([cond_code] = 56 or [cond_code] = 27 or [cond_code] = 15)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 255 197 197
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'mc-mix'
EXPRESSION ([cond_code] = 60 or [cond_code] = 31 or [cond_code] = 19)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 254 51 153
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'cc-mix'
EXPRESSION ([cond_code] = 64 or [cond_code] = 35 or [cond_code] = 23)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 181 0 181
WIDTH 3
ANTIALIAS TRUE
END
END
# Snow!
CLASS
NAME 'pc-snow'
EXPRESSION ([cond_code] = 39)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 153 255 255
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'mc-snow'
EXPRESSION ([cond_code] = 43)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 0 153 254
WIDTH 3
ANTIALIAS TRUE
END
END
CLASS
NAME 'cc-snow'
EXPRESSION ([cond_code] = 47)
STYLE
COLOR 0 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 0 0 158
WIDTH 3
ANTIALIAS TRUE
END
END
# CLASS
# NAME 'others'
# STYLE
# COLOR 255 255 0
# WIDTH 3
# ANTIALIAS TRUE
# END
# END
TOLERANCE 50
END
#____________________
# We label interstates a bit larger!
#
LAYER
CONNECTIONTYPE postgis
NAME "roads-inter"
CONNECTION "user=nobody dbname=postgis host=iemdb-postgis.local"
DATA "geom from (select b.type as rtype, b.int1, random() as boid, b.segid, c.cond_code, b.geom from roads_base b, roads_current c WHERE b.segid = c.segid and b.type = 1 ORDER by b.segid DESC) as foo using UNIQUE boid using SRID=26915"
STATUS OFF
TYPE LINE
METADATA
"wfs_title" "Iowa Interstates Conditions"
"wms_title" "Iowa Interstates Conditions"
"wms_srs" "EPSG:4326 EPSG:26915 EPSG:3857"
END
#FILTER "expire > CURRENT_TIMESTAMP and gtype = 'C'"
PROJECTION
"init=epsg:26915"
END
TEMPLATE "roadsq.html"
LABELCACHE ON
CLASS
NAME 'normal'
EXPRESSION ([cond_code] = 0 or [cond_code] = 76)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 0 0 0
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'wet'
EXPRESSION ([cond_code] = 1)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 0 204 0
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'frost'
EXPRESSION ([cond_code] >= 3 and [cond_code] <= 14)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
#COLOR 152 152 152
COLOR 240 240 0
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'closed-int'
EXPRESSION ([cond_code] = 86)
STYLE
COLOR 250 250 0
WIDTH 7
ANTIALIAS TRUE
END
STYLE
COLOR 230 0 0
SIZE 5
SYMBOL 'circle'
END
STYLE
COLOR 250 250 0
SIZE 3
SYMBOL 'fill45'
END
END
CLASS
NAME 'not advised'
EXPRESSION ([cond_code] = 51)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 232 95 1
WIDTH 5
ANTIALIAS TRUE
END
END
# SLUSH!
CLASS
NAME 'pc-mix'
EXPRESSION ([cond_code] = 56 or [cond_code] = 27 or [cond_code] = 15)
STYLE
COLOR 0 0 0
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 255 197 197
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'mc-mix'
EXPRESSION ([cond_code] = 60 or [cond_code] = 31 or [cond_code] = 19)
STYLE
COLOR 0 0 0
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 254 51 153
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'cc-mix'
EXPRESSION ([cond_code] = 64 or [cond_code] = 35 or [cond_code] = 23)
STYLE
COLOR 0 0 0
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 181 0 181
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'snow'
EXPRESSION ([cond_code] = 39)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 153 255 255
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'snow'
EXPRESSION ([cond_code] = 43)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 0 153 254
WIDTH 5
ANTIALIAS TRUE
END
END
CLASS
NAME 'snow'
EXPRESSION ([cond_code] = 47)
STYLE
COLOR 220 220 220
SIZE 7
SYMBOL 'circle'
END
STYLE
COLOR 0 0 158
WIDTH 5
ANTIALIAS TRUE
END
END
TOLERANCE 50
END
================================================
FILE: data/gis/stations.sym
================================================
SYMBOLSET
SYMBOL
NAME 'circle'
TYPE ELLIPSE
Filled TRUE
POINTS 1 1 END
END
SYMBOL
TYPE vector
POINTS
0 0
6 6
END
END
SYMBOL
NAME 'fill45'
TYPE Ellipse
FILLED TRUE
POINTS
1 1
END
# STYLE 1 5 END
END
SYMBOL
NAME "triangle"
TYPE vector
POINTS
0 4
2 0
4 4
0 4
END
END
SYMBOL
NAME "tornado"
TYPE vector
FILLED TRUE
POINTS
0 0
2 4
4 0
0 0
END
END
Symbol
Name 'airplane'
Type PIXMAP
Image 'images/airplane.png'
Transparent 0
END
Symbol
Name 'airplane_yellow'
Type PIXMAP
Image 'images/airplane_yellow.png'
Transparent 0
END
Symbol
Name 'water'
Type PIXMAP
Image 'images/water.png'
Transparent 0
END
Symbol
Name 'schoolhouse'
Type PIXMAP
Image 'images/schoolhouse.png'
Transparent 1
END
Symbol
Name 'nws'
Type PIXMAP
Image 'images/nws.png'
Transparent 0
END
Symbol
Name 'cyclone'
Type PIXMAP
Image 'images/cyclone.png'
Transparent 18
END
Symbol
Name 'nrcs'
Type PIXMAP
Image 'images/nrcs.png'
Transparent 0
END
Symbol
Name 'roadcond'
Type PIXMAP
Image 'images/roadcond.png'
END
Symbol
Name 'n0r-ramp'
Type PIXMAP
Image 'images/n0r-ramp.png'
END
Symbol
Name 'n0q-ramp'
Type PIXMAP
Image 'images/n0q-ramp.png'
Transparent 0
END
Symbol
Name 'interstate_shield'
Type PIXMAP
Image 'interstate-2.png'
Transparent 0
END
Symbol
Name 'us_highway_shield'
Type PIXMAP
Image 'images/ushwy.png'
Transparent 1
END
Symbol
Name 'state_highway_shield'
Type PIXMAP
Image 'images/sthwy.png'
END
Symbol
Name 'county_highway_shield'
Type PIXMAP
Image 'images/ctyhwy.png'
Transparent 0
END
Symbol
Name 'x'
Type PIXMAP
Image 'images/x.png'
Transparent 1
END
Symbol
Name 'kcci8'
Type PIXMAP
Image 'images/kcci8.png'
# Transparent 1
END
Symbol
NAME 'iem_logo'
TYPE PIXMAP
IMAGE 'images/iem_logo.png'
TRANSPARENT 0
END
Symbol
Name 'nws_logo'
Type PIXMAP
Image 'images/nws.png'
Transparent 0
END
Symbol
Name 'doppler8'
Type PIXMAP
Image 'images/doppler8.png'
Transparent 253
END
Symbol
Name 'kcci-lsd2007'
Type PIXMAP
Image 'images/kcci-lsd2007.png'
Transparent 0
END
Symbol
Name 'clrbar'
Type PIXMAP
Image 'images/clrbar.png'
Transparent 17
END
END
================================================
FILE: data/gis/symbols/stations.sym
================================================
SYMBOLSET
SYMBOL
NAME 'circle'
TYPE ELLIPSE
Filled TRUE
POINTS 1 1 END
END
SYMBOL
TYPE vector
POINTS
0 0
6 6
END
END
SYMBOL
NAME "triangle"
TYPE vector
Filled TRUE
POINTS
0 4
2 0
4 4
0 4
END
END
SYMBOL
NAME "tornado"
TYPE vector
FILLED TRUE
POINTS
0 0
2 4
4 0
0 0
END
END
Symbol
Name 'airplane'
Type PIXMAP
Image 'images/airplane.png'
Transparent 0
END
Symbol
Name 'precip'
Type PIXMAP
Image 'bars/rainbow2.png'
#Transparent 0
END
Symbol
Name 'airplane_yellow'
Type PIXMAP
Image 'images/airplane_yellow.png'
Transparent 0
END
Symbol
Name 'water'
Type PIXMAP
Image 'images/water.png'
Transparent 0
END
Symbol
Name 'schoolhouse'
Type PIXMAP
Image 'images/schoolhouse.png'
Transparent 1
END
Symbol
Name 'nws'
Type PIXMAP
Image 'images/nws.png'
Transparent 0
END
Symbol
Name 'cyclone'
Type PIXMAP
Image 'images/cyclone.png'
Transparent 18
END
Symbol
Name 'nrcs'
Type PIXMAP
Image 'images/nrcs.png'
Transparent 0
END
Symbol
Name 'interstate_shield'
Type PIXMAP
Image 'interstate-2.png'
Transparent 0
END
Symbol
Name 'us_highway_shield'
Type PIXMAP
Image 'images/ushwy.png'
Transparent 1
END
Symbol
Name 'state_highway_shield'
Type PIXMAP
Image 'images/sthwy.png'
END
Symbol
Name 'county_highway_shield'
Type PIXMAP
Image 'images/ctyhwy.png'
Transparent 0
END
Symbol
Name 'x'
Type PIXMAP
Image 'images/x.png'
Transparent 1
END
Symbol
Name 'kcci8'
Type PIXMAP
Image 'images/kcci8.png'
# Transparent 1
END
Symbol
Name 'iem_logo'
Type PIXMAP
Image 'images/iem_logo.png'
Transparent 0
END
Symbol
Name 'doppler8'
Type PIXMAP
Image 'images/doppler8.png'
Transparent 253
END
Symbol
Name 'clrbar'
Type PIXMAP
Image 'images/clrbar.png'
Transparent 17
END
END
================================================
FILE: deployment/iem-tilecache.service
================================================
[Unit]
Description=IEM TileCache Gunicorn backend (/c and /cache)
After=network.target
Before=httpd.service
[Service]
Type=simple
User=apache
Environment=PATH=/opt/miniconda3/envs/prod/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin
ExecStartPre=/usr/bin/test -x /opt/miniconda3/envs/prod/bin/gunicorn
ExecStartPre=/usr/bin/test -x /opt/iem/deployment/start_tc_wsgi.sh
ExecStart=/opt/iem/deployment/start_tc_wsgi.sh
Restart=on-failure
RestartSec=5
SyslogIdentifier=iem-tc
StandardOutput=syslog
StandardError=syslog
[Install]
WantedBy=multi-user.target
================================================
FILE: deployment/start_tc_wsgi.sh
================================================
#!/bin/bash
# Start the dedicated Gunicorn backend for TileCache (/c and /cache).
#
# Mirrors the legacy iemwsgi_tc daemon sizing while moving the Python app
# server off Apache.
PORT=${1:-9081}
CONDA_PREFIX=/opt/miniconda3/envs/prod
MAX_REQUESTS=${MAX_REQUESTS:-10000000}
MAX_REQUESTS_JITTER=${MAX_REQUESTS_JITTER:-5000}
# Use the conda env's binaries directly rather than relying on interactive
# shell activation (systemd runs non-interactive shells).
export PATH="${CONDA_PREFIX}/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin"
# Attempt to get some logging when bad things happen
export PYTHONFAULTHANDLER=1
# Keep request-count recycling enabled to cap Python memory leaks. Gunicorn
# rotates individual workers instead of restarting an embedded Apache stack.
exec "${CONDA_PREFIX}/bin/gunicorn" \
--bind "127.0.0.1:${PORT}" \
--no-control-socket \
--workers 3 \
--worker-class gthread \
--threads 15 \
--backlog 2048 \
--pythonpath /opt/iem/pylib/ \
--max-requests "$MAX_REQUESTS" \
--max-requests-jitter "$MAX_REQUESTS_JITTER" \
--timeout 60 \
--graceful-timeout 60 \
--error-logfile - \
--capture-output \
--log-level warn \
--log-syslog \
--log-syslog-facility local1 \
iemweb.tilecache_dispatch:application
================================================
FILE: deployment/symlink_manager.py
================================================
"""Attempt to manage the disaster that is IEM symlinking"""
from pathlib import Path
from pyiem.util import logger
LOG = logger()
# LINK , TARGET
M2 = "/mnt/mesonet2"
PAIRS = [
["/mesonet/data/merra2", f"{M2}/data/merra2"],
["/mesonet/nawips", f"{M2}/gempak"],
["/mesonet/wepp", f"{M2}/idep"],
["/mesonet/ARCHIVE/gempak", f"{M2}/longterm/gempak"],
["/mesonet/ARCHIVE/raw", f"{M2}/longterm/raw"],
["/mesonet/ARCHIVE/rer", f"{M2}/ARCHIVE/rer"],
["/mesonet/data/conus404", f"{M2}/data/conus404"],
["/mesonet/data/dotcams", f"{M2}/data/dotcams"],
["/mesonet/data/era5", f"{M2}/data/era5"],
["/mesonet/data/era5_china", f"{M2}/data/era5_china"],
["/mesonet/data/era5_europe", f"{M2}/data/era5_europe"],
["/mesonet/data/era5_sa", f"{M2}/data/era5_sa"],
["/mesonet/data/gempak", f"{M2}/data/gempak"],
["/mesonet/data/iemre", f"{M2}/data/iemre"],
["/mesonet/data/iemre_china", f"{M2}/data/iemre_china"],
["/mesonet/data/iemre_europe", f"{M2}/data/iemre_europe"],
["/mesonet/data/iemre_sa", f"{M2}/data/iemre_sa"],
["/mesonet/data/prism", f"{M2}/data/prism"],
["/mesonet/data/incoming", f"{M2}/data/incoming"],
["/mesonet/data/madis", f"{M2}/data/madis"],
["/mesonet/data/model", f"{M2}/data/model"],
["/mesonet/data/mrms", f"{M2}/data/mrms"],
["/mesonet/data/ndfd", f"{M2}/data/ndfd"],
["/mesonet/data/nldas", f"{M2}/data/nldas"],
["/mesonet/data/smos", f"{M2}/data/smos"],
["/mesonet/data/stage4", f"{M2}/data/stage4"],
["/mesonet/data/text", f"{M2}/data/text"],
["/mesonet/ldmdata", f"{M2}/ldmdata"], # May fail if node writes data
["/mesonet/share/cases", f"{M2}/share/cases"],
["/mesonet/share/climodat", f"{M2}/share/climodat"],
["/mesonet/share/features", f"{M2}/share/features"],
["/mesonet/share/iemmaps", f"{M2}/share/iemmaps"],
["/mesonet/share/lapses", f"{M2}/share/lapses"],
["/mesonet/share/pickup", f"{M2}/share/pickup"],
["/mesonet/share/pics", f"{M2}/share/pics"],
["/mesonet/share/present", f"{M2}/share/present"],
["/mesonet/share/usage", f"{M2}/share/usage"],
["/mesonet/share/windrose", f"{M2}/share/windrose"],
["/mesonet/home", f"{M2}/home"],
]
def workflow(link: Path, target: Path):
"""Do things"""
if not target.exists():
LOG.info("ERROR: link target: %s is not found", target)
return
if not link.is_symlink() and link.is_dir():
LOG.info("ERROR: symlink: %s is already a directory!", link)
return
if link.is_symlink():
oldtarget = link.resolve()
if oldtarget == target:
return
link.unlink()
LOG.info("%s -> %s", link, target)
link.symlink_to(target)
def main():
"""Go Main"""
# Ensure some base folders exist
for mysubdir in ["share", "ARCHIVE", "data"]:
path = Path("/mesonet") / Path(mysubdir)
if not path.is_dir():
path.mkdir(parents=True)
# Quasi dynamic generation of /mesonet/ARCHIVE/data/YYYY links
if not Path("/mesonet/ARCHIVE/data").is_dir():
Path("/mesonet/ARCHIVE/data").mkdir(parents=True)
for year in range(1893, 2015):
link = Path("/mesonet/ARCHIVE/data") / str(year)
target = Path(f"/mnt/archive32/ARCHIVE/data/{year}")
workflow(link, target)
for year in range(2015, 2019):
link = Path("/mesonet/ARCHIVE/data") / str(year)
target = Path(f"/mnt/archive5/ARCHIVE/data/{year}")
workflow(link, target)
for year in range(2019, 2024):
link = Path("/mesonet/ARCHIVE/data") / str(year)
target = Path(f"/mnt/archive32/ARCHIVE/data/{year}")
workflow(link, target)
for year in range(2024, 2025):
link = Path("/mesonet/ARCHIVE/data") / str(year)
target = Path(f"/mnt/archive5/ARCHIVE/data/{year}")
workflow(link, target)
for year in range(2025, 2027):
link = Path("/mesonet/ARCHIVE/data") / str(year)
target = Path(f"/mnt/archive33/ARCHIVE/data/{year}")
workflow(link, target)
for link, target in PAIRS:
workflow(Path(link), Path(target))
if __name__ == "__main__":
main()
================================================
FILE: docs/datasets/afos.md
================================================
## <a name="afos"></a> NWS Text Product Archive
### Summary
This archive consists of raw ASCII text products issued by the National
Weather Service. Some places on the website will refer to this as "AFOS", which
is an archaic old abbreviation associated with this dataset. The realtime source
of this dataset is the processing of text products sent over the NOAAPort SBN, but
archives have been backfilled based on what exists at NCEI and also some archives
provided by the University of Wisconsin.
* __Download Interface__: [IEM On-Demand](https://mesonet.agron.iastate.edu/wx/afos/)
* __Spatial Domain__: Generally US NWS Offices that issue text products.
* __Temporal Domain__: Some data back to 1996, but archive quality and completeness
greatly improves for dates after 1998.
### Justification for processing
While the Internet provides many places to view current NWS Text Products, archives of these are much more difficult to find. One of the primary goals of the IEM website is to maintain stable URLs, so when links are generates to NWS Text Products, they need to work into the future! Many of these text products have very useful information in them for researchers and others in the public.
### Other Sources of Information
The [NCEI Site](https://www.ncei.noaa.gov) would be an authoritative source, but their archives of this data are very painful to work with. There are a number of other sites that have per-UTC day files with some text products included. For example [Oklahoma Mesonet](https:/mesonet.org/data/public/noaa/text/archive/).
### Processing and Quality Control
Generally, some quality control is done to ensure that the data is ASCII format and not filled with control characters. There are also checks that product timestamps are sane and represent a timestamp that is close to reality. For example over the NOAAPort SBN feed, there is about one product per day that is a misfire or some other error that is not allowed to be inserted into the database.
This database culls some of the more frequently issued text products. The reason being to save space and some of the text products are not very appropriate for long term archives. The most significant deletion are the SHEF products, which would overwhelm my storage system if I attempted to save the data! [The script](https://github.com/akrherz/iem/blob/main/scripts/dbutil/clean_afos.py) that does the database culling each day contains the exact AWIPS IDs used for this cleaning.
### <a name="faq"></a> Frequently Asked Questions
1. How can I bulk download the data?
Sadly, this is not well done at the moment. The [WX AFOS](https://mesonet.agron.iastate.edu/wx/afos/) is about the best option as it has a "Download Text" button.
2. Please describe any one-offs within the archive?
The `RRM` product is generally SHEF and thus was culled from the database to conserve space.
An IEM user requested that this product be retained, so the culling of it stopped on 31
March 2023. So this product's archive only dates back till then.
================================================
FILE: docs/datasets/climodat.md
================================================
## <a name="climodat"></a> IEM Climodat Reports and Data
### Summary
This document describes the once daily climate dataset that provides observations and estimates of high and low temperature, precipitation, snowfall, and snow depth. Parts of this dataset have been curated over the years by a number of Iowa State employees including Dr Shaw, Dr Carlson, and Dr Todey.
* __Download Interface__: [IEM On-Demand](https://mesonet.agron.iastate.edu/request/coop/fe.phtml)
* __Spatial Domain__: United States
* __Temporal Domain__: varies by station
* __Variables Provided__: Once daily high and low temperature, precipitation, snowfall, snow depth
### Justification for processing
The most basic and important long term climate record are the once daily reports of high and low temperature along with precipitation and sometimes snow. The most commonly asked question of the IEM datasets are climate related, so curating a long-term dataset of daily observations is necessary.
### Other Sources of Information
A great source of much of the same type of data is [Regional Climate Centers ACIS](http://www.rcc-acis.org/). The complication when comparing IEM Climodat data to other sources is the difference in station identifiers used. The history of station identifiers is long and complicated. The National Center for Environmental Information (NCEI) has made strides in attempting to straighten the identifiers out. This continues to be complicated as the upstream data source of information uses a completely different set of identifiers known as National Weather Service Location Identifiers (NWSLI), which are different than what NCEI or the IEM uses for our climate datasets.
### Processing and Quality Control
There is nothing easy or trivial about processing or quality control of this dataset. After decades of work, plenty of issues remain. Having human observers be the primary driver of this dataset is both a blessing and a curse. The good aspects include the archive dating back to the late 1800s for some locations and relatively high data quality. The bad aspects include lots of metadata issues due to observation timing, station moves, and equipment siting.
The primary data source for this dataset is the National Weather Service COOP observers. These reports come to the IEM over a variety of paths:
* Realtime reports found in NWS SHEF Text Products, processed in realtime by the IEM
* Via manually downloaded data archives provided by NCEI
* Via web services provided by RCC ACIS
The merging of these four datasets creates a bit of a nightmare to manage.
Snowfall and snow depth data is always problematic. First, lets clarify what the terms mean. "Snowfall" is the amount of snow that fell from the sky over the previous 24 hour period. "Snow depth" is the amount of snow measured to be on the ground due to previous snowfalls. These numbers may sometimes contradict with snowfall amounts being larger than snow depth due to melting and/or compaction. Care should be used when analyzing the snowfall and snow depth reports.
### <a name="faq"></a> Frequently Asked Questions
1. This data contains 'Statewide' and 'Climate District' observations, where do they come from?
The IEM produces gridded analyses of observed variables. A GIS-style weighted spatial sampling is done from this grid to derive averaged values over geographies like states and climate districts. Of course, when you average something like precipitation over a large area, you end up with rates that are lower than peak station rates and also with more precipitation events than individual stations within the region.
1. The download provides only a date, what time period does this represent?
Almost always, this date *does not* represent a local calendar date's worth of data. This date represents the date on which the observation was taken. Typically, this observation is taken at about 7 AM and so represents a 24 hour period prior to 7 AM. Explicitly providing the time of observation is a future and necessary enhancement to this dataset, but just tricky to do. Some observation locations have switched times over the years and some even observe 24 hour precipitation totals at a different time than the temperature values. Nothing is ever easy with this dataset...
1. Where does the radiation data come from?
The NWS COOP Network does not provide observations of daily solar radiation, but this variable is extremely important to many folks that use this information for modelling. As a convience, the IEM processes a number of reanalysis datasets and produces point sampling from the gridded information to provide "daily" radiation totals. A major complication is that the 'daily' COOP observations are typically at 7 AM and the gridded solar radiation data is extracted on close to a local calendar day basis. In general, the 7 AM value is for the previous day.
1. Where does the non-radiation data come from?
This information is primarily driven by the realtime processing of NWS COOP observations done by the IEM. For data older than the past handful of years, it is taken from the NCEI databases and now the ACIS web services. Some manual work is done to meld the differences in site identifiers used between the various online resources.
1. How do I know which variables have been estimated and which are observations?
The download interface for this dataset provides an option to include a flag for which observations have estimated temperatures or precipitation. Presently, a general flag is provided for both high and low temperature and no flag is provided for the snowfall and snow depth information.
================================================
FILE: docs/datasets/iemre.md
================================================
## <a name="iemre"></a> IEM Reanalysis
### Summary
The IEM Reanalysis dataset is a daily gridded product combining a number of
datasets into one product hopefully void of missing values. In some cases,
data is interpolated and in other cases, the data is resampled from another
grid. Keeping the workflow doing is a daily challenge due to changes in various
input datasets and quirks with datasets over time.
* __Download Interface__: [IEM On-Demand](https://mesonet.agron.iastate.edu/iemre/)
* __Spatial Domain__: ...
* __Temporal Domain__: ...
### Justification for processing
A consistent and complete gridded analysis enables many downstream products and
applications. Single point observations are of higher quality, but often have
gaps and their representativity varies depending on many factors.
There are many alternative sources available today with similiar data, but it is
good to have a product under IEM workflow control that is not subject to outages
and data service dropouts. For example, government shutdowns.
### Other Sources of Information
There are many. NARR, ERA5, and the list goes on.
### Processing and Quality Control
To be written...
### <a name="faq"></a> Frequently Asked Questions
1. When are daily fields updated?
Well, there is a long story!
1. This is another question I have?
Well, there is another story?
================================================
FILE: docs/datasets/metar.md
================================================
## <a name="metar"></a>ASOS/AWOS Global METAR Archives
### Summary
The primary format that worldwide airport weather station data is reported in is called METAR. This format is somewhat archaic, but well known and utilized in the community. The data is sourced from a number of places including: [Unidata IDD](https://www.unidata.ucar.edu/projects/#idd), [NCEI ISD](https://www.ncdc.noaa.gov/isd), [MADIS One Minute ASOS](https://madis.ncep.noaa.gov/madis_OMO.shtml), and [NCEI GHCHh](https://www.ncei.noaa.gov/products/global-historical-climatology-network-hourly). The weather stations included are typically called "Automated Surface Observation System (ASOS)". The term "Automated Weather Observation System (AWOS)" is often used inter-changably.
* __Download Interface__: [IEM On-Demand](https://mesonet.agron.iastate.edu/request/download.phtml)
* __Spatial Domain__: Worldwide
* __Temporal Domain__: 1900-present
### Justification for processing
The highest quality weather information comes from the ASOS sites. These stations get routine maintenance, considerable quality control, and is the baseline hourly interval dataset used by all kinds of folks. The data stream processed by the IEM contains global stations, so extending the ingest to the entire data stream was not significant effort.
### Other Sources of Information
[NCEI Integrated Surface Database (ISD)](https://www.ncdc.noaa.gov/isd) is likely the most authoritative source of this information.
### Processing and Quality Control
A Python based ingestor using the metar package processes this information into the IEM database.
### <a name="faq"></a> Frequently Asked Questions
1. Why is precipitation data all missing / zero for non-US locations?
It is the IEM's understanding that precipitation is not included in the global data streams due to previous data distribution agreements. The precipitation data is considered of very high value as it can be used to model and predict the status of agricultural crops in the country. Such information could push commodity markets. For the present day, other satellite datasets likely negate some of these advantages, but alas.
2. How are "daily" precipitation totals calculated?
In general, the ASOS stations operate in local standard time for the entire year round. This has some implications with computation of various daily totals as during daylight saving time, the calendar day total will represent a 1 AM to 1 AM local daylight time period. For the context of this METAR dataset, not all METAR reporting sites will generate a total that can be used for assignment of a calendar day's total. So the IEM uses a number of approaches to arrive at this total.
* A script manually totals up the hourly precipitation reports and computes a true local calendar day total for the station, this total may later be overwritten by either of the below.
* A real-time ingest process gleans the daily totals from the Daily Summary Message (DSM) issued by some ASOS sites.
* A real-time ingest process gleans the daily totals from the Climate Report (CLI) that is issued for some ASOS sites by their respective local NWS Forecast Offfice.
Not all stations have DSM and/or CLI products, so the manual totaling provides a minimum accounting. The complication is that this total does not cover the same period that a CLI/DSM product does. So complicated!
3. Please explain the temperature units, storage and processing.
This is why we can not have nice things. The following discussion generally applies to the US observation sites. No matter what you see in various data feeds, the ASOS stations internally store their temperatures in **whole degree Fahrenheit**. The issues happen when the station transmits the data in whole degree Celsius and thus not have enough precision to covert back to Fahrenheit. For example, if the station observed a 78F temperature and then transmitted a 26C value, that 26C value converts back to 78.8F, which rounds to 79F. And down the rabbit-hole we go!
The IEM's archive of ASOS/METAR data comes from 3 main sources and some minor auxillary ones. The main source is the NOAA satellite feed, called NOAAPort. This feed provides data in METAR format, so the transmitted units are always whole degree Celsius, but sometimes the METAR `T-group` is included, so there is enough added precision to reliabily convert back to whole degree Fahrenheit. The IEM's processing attempts to prioritize those METARs that include the `T-group`, so that reliable Fahrenheit storage can occur.
The next main source is from the MADIS 5-minute ASOS dataset, previously called High Frequency METAR. This data feed has a significant issue whereby the transmitted data from the FAA to the NWS is only in whole degree Celsius. Such data can not be reliably converted back to whole degree Fahrenheit. For this reason, the IEM database stores these values as missing and they are not included in the data download. BUT, for those that really want this information, these values are included in the IEM-encoded raw METAR string that you can download with the data. You can find further discussion on this [IEM News Item](https://mesonet.agron.iastate.edu/onsite/news.phtml?id=1290).
The third main source is from the [NCEI ISD](https://www.ncdc.noaa.gov/isd). At this time, there are no known issues with the temperature data in this feed being reliable for whole degree Fahrenheit.
================================================
FILE: docs/datasets/template.md
================================================
## <a name="template"></a> IEM Template [WIP]
### Summary
This is...
* __Download Interface__: [IEM On-Demand](https://mesonet.agron.iastate.edu)
* __Spatial Domain__: ...
* __Temporal Domain__: ...
### Justification for processing
This is...
### Other Sources of Information
This is...
### Processing and Quality Control
| First Header | Second Header |
| ------------- | ------------- |
| Content Cell | Content Cell |
| Content Cell | Content Cell |
### <a name="faq"></a> Frequently Asked Questions
1. Where does the radiation data come from?
Well, there is a long story!
1. Where does the non-radiation data come from?
Well, ther eis another story?
================================================
FILE: docs/datasets/vtec.md
================================================
# <a name="vtec"></a> NWS Valid Time Extent Code (VTEC) Archives
## Summary
The National Weather Service uses a rather complex and extensive suite of products and methodologies to issue watch, warnings, and advisories (WWA). Back in the 1990s and early 2000s, the automated processing of these products was extremely difficult and rife with errors. To help with automated parsing, the NWS implemented a system called Valid Time Extent Code (VTEC) which provides a more programatic description of what an individual WWA product is doing. The implementation of began in 2005 and was mostly wrapped up by 2008. The IEM attempts to do high fidelity processing of this data stream and has a number of Internet unique archives and applications to view this information.
* __Download Interface__: [Shapefile/KML Download](https://mesonet.agron.iastate.edu/request/gis/watchwarn.phtml)
* __Spatial Domain__: United States, including Guam, Puerto Rico and some other islands
* __Temporal Domain__: Most WWA types back to 2008 or 2005, an archive of Flash Flood Warnings goes back to 2002 or so, and Tornado / Severe Thunderstorm Warnings goes back to 1986
## Justification for processing
NWS issued WWA alerts are an important environmental hazard dataset and has broad interest in the research and insurance industries. Even in 2017, there are very few places that you can find long term archives of this information in usable formats.
## Other Sources of Information
The [National Center for Environmental Information](https://www.ncei.noaa.gov) has raw text product archives that do not contain processed atomic data of the actual WWA alerts. So the user is left to the adventure of text parsing the products. Otherwise, it is not clear if any other archive exists on the Internet of this information.
## Processing and Quality Control
The [pyIEM](https://github.com/akrherz/pyIEM) python package is the primary code that does the text parsing and databasing of the WWA products. A large number of unit tests exist against the various variations and quirks found with processing the WWA data stream since the mid 2000s. New quirks and edge cases are still found today with minor corrections made to the archive when necessary. The IEM continuously alerts and annoys the NWS when various issues are found, hoping to get the NWS to correct their products. While it has been a long and frustrating process, things do eventually get fixed leading to more robust data archives.
The pyIEM parsers send emails to the IEM developer when issues are found. The parser alerts when the following errors are encountered:
* VTEC Event IDs (ETNs) being used that are out of sequential order.
* Warning product segments are missing or have invalid Universal Geographic Code (UGC) encoding
* Product segment has invalid VTEC encoding
* Polygons included in the warning are invalid or counterclockwise
* Timestamps are formatted incorrectly
* The UGC / VTEC sequence of a particular product contains logical errors, for example a UGC zone silently drops out or into a warning.
* Products are expired outside of the acceptable temporal bounds
* Any other type of error and/or code bug that caused a processing fault
## <a name="faq"></a> Frequently Asked Questions
1. Please fully describe the schema used within the downloaded shapefiles.
Grab some coffee and headache medicine as I am going to try to explain how the IEM processes these events into the database. The first concept to understand is that when the NWS issues a Watch, Warning, Advisory (WaWA) event, this event undergoes a lifecycle. The NWS can issue updates that modify the start and end times of the event and the spatial extent of the event. They can also do upgrades on the event, for example moving from a watch into a warning. The IEM database does not necessary fully document the event's lifecycle, but provides the metadata for the last known state of the event.
For the context of IEM provided shapefiles, here is a discussion of what each DBF column represents. We will go into an example afterwards attempting to illustrate what each column means.
But first, the timestamps. The presented timestamps are always in UTC timezone. The timestamp is represented by a 12 character string in the form of year, month, day, 24-hour,minute. To my knowledge, there is no timestamp data type in DBF, so this is the pain we have to live with.
| DBF Column | Type | Description |
| ------------- | ------------- | ----- |
| WFO | 3 Char | This is the three character NWS Office/Center identifier. For CONUS locations, this is the 4 character ID dropping the first `K`. For non-CONUS sites, this is the identifier dropping the `P`. |
| ISSUED | 12 Char | This timestamp represents the start time of the event. When an event's lifecycle begins, this issued value can be updated as the NWS issues updates. The value presented represents the last known state of the event start time.|
| EXPIRED | 12 Char | Similiar to the ISSUED column above, this represents the products event end time. Again, this value is updated as the event lifecycle happens with updates made by the NWS. |
| INIT_ISS | 12 Char | This is timestamp of the NWS Text Product that started the event. This timestamp is important for products like Winter Storm Watch, which have a begin time a number of days/hours into the future, but are typically considered to be in effect at the time of the text product issuace. Yeah, this is where the headaches start. This timestamp can also be used to form a canonical URL back to the IEM to fetch the raw NWS Text for this event. It is __not__ updated during the event's lifecycle. |
| INIT_EXP | 12 Char | Similiar to `INIT_ISS` above, this is the expiration of the event denoted with the first issuance of the event. It is __not__ updated during the event's lifecycle. |
| PHENOM or TYPE | 2 Char | This is the two character NWS identifier used to denote the VTEC event type. For example, `TO` for Tornado and `SV` for Severe Thunderstorm. A lookup table of these codes exists [within pyiem library](https://github.com/akrherz/pyIEM/blob/main/src/pyiem/nws/vtec.py). |
| SIG | 1 Char | This is the one character NWS identifier used to denote the VTEC significance. The same link above for `PHENOM` has a lookup table for these. |
| GTYPE | 1 Char | Either `P` for polygon or `C` for county/zone/parish. The shapefiles you download could contain both so-called storm-based (polygon) events and traditional county/zone based events. |
| ETN | Int | The VTEC event identifier. A tracking number that should be unique for this event, but sometimes it is not. Yes, more headaches. Note that the uniqueness is not based on the combination of a UGC code, but the issuance center and a continuous spatial region for the event. |
| STATUS | 3 Char | The VTEC status code denoting the state the event is during its life cycle. This is purely based on any updates the event got and not some logic on the IEM's end denoting if the event is in the past or not. |
| NWS_UGC | 6 Char | For county,zone,parish warnings `GTYPE=C`, the Universal Geographic Code that the NWS uses. Sadly, this is not exactly FIPS. |
| AREA_KM2 | Number | The IEM computed area of this event, this area computation is done in Albers (EPSG:9311). |
| UPDATED | 12 Char | The timestamp when this event's lifecycle was last updated by the NWS. |
| HV_NWSLI | 5 Char | For events that have H-VTEC (Hydro VTEC), this is the five character NWS Location Identifier. |
| HV_SEV | 1 Char | For events that have H-VTEC (Hydro VTEC), this is the one character flood severity __at issuance__. |
| HV_CAUSE | 2 Char | For events that have H-VTEC (Hydro VTEC), this is the two character cause of the flood. |
| HV_REC | 2 Char | For events that have H-VTEC (Hydro VTEC), this is the code denoting if a record crest is expected __at issuance__. |
| EMERGENC | Boolean | Based on unofficial IEM logic, is this event an "Emergency" at any point during its life cycle. |
| POLY_BEG | 12 Char | In the case of polygons (GTYPE=P) the UTC timestamp that the polygon is initially valid for. |
| POLY_END | 12 Char | In the case of polygons (GTYPE=P) the UTC timestamp that the polygon expires at. |
| HAILTAG | Number | The IBW hail size tag (inches). This is only included with the (GTYPE=P) entries as there is a 1 to 1 association between the tags and the polygons. If you do not include SVS updates, it is just the issuance tag. |
| WINDTAG | Number | The IBW wind gust tag (MPH). See HAILTAG. |
| TORNTAG | 16 Char | The IBW tornado tag. See HAILTAG. |
| DAMAGTAG | 16 Char | The IBW damage tag. See HAILTAG. |
| PROD_ID | 36 Char | Issuance text. IEM identifier used to uniquely (99% of the time) identify NWS Text Products. The value can be passed to ``https://mesonet.agron.iastate.edu/p.php?pid=PROD_ID`` for a website viewer or against the IEM API service ``https://mesonet.agron.iastate.edu/api/1/nwstext/PROD_ID``. |
| FCSTER | 24 Char | The product signature, which is often the forecaster who
issued the event. |
1. I notice entires with an `expire` timestamp before the `issue` timestamp. How can this be?
Oh my, buckle up for some confusion. The first point in this space is that our database
represents the most recent snapshot of the given VTEC event during its life cycle. The
life cycle includes the issuance to its death via a cancels, expiration, or
upgrade to a different VTEC event.
To illustrate the evolution of the database fields with a VTEC event lifecycle,
please consider this example. At noon on 19 March 2019, NWS Des Moines `wfo=DMX` issues a Winter Storm Watch `phenom=WS` `sig=A` for Story County (`nws_ugc=IAZ048`). This watch goes into effect at 6 PM (tomorrow, 20 March) until 6 AM 21 March. The storm is a day away yet... The database entry looks like so:
| STATUS | ISSUE | INIT_ISS | EXPIRE | INIT_EXP |
| --- | --- | --- | --- | --- |
| NEW | 201903202300 | 201903171700 | 201903211100 | 201903211100 |
Now tomorrow comes and the NWS needs to decide what to do with the watch prior to 6 PM, since these type of
watches can not reach their issuance time without either being cancelled or upgraded. So at 5 PM, the NWS
decides to issue a Winter Storm Warning. Now the database entry for the __watch__ looks like so:
| STATUS | ISSUE | INIT_ISS | EXPIRE | INIT_EXP |
| --- | --- | --- | --- | --- |
| UPG | 201903202300 | 201903171700 | __201903202200__ | 201903211100 |
See how the `EXPIRE` column is now less than the `ISSUE` column, but the `INIT_ISS` and `INIT_EXP` columns
are unchanged to hopefully help the end user deal with this situation. You have life choices to make on
how to deal with this situation.
In general, the watch _practically_ is in effect once the NWS issued it, regardless of when the actual bad
weather is going to start. So the recommendation is to use the `INIT_ISS` column as the watch start time
and the `EXPIRE` as the watch end time, but this logic is totally at your discretion.
1. How do Severe Thunderstorm, Flash Flood, or Tornado warnings have VTEC codes for dates prior to implementation?
Good question! A number of years ago, a kind NWS manager provided a database dump of their curated WWA archive for dates between 1986 and 2005. While not perfect, this archive was the best/only source that was known at the time. The IEM did some logic processing and attempted to back-compute VTEC ETNs for this archive of warnings. The database was atomic to a local county/parish, so some logic was done to merge multiple counties when they spatially touched and had similiar issuance timestamps. Again from the above, automated machine parsing of the raw text is next to impossible. The ETNs were assigned as a convience so that various IEM apps and plots would present this data online.
1. The database has Weather Forecast Offices (WFOs) issuing WWA products for dates prior to the office even existing? How can this be!?!?
Yeah, this is somewhat poor, but was done to again provide some continuity with current day operations. The archive database provided to the IEM did not contain the issuance forecast office, so without a means to properly attribute these, the present day WFOs were used. This issue is rarely raised by IEM users, but it is good to document. Maybe someday, a more authoritative archive will be made and these old warnings and be assigned to the various WSOs, etc that existed at the time.
1. What are the VTEC phenomena and significance codes?
The phenomena code (two characters) and significance code (one character) denote the particular WWA hazzard at play with the product. The [NWS VTEC Site](https://www.weather.gov/vtec/) contains a one pager PDF that documents these codes. The NWS uses these codes to color encode their WAWA Map found on their homepage. You can find a lookup reference table of these codes and colors, [see pyiem library](https://github.com/akrherz/pyIEM/blob/main/src/pyiem/nws/vtec.py).
1. How do polygon warnings exist in the IEM archive prior to being official?
The NWS offices started experimenting with polygons beginning in 2002. These polygons were included with the warnings, but sometimes were not geographically valid and/or leaked well outside of a local office's CWA bounds. On 1 October 2007, these polygons became the official warning for some VTEC types. In general, the IEM's data ingestor attempts to save these polygons whenever found.
1. What is the source of Alaska Marine VTEC events?
For various convoluted reasons, Alaska WFOs do not issue full blown VTEC
enabled products for their Marine Zones. Instead, somewhat cryptic headlines
are generated within their `CWF` and `OFF` products that create faked VTEC
events for their marine zones. On 4 January 2025, the IEM created a workflow
that attempts to process these into somewhat spatial/temporally coherent
VTEC events. At the time, an evaluation was done on a similar fake VTEC
generation that was being done by the NWS within its CAP messages. This was
found to be lacking due to very crude event identifier generation.
So the IEM processing runs in real-time and these events were backfilled into
years dating back to 2005. Further back processing was not straight forward
due to complexities with the raw text.
Some processing quirks include VTEC events are not permitted to cross year
boundaries and there is no "in the future" logic that attempts to glean from
the text if the given event is not yet active. Rewording, if the `CWF` or
`OFF` text says "Gale Warning", the assumption is that the "Gale Warning" is
now in effect.
================================================
FILE: docs/deployment/vendor-static-assets.md
================================================
# Vendor Static Assets Deployment
This document explains how assets under /vendor/ are provided to the webroot.
## Why This Exists
A number of IEM maintained repos use common javascript / CSS libraries. Since
it is nice to do offline development and for patching, a simple github vendor
repo is maintained and synced to /opt/vendor within the webfarm nodes.
## Source of Truth
- Upstream repo: [akrherz/vendor](https://github.com/akrherz/vendor)
- Version pinning policy: None
- Integrity/verification policy: None
## Provisioning Model
1. The github repo is cloned to /opt/vendor
2. That same repo contains an apache configuration snippet that mounts the
repo to answer /vendor/ URLs within other repos.
## Validation
It is safe for code review to assume resources are properly references with
/vendor/ mounted URI paths.
================================================
FILE: docs/meetings.md
================================================
Assorted Meeting Notes
=====
14 Jan 2020 Dr Takle, Iowa Climate Assessment
----
- Seeking to have first Iowa specific climate assessment report made
- Just to note that Iowa is one of the few states without sig orography
- maps can be of trends in the 9 climate regions
- orography allows us to downscale more easily (?)
- [ ] would like to see some sort of humidity variable in climodat
- review Indiana's well done assessment
- Seek a report on Iowa's current human health related to climate
- would be nice to talk some about ozone, but am unsure of data sources
30 Aug 2018 Monsanto
-----
- Taylor, Todey, Arritt, Dohleman, Colman
- 10-11 Oct in St Louis is the ag-mesonets workshop
- Dicamba label says to not spray in an inversion
- when forecast probabilities are <10% or >90%, accuracy is 93%
- code for spraying app is in the public domain
- sprayer height is 24 inches above canopy
- spraying in the morning goes with the probabilities, not so in afternoon
- app has some spraying metadata management help
- does logging of the pin drops exist, likely not
- hours below temperature per year would be helpful
- wind speed does not fully descriminate inversion presence
29 Mar 2016 Syngenta Discussion at Slater
----
- Joe Colleti, Bill Bevis, Kendall Lamkey, Joe Byrun, Greg Dudan, Homer Coden
Josh Larson, Paul Travis, Danny Sign, Jim Reece, Tom Warner, Chad Geater
Craig Davis, Mike Lorsan, Caroline Lawrence, James Coyle
- Conference calls left off with need to resolve access and mechanics of how
this would work out.
- Syngenta has roughtly relationships with 15-20 Universities per 12-18 months
- Never known transfer of actual data to another university though
- Discussion about what the NSF funded midwest data hub looks like
- It has 8 spokes, one of which is digitial Ag, another is Food, Energy, Water
- The hub has the hope of collaborating with industry partners
- the hub is a blanket umbrella for other projects to get funded with
- The IP rights of such a collaboration are not necessarily defaulted to ISU
- The hope is to get the lawyers to approve of this activity only once
- There are two proposals in consideration as a part of the data hub spoke
- USDA has a new foundation called FAR to fund stuff
- NSF proposal cycle has deadlines for next Jan, Feb
- the hope is that these proposals would be coming from blessing by the hub
spokes and not rouge proposals
- There are always proposal deadlines for things to consider
- There are collaboration opportunities withe computer engineering and others
to deal with computational tasks
- Need to have a means to lure faculty into this that may have an interest
- Syngenta has interest in persuing external funding
- We'll be having breakouts today to further discuss things
- I went to the Environmental Data Group with Joe Colleti and Chad Geater
- Field weather stations have standard variables
- They use gridded 0.25 degree data from the ECMWF (proprietary)
- need to tease out drought tolerance variables from obs
- unsure what exists for soybean data
- a recent push was to push for GPS coordinates on all their data
- Unsure what management data exists
- they may have some soil temperature data
- an issue is finding agreement between environmental datasets
- Data needed depends on the science, or is it vice versa
- A key aspect is where the compute runs that has to access the data
- Likely can not determine logistics today
- Not all of their data is relational, in fact, likely not even a majority
- What is the quality of metadata?
- They are working on data tagging.
- Some of the datasets have changes in how the data was observed over the years
- Would it be good to embed people within each institution to help with this
collaboration?
- A vast majority of the data would take effort to move and curate, not ready
- Lots of data already exists, no energy to start processing it
- Cateloging the data is a big time sync
- talk about a project called G2F taking field measurements
- G2F is having good luck with standardizing protocols
- Need to make sure questions being posed are not redundant between groups
- There is a some NSF data hub meeting on May 15-16
- Do ISU corn and soybean faculty currently collaborate? Sort of.
- Not everybody at ISU is into team science :)
- Talk about the structure of an ISU / Syngenta symposium
================================================
FILE: docs/nmp.md
================================================
National Mesonet Project Meetings
======
25 Jan 2017 SGT Conference call at AMS Seattle
----
- Background of SGT, primarly with NASA (400 out of 550m $US)
- South Alabama Mesonet presentation
- Florida AWN presented some details on their network
- reliability reports are not on calendar months, but period of days
- adding new stations does not mean an immediate increase in funding
================================================
FILE: docs/soilmoisture.md
================================================
Soil Moisture Network Meeting Notes
===================================
17 May 2021 :: Planning with new hire Mark
-----
- [x] "Hourly Radiation" on pulldown is vague.
- [ ] Frozen Soil on Sortable Currents is in poor taste.
- There's a new Fruit + Vegetable hire coming, which may take over vineyards.
- Decided to barry the soilvue to 12 inches depth and place a reflectometer
at the 4inch depth.
- [ ] no close icon on the popup for homepage map
- [x] daily precip plotting does not work
13 Jan 2020 :: Planning meeting with Dr Lamkey
----
- Continued desire to get time with the farm managers
- Dr Honeyman appears to be onboard with 1/2 weather station replacement
- "Redesign Iowa Agriculture" is a theme to hit on.
- Small companies in Iowa are the ones that will use our data the most.
- Look into what the Iowa Flood Center is doing for water table obs.
- Discussion of proposing 6 positions for the Iowa Weather Network.
- Should also target livestock industry in the state.
- [ ] remove the county colors from the map.
- [ ] only show stations on the map that have longer term data?
- [ ] look into the 1977 drought in Story County.
- Make plots of heat index and stress changes over the years.
17 Dec 2019 :: Meeting with Dr Lamkey
----
- Weather data is important to Ag Research and we need to emphasis that.
- Dr Lamkey discussed replacing Ethan with Dr Honeyman, who is on board.
- There is experiment station money that needs to be spent on research.
- Dr Lamkey would like to see more monetization of the IEM.
- Discussion of previous inversion station efforts.
- [ ] create a one pager describing the usage of IEM/ISUSM
- Will provide the one pager to the Dean, who may wish to promote it.
- Dr Lamkey wishes we not concentrate on implementation, but request a budget.
- People think NOAA stations are enough, one pager to show otherwise.
- Discussion of new Dr Taylor position and how that may work out.
- Tie in Climate Smart Ag.
- Loop in USCRN?
- Have a grad student do research / station maintenance next summer.
15 Aug 2019 :: Vineyard Station Meeting
----
- Jim Schraeder uses my stuff a bunch already
- [ ] Send some example ISU Farm cooperator agreements for their review
- Kenny McCabe installed the stations and still is on campus somewhere
- [ ] product they use is hours of wetness per week
- [ ] add comments to excel headers for easier usage
7 Feb 2018
----
- Hornbuckle, Flory, Ethan, Vanloocke
- Add vineyard station modems to the quote
- Add cooperator stations modems to the quote
- place the 6 Dr Todey sensors on 3 towers to replicate current towers
- Maybe our inversion station is slightly over 5K
- Campbell will announce pricing soon on the SoilVue10
23 Jan 2018
----
- Hornbuckle, Flory, Ethan, Vanloocke
- Discussion on budgeting the $36K we have to spend on the sensors
1 need to replace the modems
2 need to buy some parts for Ethan
3 Inversion stations with target of 5K per station
- [ ] daryl writes up the proposal and gives options needed.
20 Mar 2017
----
- Archontoulis, Goode, Ethan, KenP(Nashua), VanLoocke, Berns, Taylor, Flory
- Mark Honeyman was unable to attend
- The remaining vineyard station modems are in Flory's Office
- Discussion on what to do with the precipitation sensors and if we should
add a second at each site. Will be adding a second at AEA Farm to test
- [ ] Need to make a correction to Sutherland's precip in 2013
- [ ] convert yieldfx reports back to a basis of COOP data
- Dr Taylor noted that proximity to power lines help shield the stations
from lightning
- [ ] engage Dr Honeyman again about automating precip report for farm sites
that don't do COOP reporting
25 Aug 2016
-----
- Tim Goode, Mark Honeyman, Ethan, Archontoulis, VanLoocke, Arritt, Cochran
- Lots of discussion on the 5 vineyard stations, some highlights
- currently in boxes, purchased in June
- would like to spread them out over the state
- have leaf wetness sensors
- They will likely not be under bare soil
- discussion on how these stations can be used for frost protection(?), this
was not fully clear to me, but it would involve some aux forecast data
- the soils are high pH, but not necessily sandy
- they have the same cell modems
- still have to resolve where they are putting soil moisture sensors
- [x] email Flory and gauge interest on this matter
- discussion of placing a new sensor on a farm of interest NE of Ames
- is the new station at Marcus too close to others?
29 Jun 2016
----
- Tim Goode, Mark Honeyman, Ethan, Flory, Archontoulis, Taylor, Vanloocke.
Arritt
- Dr Honeyman has a draft agreement that was worked on with legal council
for the sites that are on private farms
- Dr Taylor expressed a need to start replacing the wind sensors soon
- He has a spot in mind (Marcus, IA) for the current unused station
- Discussion about how soil moisture calibration is done in Oklahoma and
how we could apply it here
- They take two samples down to 5ft and then do gravimetric
- Dr Taylor believes that we don't need per-site logger program calibrations
of the sensors, errors are within 2%
- Flory is going to look into multiplexors
- [ ] daryl's TODO item on replacing winter precip was discussed again
- Voted to have a bare soil requirement, Dr Honeyman will email out the group
- We can likely increase the reporting interval as the timing and bandwidth
exists
- The door was opened again for having the Hort/Vineyard stations join the
network
- Discussion on what the Iowa Flood Center is deploying for soil moisture
stations.
9 Jun 2016
----
- Tim Goode, Mark Honeyman, Ethan, Flory, Archontoulis, Lamkey
- Discussion of the new vineyard stations and likely not to include them at
this time
- I raised the need for 5-15 minute data and was wondering about the cell
phone bill and if it could support more frequent data
- Need to look into a legal aggreement with the private farm weather stations
as the lat/lons are published for them
- Need to decide if bare soil would be maintained for sites for the 4 inch
sensor.
- Need coefficients for each site so to get accurate soil moisture data
- perhaps the soil moisture data should be removed from the website until
this issue is resolved...
- [ ] daryl should implement a replacement of the winter time precip so to
allow for more complete data
- [x] change the alerting threshold for offline alerts as they are being
ignored by others
- Ethan is funded 100% now from Experiment Station, so can work on this
- [ ] create electronic version of the checklist for stations to do
- Email Tim and Ethan on issues at the same time.
================================================
FILE: docs/yieldproject.md
================================================
FACTs Project Meeting Notes
========
26 Jun 2019 Archontoulis Angelos
----
- For next year, the PSIMs domain may expand to MN and NE
- [ ] akrherz/iem#199 can we move IEMRE to the database to make it faster
- [ ] would like to launch a crop dry down app by Aug 3
- Instead of providing average RH, I could just provide daily min/max
- [ ] produce a map showing RH computation bias by averaging method
- [ ] NASA POWER has a RH field I could potentially use
- [ ] daymet allow maybe has a RH field I could use
23 May 2019 Archontoulis Isaiah
----
- [ ] CFS may have some strange issues around cold days < 40F
- [x] Send Angelo new map addresses
- [x] Take location labels off the map
- [x] Plot Magnitude of GDD departure
2 May 2019 Archontoulis
----
- [ ] he wants CFS radiation capped at 31 MJ/d
- Plan is to push weekly update at 9 AM Wednesday, so runs made on Tuesday
- [ ] Deliver a WPC Map of forecasted 7 day precipitation
- [x] GDD departures over the coming week
- [x] next week daily max temperature and daily min temperature
- [ ] create a pyIEM zoom for the corn belt, IA->IN
- [ ] PSIMs yearly scenario substitions, like what is done for station data
5 Apr 2019 Archontoulis, Angelos, Isaiah, one other
----
- The regional interest this year is IA, IL and IN
- [ ] investigate NASA Power and see how difference its radiation is
- There are three deliverables they want
- [x] Static 1980-2018 PSIMs files, like I generated last year
- [x] four routinely updated PSIMs files, one for each CFS 9 mon realization
- [ ] scenarios with all years substituted. This may be too much data for
them, so lower priority for now.
5 Jan 2017 Dr Archontoulis
----
- Review Nov 1 to today plot, to ensure it is doing the right thing
- [ ] remove the march 15 to today plot, not used
- [ ] Add NASS county yield somehow to the aridity x/y plot
- A new folder was created at dropbox for the uploads to go to
11 Apr 2016 Dr Archontoulis
----
- He now has 6 files processed up until 23 March, wants data till 30 Nov
- March 15th start date for the various GDD, etc plots
- For the future scatter, just make it a cloud with some lines in it
- Would like to use dropbox for sharing files
- Add a GDD column and others for the APSIM met file
- FIX: the units of the soil moisture shown in the download page
- Will want me to produce a differently formatted file later in July
- He wants 4 days of forecast data
- Output file name is Ames_YYYYmmdd.met
24 Mar 2016 Dr Archontoulis
----
- Discuss my involvement with the yield forecasting project
- Dr Helmers Cobbs site will be sending hourly precip data my way
- They have a good web developer, so I am just wrangling data
- I need to look at a dataset called agmerra
- So the complicated routine about producing a 1980-2015 weather data file
that has this year's data + forecast replacing that year's period. Then the
rest of the year is simply taking that old year's data. I'll automate this
- Look into usage of GFS + CFS for forecast data
- There are six sites in play
================================================
FILE: environment.yml
================================================
dependencies:
# NB: these are requirements of code in this repo
# autoplot uses
- affine
# pytest
- beautifulsoup4
# don't download stuff
- cartopy_offlinedata
# command line
- click
# pytest
- coverage
# mastodon iembot page
- cryptocode
# ?help support
- docutils
# one wxc script
- ephem
# various places
- fiona
# various places
- gdal
# TC backend
- gunicorn
- libgdal-pg
# ISUSM ingest
- inotify
# For grib to TIFF conversion
- libgdal-grib
# important
- geopandas
# Get stuff
- httpx
# mrms script
- imageio
# Unknown problem with netCDF4 not loading
- libnetcdf=4.9
# soft requirement for pandas
- lxml
- mastodon.py
- matplotlib-base
# various places
- metar
# duh
- metpy>=1.0.0
# yup
- netcdf4
# Transient dep for pyIEM, which is pip installed
- nh3
# yup
- numpy
# racoon
- odfpy
# Complicated dep need for iemwebfarm mod_wsgi usage
- openldap
# excel output
- openpyxl
# due to config settings
- pandas>=3
# mod-wsgi
- paste
# PIL
- pillow
# for downstream installs
- pip
# for psql and friends
- postgresql
# database
- psycopg
# for pyiem
- pyarrow
# validation
- pydantic
# lots of places
- pygrib
# caching
- pymemcache
# various places
- pyproj
# various shapefile dumpers
- pyshp>=2
# for testing
- pytest
- pytest-cov
- pytest-httpx
- pytest-mpl
- pytest-runner
- pytest-xdist
- qrcode
# various places
- rasterio
# various places
- rasterstats
# Can't really avoid
- requests
# Testing
- responses
# important
- scipy
# autoplots
- seaborn
# needed for downstream pip install?
- setuptools-markdown
# cow et al
- shapely
# various dumpers
- simplejson
- sqlalchemy
# for streaming back zip files
- stream-zip
# scripts
- tqdm
# AHPS scripts
- twisted
# testing
- werkzeug
# need to use more
- verde
# Excel
- xlsxwriter
# Excel
- xlwt
================================================
FILE: eslint.config.js
================================================
// Legacy CommonJS ESLint configuration for pre-commit compatibility
const js = require("@eslint/js");
const globals = require("globals");
module.exports = [
// Configuration for ESLint config file itself (Node.js environment)
{
files: ["eslint.config.js"],
languageOptions: {
ecmaVersion: 2020,
sourceType: "script",
globals: {
...globals.node
}
},
rules: {
"no-console": "off"
}
},
// Ignore other problematic files
{
ignores: ["htdocs/vtec/assets/*.js", "htdocs/lsr/static.js"]
},
js.configs.recommended,
// Configuration for traditional script files (.js)
{
files: ["**/*.js"],
ignores: ["src/iemjs/**/*.js"],
languageOptions: {
ecmaVersion: 2020,
sourceType: "script",
globals: {
...globals.browser,
// Prohibited globals (set to false to trigger errors)
"$": false,
"jQuery": false,
// Allowed globals for traditional scripts
"ol": "readonly",
"Ext": "readonly",
"iemdata": "readonly",
"moment": "readonly",
"flowplayer": "readonly",
"bootstrap": "readonly"
}
},
rules: {
// jQuery prohibition rules
"no-restricted-globals": [
"warn",
{
"name": "$",
"message": "jQuery should not be used. Use vanilla JavaScript instead."
},
{
"name": "jQuery",
"message": "jQuery should not be used. Use vanilla JavaScript instead."
}
],
// Modernization hints
"no-restricted-syntax": [
"warn",
{
"selector": "CallExpression[callee.property.name='substr']",
"message": "substr() is deprecated. Use substring() or slice() instead."
},
{
"selector": "CallExpression > Identifier[name='undefined']:last-child",
"message": "Avoid explicitly passing 'undefined' as the last argument. Omit the argument instead - it defaults to undefined."
},
// Encourage optional chaining over && in conditionals
{
"selector": "IfStatement[test.type='LogicalExpression'][test.operator='&&'][test.right.type='MemberExpression']",
"message": "Use optional chaining (?.) instead of && for null checks before property access."
},
{
"selector": "IfStatement[test.type='LogicalExpression'][test.operator='&&'][test.right.type='CallExpression'][test.right.callee.type='MemberExpression']",
"message": "Use optional chaining (?.) instead of && for null checks before method calls."
},
{
"selector": "ConditionalExpression[test.type='LogicalExpression'][test.operator='&&'][test.right.type='MemberExpression']",
"message": "Use optional chaining (?.) instead of && in conditional expressions for property access."
},
{
"selector": "ConditionalExpression[test.type='LogicalExpression'][test.operator='&&'][test.right.type='CallExpression'][test.right.callee.type='MemberExpression']",
"message": "Use optional chaining (?.) instead of && in conditional expressions for method calls."
},
{
"selector": "IfStatement[consequent.type='BlockStatement'][consequent.body.length=1][consequent.body.0.type='ReturnStatement'][consequent.body.0.argument.type='Literal'][consequent.body.0.argument.value=true][alternate.type='BlockStatement'][alternate.body.length=1][alternate.body.0.type='ReturnStatement'][alternate.body.0.argument.type='Literal'][alternate.body.0.argument.value=false]",
"message": "Found complex boolean return - return the boolean expression directly instead of if/else with true/false."
},
{
"selector": "IfStatement[consequent.type='ReturnStatement'][consequent.argument.type='Literal'][consequent.argument.value=true][alternate.type='ReturnStatement'][alternate.argument.type='Literal'][alternate.argument.value=false]",
"message": "Found complex boolean return - return the boolean expression directly instead of if/else with true/false."
},
{
"selector": "TemplateLiteral[expressions.length=0]",
"message": "Template Literal Found - use single quotes instead of template literals when no interpolation is needed."
}
],
// Code quality
"curly": ["error", "all"],
"eqeqeq": "error",
"no-console": "warn",
"no-debugger": "error",
"one-var": ["error", "never"], // Require one variable declaration per line
"init-declarations": ["error", "always"], // Require variables to be initialized when declared
"object-shorthand": "warn", // Use shorthand property syntax for object literals (e.g., {foo} instead of {foo: foo})
// Variable shadowing detection
"no-shadow": ["error", {
"builtinGlobals": false,
"hoist": "functions",
"allow": ["err", "error", "resolve", "reject", "cb", "callback", "done"]
}],
// Duplicate assignment detection
"no-self-assign": "error",
"no-sequences": "error",
"no-unreachable": "error",
// Block-scoped declarations
"no-inner-declarations": ["error", "both"], // Function or var declarations in nested blocks is not preferred
// Additional code quality rules to catch common issues
"no-implicit-coercion": "warn",
"no-return-assign": "error",
"array-callback-return": "error",
"no-unused-expressions": ["error", { "allowShortCircuit": true, "allowTernary": true }],
"prefer-arrow-callback": "warn", // Consider using arrow functions for callbacks
"prefer-template": "warn", // Template Literal Found - use template literals instead of string concatenation
"prefer-const": "warn", // Use const declarations for variables that are never reassigned
"default-case": "warn", // No default cases in switch statements
"complexity": ["warn", { "max": 15 }], // Function with cyclomatic complexity higher than threshold
"no-unused-vars": ["warn", {
"vars": "all",
"args": "after-used",
"ignoreRestSiblings": false,
"argsIgnorePattern": "^_",
"varsIgnorePattern": "^_",
"caughtErrors": "all"
}], // Found unused objects
// Avoid usage of `this` in JavaScript code (IEM rule)
"no-invalid-this": "error",
"consistent-this": ["error", "self"],
"class-methods-use-this": "warn", // Warn when class methods don't use `this` and could be static
// Disable some rules that might be too strict for legacy code
"no-redeclare": "off"
}
},
// Configuration for ES modules (.module.js and IEM utilities)
{
files: ["**/*.module.js", "src/iemjs/**/*.js"],
languageOptions: {
ecmaVersion: 2022,
sourceType: "module",
globals: {
...globals.browser
}
},
rules: {
// Base ES5+ compliance rules
"no-var": "error",
// jQuery prohibition rules
"no-restricted-globals": [
"error",
{
"name": "$",
"message": "jQuery should not be used. Use vanilla JavaScript instead."
},
{
"name": "jQuery",
"message": "jQuery should not be used. Use vanilla JavaScript instead."
}
],
// Modern JavaScript preferences (more strict for modules)
"prefer-arrow-callback": "error",
"prefer-template": "error",
"prefer-const": "error", // Use const declarations for variables that are never reassigned
"object-shorthand": "error",
"no-return-await": "error", // Prevent unnecessary return await (performance issue)
// Deprecated method warnings for modules too
"no-restricted-syntax": [
"warn",
{
"selector": "CallExpression[callee.property.name='substr']",
"message": "substr() is deprecated. Use substring() or slice() instead."
},
{
"selector": "ArrowFunctionExpression > AssignmentExpression",
"message": "Avoid assignment operations in arrow function implicit returns. Use block statements with curly braces for side effects."
},
{
"selector": "CallExpression > Identifier[name='undefined']:last-child",
"message": "Avoid explicitly passing 'undefined' as the last argument. Omit the argument instead - it defaults to undefined."
},
{
"selector": "IfStatement[test.type='LogicalExpression'][test.operator='&&'][test.left.type='Identifier'][test.right.type='MemberExpression']",
gitextract_wagou1ak/ ├── .deepsource.toml ├── .editorconfig ├── .github/ │ ├── ci_db_testdata.py │ ├── copilot-instructions.md │ ├── dependabot.yml │ ├── ms_environment.yml │ ├── setupdata.sh │ ├── setuppaths.sh │ └── workflows/ │ ├── build.yml │ ├── codeql.yml │ ├── etchosts.txt │ ├── mapserver.yml │ ├── publish-iemjs.yml │ └── test-iemjs.yml ├── .gitignore ├── .pre-commit-config.yaml ├── .prettierrc ├── LICENSE ├── README.md ├── cgi-bin/ │ ├── afos/ │ │ └── retrieve.py │ ├── climate/ │ │ └── orc.py │ ├── geocoder.py │ ├── index.php │ ├── mywindrose.py │ ├── onsite/ │ │ └── birthday/ │ │ └── getweather.py │ ├── precip/ │ │ ├── catAZOS.py │ │ └── catSNET.py │ ├── request/ │ │ ├── asos.py │ │ ├── asos1min.py │ │ ├── coop.py │ │ ├── coopobs.py │ │ ├── daily.py │ │ ├── feel.py │ │ ├── gis/ │ │ │ ├── awc_gairmets.py │ │ │ ├── cwas.py │ │ │ ├── lsr.py │ │ │ ├── misc.py │ │ │ ├── nexrad_storm_attrs.py │ │ │ ├── pireps.py │ │ │ ├── sigmets.py │ │ │ ├── spc_mcd.py │ │ │ ├── spc_outlooks.py │ │ │ ├── spc_watch.py │ │ │ ├── sps.py │ │ │ ├── watch_by_county.py │ │ │ ├── watchwarn.py │ │ │ └── wpc_mpd.py │ │ ├── grx_rings.py │ │ ├── hads.py │ │ ├── hml.py │ │ ├── hourlyprecip.py │ │ ├── index.php │ │ ├── isusm.py │ │ ├── metars.py │ │ ├── mos.py │ │ ├── nass_iowa.py │ │ ├── nlaeflux.py │ │ ├── normals.py │ │ ├── other.py │ │ ├── purpleair.py │ │ ├── raob.py │ │ ├── raster2netcdf.py │ │ ├── rwis.py │ │ ├── scan.py │ │ ├── scp.py │ │ ├── smos.py │ │ ├── ss.py │ │ ├── taf.py │ │ ├── talltowers.py │ │ ├── tempwind_aloft.py │ │ ├── uscrn.py │ │ └── wmo_bufr_srf.py │ └── wms/ │ ├── goes/ │ │ ├── alaska_ir.cgi │ │ ├── alaska_vis.cgi │ │ ├── alaska_wv.cgi │ │ ├── conus_ir.cgi │ │ ├── conus_vis.cgi │ │ ├── conus_wv.cgi │ │ ├── east_ir.cgi │ │ ├── east_vis.cgi │ │ ├── east_wv.cgi │ │ ├── goes.cgi │ │ ├── hawaii_ir.cgi │ │ ├── hawaii_vis.cgi │ │ ├── hawaii_wv.cgi │ │ ├── west_ir.cgi │ │ ├── west_vis.cgi │ │ └── west_wv.cgi │ ├── goes_east.cgi │ ├── goes_west.cgi │ ├── hrrr/ │ │ ├── refd.cgi │ │ └── refp.cgi │ ├── idep.cgi │ ├── index.php │ ├── iowa/ │ │ ├── rainfall.cgi │ │ └── roadcond.cgi │ ├── nexrad/ │ │ ├── daa.cgi │ │ ├── dta.cgi │ │ ├── eet.cgi │ │ ├── n0q-t.cgi │ │ ├── n0r-t.cgi │ │ ├── n1p.cgi │ │ ├── net.cgi │ │ ├── ntp.cgi │ │ └── ridge.cgi │ ├── q2.cgi │ └── us/ │ ├── counties.cgi │ ├── mrms.cgi │ ├── mrms_nn.cgi │ ├── obs.cgi │ ├── roadtemps.cgi │ └── states.cgi ├── config/ │ ├── 00iem-ssl.conf │ ├── 00iem.conf │ ├── backend.conf │ ├── iem-archive.conf │ ├── mesonet-longterm-vhost.conf │ ├── mesonet.inc │ ├── navbar.json │ └── settings.inc.php.in ├── conftest.py ├── data/ │ └── gis/ │ ├── avl/ │ │ └── iemrainfall.avl │ ├── base.sym │ ├── fonts.list │ ├── iem.mapinc │ ├── lsrs.mapinc │ ├── meta/ │ │ ├── 26914.prj │ │ ├── 26915.prj │ │ ├── 4326.prj │ │ ├── 5070.prj │ │ ├── current_ww.shp.xml │ │ └── stereo.prj │ ├── roads.mapinc │ ├── shape/ │ │ ├── basins.dbf │ │ ├── basins.sbn │ │ ├── basins.sbx │ │ ├── basins.shp │ │ └── basins.shx │ ├── stations.sym │ └── symbols/ │ ├── images/ │ │ └── iem_logo.png-save │ └── stations.sym ├── deployment/ │ ├── iem-tilecache.service │ ├── start_tc_wsgi.sh │ └── symlink_manager.py ├── docs/ │ ├── datasets/ │ │ ├── afos.md │ │ ├── climodat.md │ │ ├── iemre.md │ │ ├── metar.md │ │ ├── template.md │ │ └── vtec.md │ ├── deployment/ │ │ └── vendor-static-assets.md │ ├── meetings.md │ ├── nmp.md │ ├── soilmoisture.md │ └── yieldproject.md ├── environment.yml ├── eslint.config.js ├── htdocs/ │ ├── .well-known/ │ │ ├── ai-plugin.json │ │ └── traffic-advice │ ├── ASOS/ │ │ ├── current.phtml │ │ ├── index.phtml │ │ ├── precipnote.phtml │ │ ├── recent.css │ │ ├── recent.module.js │ │ ├── recent.phtml │ │ └── reports/ │ │ ├── mon_prec.css │ │ ├── mon_prec.module.js │ │ └── mon_prec.php │ ├── AWOS/ │ │ ├── current.phtml │ │ ├── index.phtml │ │ ├── reports/ │ │ │ └── mon_prec.php │ │ └── skyc.phtml │ ├── COOP/ │ │ ├── 7am-app.js │ │ ├── 7am.css │ │ ├── 7am.php │ │ ├── cat.module.js │ │ ├── cat.phtml │ │ ├── current.phtml │ │ ├── dl/ │ │ │ └── normals.phtml │ │ ├── extremes.css │ │ ├── extremes.js │ │ ├── extremes.php │ │ ├── freezing.php │ │ ├── hpd.php │ │ ├── index.css │ │ ├── index.phtml │ │ ├── map/ │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── index.php │ │ ├── periods.phtml │ │ └── snowd_duration.phtml │ ├── DCP/ │ │ ├── cat.phtml │ │ ├── current.phtml │ │ ├── index.phtml │ │ ├── map.css │ │ ├── map.js │ │ ├── map.php │ │ ├── plot.module.js │ │ ├── plot.php │ │ ├── plot.phtml │ │ ├── site.css │ │ ├── site.phtml │ │ ├── tomb.module.js │ │ └── tomb.phtml │ ├── GIS/ │ │ ├── ams_030211.phtml │ │ ├── apps/ │ │ │ ├── agclimate/ │ │ │ │ ├── chill.php │ │ │ │ ├── dayplot.phtml │ │ │ │ ├── gsplot.css │ │ │ │ ├── gsplot.js │ │ │ │ ├── gsplot.php │ │ │ │ ├── gsplot.phtml │ │ │ │ ├── month.php │ │ │ │ └── plot.php │ │ │ ├── coop/ │ │ │ │ ├── gsplot.php │ │ │ │ ├── gsplot.phtml │ │ │ │ ├── index.php │ │ │ │ ├── plot.phtml │ │ │ │ └── request.php │ │ │ ├── iem/ │ │ │ │ ├── freeze.js │ │ │ │ └── freeze.phtml │ │ │ ├── onsite/ │ │ │ │ └── robins.php │ │ │ ├── profit/ │ │ │ │ ├── index.css │ │ │ │ ├── index.js │ │ │ │ └── index.php │ │ │ └── rview/ │ │ │ ├── anim_gif.php │ │ │ ├── compare.phtml │ │ │ ├── warnings.css │ │ │ ├── warnings.module.js │ │ │ ├── warnings.phtml │ │ │ ├── warnings_cat.phtml │ │ │ └── watch.phtml │ │ ├── awips211.aux.xml │ │ ├── awips211.prj │ │ ├── goes.phtml │ │ ├── index.php │ │ ├── isu_021120.phtml │ │ ├── maps/ │ │ │ └── pyims.xml │ │ ├── model.phtml │ │ ├── rad-by-year-fe.phtml │ │ ├── rad-by-year.php │ │ ├── radmap.php │ │ ├── radmap_api.phtml │ │ ├── radview.phtml │ │ ├── rasters.php │ │ ├── rby-overview.php │ │ ├── ridge.phtml │ │ ├── sbw-history.php │ │ └── tiff/ │ │ └── index.py │ ├── QC/ │ │ ├── index.phtml │ │ ├── madis/ │ │ │ ├── network.css │ │ │ └── network.phtml │ │ ├── offline.php │ │ └── tickets.phtml │ ├── RWIS/ │ │ ├── camera.module.js │ │ ├── camera.phtml │ │ ├── current.phtml │ │ ├── currentSF.phtml │ │ ├── index.phtml │ │ ├── soil.phtml │ │ └── traffic.phtml │ ├── agclimate/ │ │ ├── ames_precip.phtml │ │ ├── current.phtml │ │ ├── display.php │ │ ├── et.phtml │ │ ├── hist/ │ │ │ ├── daily.php │ │ │ ├── dailyRequest.php │ │ │ ├── hourly.php │ │ │ ├── hourlyRequest.php │ │ │ ├── inversion.php │ │ │ └── worker.php │ │ ├── index.css │ │ ├── index.js │ │ ├── index.phtml │ │ ├── info.phtml │ │ ├── smts.php │ │ ├── soilt-prob.php │ │ ├── soilt.css │ │ ├── soilt.module.js │ │ └── soilt.php │ ├── agweather/ │ │ └── index.php │ ├── api/ │ │ ├── index.php │ │ └── proxy_error_handler.py │ ├── apps.module.js │ ├── apps.php │ ├── archive/ │ │ ├── codsat/ │ │ │ ├── index.css │ │ │ ├── index.module.js │ │ │ └── index.phtml │ │ ├── index.php │ │ ├── mrms.php │ │ ├── raob/ │ │ │ ├── index.module.js │ │ │ ├── index.phtml │ │ │ ├── list.module.js │ │ │ └── list.phtml │ │ └── schema.php │ ├── c/ │ │ ├── c.py │ │ └── tile.py │ ├── cache/ │ │ └── tile.py │ ├── circa2001.phtml │ ├── clientaccesspolicy.xml │ ├── climate/ │ │ ├── index.phtml │ │ ├── records.phtml │ │ ├── week.phtml │ │ ├── year.phtml │ │ └── yesterday.phtml │ ├── climodat/ │ │ ├── index.css │ │ ├── index.phtml │ │ ├── monitor.module.js │ │ ├── monitor.php │ │ ├── monthly_ks.txt │ │ └── yearly_ks.txt │ ├── cocorahs/ │ │ ├── current.phtml │ │ ├── index.phtml │ │ └── obs.phtml │ ├── content/ │ │ ├── date.php │ │ └── pil.php │ ├── cool/ │ │ └── index.phtml │ ├── cow/ │ │ ├── chart.php │ │ ├── index.module.js │ │ ├── index.phtml │ │ ├── maplsr.phtml │ │ ├── sbwstats.css │ │ ├── sbwstats.phtml │ │ ├── sbwsum.phtml │ │ └── top10.phtml │ ├── crossdomain.xml │ ├── css/ │ │ ├── iastate-iem.css │ │ ├── iemss.css │ │ ├── main.css │ │ └── print.css │ ├── current/ │ │ ├── all.phtml │ │ ├── bloop.phtml │ │ ├── camera.module.js │ │ ├── camera.phtml │ │ ├── camlapse/ │ │ │ ├── app.js │ │ │ ├── index.phtml │ │ │ ├── kcrg.js │ │ │ └── kcrg.phtml │ │ ├── camrad.php │ │ ├── index.phtml │ │ ├── isucams.phtml │ │ ├── live.py │ │ ├── loop.phtml │ │ ├── mcview.module.js │ │ ├── mcview.phtml │ │ ├── radar.phtml │ │ ├── sel.phtml │ │ ├── severe.phtml │ │ ├── uscrn.phtml │ │ ├── viewer.css │ │ ├── viewer.js │ │ ├── viewer.phtml │ │ ├── webcam.css │ │ ├── webcam.js │ │ └── webcam.php │ ├── disclaimer.php │ ├── dm/ │ │ └── index.phtml │ ├── docs/ │ │ ├── forecast/ │ │ │ └── highs.phtml │ │ ├── nexrad_mosaic/ │ │ │ ├── index.phtml │ │ │ └── wmst.html │ │ ├── radmapserver/ │ │ │ ├── howto-0.rtf │ │ │ ├── howto-1.html │ │ │ ├── howto-2.html │ │ │ ├── howto-3.html │ │ │ ├── howto-4.html │ │ │ ├── howto-5.html │ │ │ ├── howto-6.html │ │ │ ├── howto-7.html │ │ │ ├── howto.html │ │ │ ├── howto.rtf │ │ │ ├── howto.sgml │ │ │ ├── howto.txt │ │ │ └── index.phtml │ │ ├── unidata2006/ │ │ │ ├── index.phtml │ │ │ └── wmst.html │ │ └── unidata2021/ │ │ └── index.phtml │ ├── explorer/ │ │ ├── index.css │ │ ├── index.js │ │ └── index.php │ ├── feature_rss.php │ ├── icons/ │ │ └── README │ ├── iemre/ │ │ ├── daily.py │ │ ├── hourly.py │ │ ├── index.phtml │ │ └── multiday.py │ ├── index.css │ ├── index.js │ ├── index.phtml │ ├── info/ │ │ ├── contacts.php │ │ ├── datasets.php │ │ ├── iem.php │ │ ├── links.php │ │ ├── nni.css │ │ ├── nni.phtml │ │ ├── nni_images/ │ │ │ └── morisita.xcf │ │ ├── refs.php │ │ └── variables.phtml │ ├── info.php │ ├── js/ │ │ ├── form2url.module.js │ │ ├── iastate-iem.js │ │ ├── iemss.js │ │ ├── jsani.js │ │ ├── maptable.js │ │ ├── olselect-lonlat.js │ │ ├── olselect.js │ │ └── select2.js │ ├── kml/ │ │ ├── network.php │ │ ├── roadcond.php │ │ ├── sbw_county_intersect.php │ │ ├── sbw_exact_time.php │ │ ├── sbw_interval.php │ │ ├── sbw_lsrs.php │ │ ├── timestamp.php │ │ ├── vtec.php │ │ └── webcams.php │ ├── layar/ │ │ └── l3attr.php │ ├── lsr/ │ │ ├── old.html │ │ ├── old.phtml │ │ ├── static.css │ │ ├── static.js │ │ └── wfos.js │ ├── metadata/ │ │ └── xml/ │ │ ├── index.php │ │ ├── pl.py │ │ ├── rp_IEM.xml │ │ ├── sc_CS_03002.xml │ │ ├── sc_CS_CS215.xml │ │ ├── sc_CS_CS300.xml │ │ ├── sc_CS_CS655.xml │ │ ├── sc_CS_TE525.xml │ │ ├── sd.py │ │ ├── sp_CS_03002_WindDirection.xml │ │ ├── sp_CS_03002_WindSpeed.xml │ │ ├── sp_CS_CS215_RH.xml │ │ ├── sp_CS_CS215_Temp.xml │ │ ├── sp_CS_CS300.xml │ │ ├── sp_CS_CS655_Moisture.xml │ │ ├── sp_CS_CS655_Temp.xml │ │ └── sp_CS_TE525.xml │ ├── mom.php │ ├── mos/ │ │ ├── csv.php │ │ ├── dl.php │ │ ├── fe.phtml │ │ ├── index.php │ │ └── table.phtml │ ├── my/ │ │ └── current.phtml │ ├── nstl_flux/ │ │ ├── index.phtml │ │ ├── plot.php │ │ ├── plots.phtml │ │ └── vars.phtml │ ├── nws/ │ │ ├── ccoop_current.php │ │ ├── cf6map.js │ │ ├── cf6map.php │ │ ├── cf6table.css │ │ ├── cf6table.module.js │ │ ├── cf6table.php │ │ ├── cli-audit/ │ │ │ ├── index.css │ │ │ ├── index.module.js │ │ │ └── index.php │ │ ├── climap.css │ │ ├── climap.js │ │ ├── climap.php │ │ ├── clitable.css │ │ ├── clitable.module.js │ │ ├── clitable.php │ │ ├── coop-cnts.php │ │ ├── debug_latlon/ │ │ │ ├── generate_plot.py │ │ │ ├── index.module.js │ │ │ └── index.phtml │ │ ├── index.php │ │ ├── list_tags.css │ │ ├── list_tags.module.js │ │ ├── list_tags.php │ │ ├── list_ugcs.css │ │ ├── list_ugcs.module.js │ │ ├── list_ugcs.php │ │ ├── mcd_top10.phtml │ │ ├── obs.php │ │ ├── pds_watches.css │ │ ├── pds_watches.module.js │ │ ├── pds_watches.php │ │ ├── snowfall_6hour.css │ │ ├── snowfall_6hour.module.js │ │ ├── snowfall_6hour.php │ │ ├── spc_outlook_search/ │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── index.phtml │ │ ├── spc_top10.phtml │ │ ├── sps_search/ │ │ │ ├── index.css │ │ │ ├── index.js │ │ │ └── index.php │ │ ├── text.php │ │ ├── vtec_obs.php │ │ ├── watches.css │ │ ├── watches.module.js │ │ ├── watches.php │ │ ├── wfo_vtec_count.php │ │ ├── wpc_national_hilo/ │ │ │ ├── index.css │ │ │ ├── index.module.js │ │ │ └── index.php │ │ └── wpc_outlook_search/ │ │ ├── index.css │ │ ├── index.js │ │ └── index.phtml │ ├── ogc/ │ │ ├── arcgis_wtms.html │ │ ├── googlemaps_v3.html │ │ ├── index.phtml │ │ ├── ol3_example.html │ │ └── openlayers_example.html │ ├── one/ │ │ └── README.md │ ├── onsite/ │ │ ├── birthday/ │ │ │ ├── index.php │ │ │ └── pals.css │ │ ├── caucus2004/ │ │ │ ├── fx.txt │ │ │ └── index.phtml │ │ ├── features/ │ │ │ ├── cat.php │ │ │ ├── content.py │ │ │ ├── past.php │ │ │ ├── tags/ │ │ │ │ └── index.php │ │ │ ├── titles.php │ │ │ └── vote.py │ │ ├── news.phtml │ │ └── robins.phtml │ ├── other/ │ │ ├── current.phtml │ │ ├── daily_plot.phtml │ │ ├── index.phtml │ │ ├── plot_temps.php │ │ └── plot_winds.php │ ├── p.php │ ├── plotting/ │ │ ├── asos/ │ │ │ └── 1station_1min.phtml │ │ ├── auto/ │ │ │ ├── autoplot.py │ │ │ ├── gen_qrcode.py │ │ │ ├── index.css │ │ │ ├── index.module.js │ │ │ ├── index.py │ │ │ ├── js/ │ │ │ │ └── mapselect.js │ │ │ └── meta.py │ │ ├── awos/ │ │ │ ├── 1min.php │ │ │ ├── 1min_P.php │ │ │ ├── 1min_V.php │ │ │ └── 1station_1min.php │ │ ├── coop/ │ │ │ ├── acc.phtml │ │ │ ├── climate_fe.php │ │ │ ├── gddprobs.phtml │ │ │ ├── gspread.phtml │ │ │ ├── mspread.phtml │ │ │ ├── precip_cdf_fe.phtml │ │ │ ├── spread_fe.phtml │ │ │ ├── threshold_histogram.php │ │ │ └── threshold_histogram_fe.phtml │ │ ├── gs/ │ │ │ └── fe.phtml │ │ ├── index.php │ │ ├── isumet/ │ │ │ ├── 1min.php │ │ │ ├── 1min_P.php │ │ │ ├── 1min_V.php │ │ │ ├── 1min_inside.php │ │ │ ├── 1station_1min.phtml │ │ │ ├── ams2.phtml │ │ │ ├── rh.php │ │ │ └── srad.php │ │ ├── mesoeast/ │ │ │ ├── 1min.php │ │ │ ├── 1min_V.php │ │ │ ├── 1min_inside.php │ │ │ ├── baro.php │ │ │ ├── dailyrain.php │ │ │ ├── index.phtml │ │ │ ├── rh.php │ │ │ └── temp_rh.php │ │ ├── mesonorth/ │ │ │ ├── 1min_ot.php │ │ │ ├── battery.php │ │ │ └── ot_10min.phtml │ │ ├── month/ │ │ │ ├── rainfall.css │ │ │ ├── rainfall.phtml │ │ │ └── rainfall_plot.php │ │ ├── rwis/ │ │ │ ├── SFtemps.php │ │ │ ├── plot_soil.php │ │ │ ├── plot_traffic.php │ │ │ ├── sf_fe.css │ │ │ └── sf_fe.php │ │ ├── scan/ │ │ │ ├── index.phtml │ │ │ ├── precip.php │ │ │ ├── radn5temps.php │ │ │ ├── radn5temps2.php │ │ │ ├── smv.php │ │ │ └── winds.php │ │ └── snet/ │ │ ├── 1min_P.php │ │ ├── 1min_T.php │ │ ├── 1min_V.php │ │ ├── 1station_1min.php │ │ ├── data/ │ │ │ ├── SAMI4_051112.txt │ │ │ ├── SBOI4_051112.txt │ │ │ ├── SCHI4_060622.txt │ │ │ ├── SINI4_071002.txt │ │ │ ├── SMDI4_051112.txt │ │ │ ├── SPKI4_071002.txt │ │ │ └── STQI4_070506.txt │ │ ├── dataformat.php │ │ ├── indy_bore.php │ │ ├── polk_bore.php │ │ └── tama_bore.php │ ├── projects/ │ │ ├── iao/ │ │ │ ├── analog_download.php │ │ │ ├── iao_data_request_form.xlsx │ │ │ ├── index.css │ │ │ ├── index.php │ │ │ ├── sodar_download.php │ │ │ └── surface_download.php │ │ ├── iembot/ │ │ │ ├── channels.html │ │ │ ├── index.js │ │ │ ├── index.phtml │ │ │ ├── mastodon/ │ │ │ │ └── index.py │ │ │ ├── public.phtml │ │ │ ├── slack/ │ │ │ │ └── index.phtml │ │ │ └── twitter.php │ │ ├── index.phtml │ │ └── webcam.php │ ├── raccoon/ │ │ ├── index.phtml │ │ └── wait.phtml │ ├── radmapserver/ │ │ ├── gisdata/ │ │ │ ├── radar.tif │ │ │ ├── radar.wld │ │ │ ├── states.dbf │ │ │ ├── states.prj │ │ │ ├── states.sbn │ │ │ ├── states.sbx │ │ │ ├── states.shp │ │ │ └── states.shx │ │ └── radmapserver.html │ ├── rainfall/ │ │ ├── bypoint.phtml │ │ ├── dshape.php │ │ ├── index.phtml │ │ ├── mrms2img.py │ │ ├── obhour-json.php │ │ ├── obhour.css │ │ ├── obhour.module.js │ │ └── obhour.phtml │ ├── request/ │ │ ├── asos/ │ │ │ ├── 1min.phtml │ │ │ ├── 1min_dl.php │ │ │ ├── csv.php │ │ │ └── hourlyprecip.phtml │ │ ├── awos/ │ │ │ ├── 1min.php │ │ │ └── 1min_dl.php │ │ ├── coop/ │ │ │ ├── dl.php │ │ │ ├── fe.phtml │ │ │ ├── obs-dl.php │ │ │ └── obs-fe.phtml │ │ ├── daily.css │ │ ├── daily.phtml │ │ ├── dcp/ │ │ │ └── fe.phtml │ │ ├── download.css │ │ ├── download.phtml │ │ ├── gis/ │ │ │ ├── awc_gairmets.phtml │ │ │ ├── awc_sigmets.phtml │ │ │ ├── cwas.phtml │ │ │ ├── lsrs.phtml │ │ │ ├── misc.phtml │ │ │ ├── n0q2gtiff.php │ │ │ ├── n0r2gtiff.php │ │ │ ├── nexrad_storm_attrs.module.js │ │ │ ├── nexrad_storm_attrs.php │ │ │ ├── outlooks.phtml │ │ │ ├── pireps.module.js │ │ │ ├── pireps.php │ │ │ ├── spc_mcd.phtml │ │ │ ├── spc_outlooks.phtml │ │ │ ├── spc_watch.phtml │ │ │ ├── sps.phtml │ │ │ ├── watchwarn.module.js │ │ │ ├── watchwarn.phtml │ │ │ └── wpc_mpd.phtml │ │ ├── grx/ │ │ │ ├── asos.php │ │ │ ├── iadot_trucks.py │ │ │ ├── index.phtml │ │ │ ├── l3attr.py │ │ │ ├── roadcond.php │ │ │ ├── rwis.php │ │ │ ├── sbw.php │ │ │ ├── time_mot_loc.py │ │ │ ├── vtec.php │ │ │ ├── watch_by_county.php │ │ │ └── webcams.php │ │ ├── hml.php │ │ ├── hourlyprecip.phtml │ │ ├── ldm.php │ │ ├── maxcsv.php │ │ ├── maxcsv.py │ │ ├── rwis/ │ │ │ ├── fe.phtml │ │ │ ├── soil.phtml │ │ │ └── traffic.phtml │ │ ├── scan/ │ │ │ └── fe.phtml │ │ ├── taf.css │ │ ├── taf.php │ │ ├── tempwind_aloft.php │ │ ├── uscrn.php │ │ └── wmo_bufr_srf.php │ ├── river/ │ │ └── index.php │ ├── roads/ │ │ ├── gis.phtml │ │ ├── history.css │ │ ├── history.module.js │ │ ├── history.phtml │ │ ├── iem.php │ │ ├── index.phtml │ │ ├── maps.css │ │ ├── maps.js │ │ ├── maps.phtml │ │ ├── rc.phtml │ │ └── tv.php │ ├── robots.txt │ ├── rss.php │ ├── scan/ │ │ ├── current.phtml │ │ └── index.phtml │ ├── schoolnet/ │ │ ├── alerts/ │ │ │ └── index.phtml │ │ ├── dl/ │ │ │ ├── index.php │ │ │ ├── params.php │ │ │ └── worker.php │ │ └── index.php │ ├── sites/ │ │ ├── cal.phtml │ │ ├── current.php │ │ ├── dyn_windrose.module.js │ │ ├── dyn_windrose.phtml │ │ ├── hist.module.js │ │ ├── hist.phtml │ │ ├── locate.php │ │ ├── meteo.php │ │ ├── monthlysum.module.js │ │ ├── monthlysum.php │ │ ├── neighbors.php │ │ ├── networks.php │ │ ├── new-rss.php │ │ ├── obhistory.css │ │ ├── obhistory.module.js │ │ ├── obhistory.php │ │ ├── pics.php │ │ ├── porclimo.php │ │ ├── scp.php │ │ ├── site.js │ │ ├── site.php │ │ ├── taf.module.js │ │ ├── taf.php │ │ ├── test.py │ │ ├── windrose.css │ │ ├── windrose.module.js │ │ └── windrose.phtml │ ├── smos/ │ │ ├── index.php │ │ └── smosmap.js │ ├── timemachine/ │ │ ├── index.css │ │ ├── index.js │ │ └── index.php │ ├── topics/ │ │ ├── first_freeze.phtml │ │ ├── hardiness/ │ │ │ └── index.php │ │ └── pests/ │ │ ├── index.css │ │ ├── index.module.js │ │ └── index.php │ ├── uscrn/ │ │ └── index.phtml │ ├── vtec/ │ │ ├── emergencies.css │ │ ├── emergencies.js │ │ ├── emergencies.php │ │ ├── events.css │ │ ├── events.module.js │ │ ├── events.php │ │ ├── f.py │ │ ├── index.py │ │ ├── json-text.php │ │ ├── maxetn.css │ │ ├── maxetn.module.js │ │ ├── maxetn.php │ │ ├── mobile.php │ │ ├── pds.css │ │ ├── pds.module.js │ │ ├── pds.php │ │ ├── search.css │ │ ├── search.js │ │ ├── search.php │ │ ├── wfos.js │ │ └── yearly_counts.php │ ├── wfs/ │ │ └── ww.php │ └── wx/ │ └── afos/ │ ├── bottom.php │ ├── index.css │ ├── index.module.js │ ├── index.phtml │ ├── list.css │ ├── list.module.js │ ├── list.phtml │ ├── old.phtml │ ├── p.css │ ├── p.module.js │ ├── p.php │ ├── recent.php │ ├── retreive.php │ ├── text2png.py │ └── top.php ├── include/ │ ├── agclimate_boxinc.phtml │ ├── cameras.inc.php │ ├── composer.json │ ├── cow_worker.php │ ├── database.inc.php │ ├── dbase.stub.php │ ├── forms.php │ ├── generators.php │ ├── iemmap.php │ ├── iemprop.php │ ├── jpgraph/ │ │ ├── README │ │ ├── flag_mapping │ │ ├── fonts/ │ │ │ ├── FF_FONT0-Bold.gdf │ │ │ ├── FF_FONT0.gdf │ │ │ ├── FF_FONT1-Bold.gdf │ │ │ ├── FF_FONT1.gdf │ │ │ ├── FF_FONT2-Bold.gdf │ │ │ └── FF_FONT2.gdf │ │ ├── gd_image.inc.php │ │ ├── imageSmoothArc.php │ │ ├── imgdata_balls.inc.php │ │ ├── imgdata_bevels.inc.php │ │ ├── imgdata_diamonds.inc.php │ │ ├── imgdata_pushpins.inc.php │ │ ├── imgdata_squares.inc.php │ │ ├── imgdata_stars.inc.php │ │ ├── jpg-config.inc.php │ │ ├── jpgraph.php │ │ ├── jpgraph_antispam-digits.php │ │ ├── jpgraph_antispam.php │ │ ├── jpgraph_bar.php │ │ ├── jpgraph_canvas.php │ │ ├── jpgraph_canvtools.php │ │ ├── jpgraph_contour.php │ │ ├── jpgraph_date.php │ │ ├── jpgraph_errhandler.inc.php │ │ ├── jpgraph_error.php │ │ ├── jpgraph_flags.php │ │ ├── jpgraph_gantt.php │ │ ├── jpgraph_gb2312.php │ │ ├── jpgraph_gradient.php │ │ ├── jpgraph_iconplot.php │ │ ├── jpgraph_imgtrans.php │ │ ├── jpgraph_led.php │ │ ├── jpgraph_legend.inc.php │ │ ├── jpgraph_line.php │ │ ├── jpgraph_log.php │ │ ├── jpgraph_meshinterpolate.inc.php │ │ ├── jpgraph_mgraph.php │ │ ├── jpgraph_pie.php │ │ ├── jpgraph_pie3d.php │ │ ├── jpgraph_plotband.php │ │ ├── jpgraph_plotline.php │ │ ├── jpgraph_plotmark.inc.php │ │ ├── jpgraph_polar.php │ │ ├── jpgraph_radar.php │ │ ├── jpgraph_regstat.php │ │ ├── jpgraph_rgb.inc.php │ │ ├── jpgraph_scatter.php │ │ ├── jpgraph_stock.php │ │ ├── jpgraph_table.php │ │ ├── jpgraph_text.inc.php │ │ ├── jpgraph_theme.inc.php │ │ ├── jpgraph_ttf.inc.php │ │ ├── jpgraph_utils.inc.php │ │ ├── jpgraph_windrose.php │ │ ├── lang/ │ │ │ ├── de.inc.php │ │ │ ├── en.inc.php │ │ │ └── prod.inc.php │ │ └── themes/ │ │ ├── AquaTheme.class.php │ │ ├── GreenTheme.class.php │ │ ├── OceanTheme.class.php │ │ ├── OrangeTheme.class.php │ │ ├── PastelTheme.class.php │ │ ├── RoseTheme.class.php │ │ ├── SoftyTheme.class.php │ │ ├── UniversalTheme.class.php │ │ └── VividTheme.class.php │ ├── memcache.php │ ├── mesoeast.php │ ├── mlib.php │ ├── mos_lib.php │ ├── myview.php │ ├── network.php │ ├── reference.php │ ├── rview_lib.php │ ├── sites.php │ ├── station.php │ ├── templates/ │ │ ├── footer.phtml │ │ ├── full.phtml │ │ ├── header.phtml │ │ ├── navbar.phtml │ │ ├── single.phtml │ │ ├── sitebar.phtml │ │ ├── sites.phtml │ │ └── sortables.phtml │ ├── throttle.php │ ├── vendor/ │ │ ├── abraham/ │ │ │ └── twitteroauth/ │ │ │ ├── LICENSE.md │ │ │ ├── autoload.php │ │ │ ├── composer.json │ │ │ └── src/ │ │ │ ├── Config.php │ │ │ ├── Consumer.php │ │ │ ├── HmacSha1.php │ │ │ ├── Request.php │ │ │ ├── Response.php │ │ │ ├── SignatureMethod.php │ │ │ ├── Token.php │ │ │ ├── TwitterOAuth.php │ │ │ ├── TwitterOAuthException.php │ │ │ ├── Util/ │ │ │ │ └── JsonDecoder.php │ │ │ └── Util.php │ │ ├── autoload.php │ │ ├── composer/ │ │ │ ├── ClassLoader.php │ │ │ ├── InstalledVersions.php │ │ │ ├── LICENSE │ │ │ ├── autoload_classmap.php │ │ │ ├── autoload_namespaces.php │ │ │ ├── autoload_psr4.php │ │ │ ├── autoload_real.php │ │ │ ├── autoload_static.php │ │ │ ├── ca-bundle/ │ │ │ │ ├── LICENSE │ │ │ │ ├── README.md │ │ │ │ ├── composer.json │ │ │ │ ├── res/ │ │ │ │ │ └── cacert.pem │ │ │ │ └── src/ │ │ │ │ └── CaBundle.php │ │ │ ├── installed.json │ │ │ ├── installed.php │ │ │ └── platform_check.php │ │ ├── erusev/ │ │ │ └── parsedown/ │ │ │ ├── LICENSE.txt │ │ │ ├── Parsedown.php │ │ │ ├── README.md │ │ │ └── composer.json │ │ └── mapscript.php │ └── warnings_plot.php ├── package.json ├── pip_requirements.txt ├── pylib/ │ └── iemweb/ │ ├── GIS/ │ │ ├── __init__.py │ │ └── tiff/ │ │ ├── __init__.py │ │ └── index.py │ ├── __init__.py │ ├── afos/ │ │ ├── __init__.py │ │ └── retrieve.py │ ├── agclimate/ │ │ ├── __init__.py │ │ ├── ames_precip.py │ │ ├── isusm.py │ │ └── nmp_csv.py │ ├── autoplot/ │ │ ├── __init__.py │ │ ├── autoplot.py │ │ ├── barchart.py │ │ ├── gen_qrcode.py │ │ ├── index.py │ │ ├── meta.py │ │ ├── scripts/ │ │ │ ├── __init__.py │ │ │ ├── p1.py │ │ │ ├── p10.py │ │ │ ├── p11.py │ │ │ ├── p12.py │ │ │ ├── p13.py │ │ │ ├── p14.py │ │ │ ├── p15.py │ │ │ ├── p16.py │ │ │ ├── p17.py │ │ │ ├── p18.py │ │ │ ├── p19.py │ │ │ ├── p2.py │ │ │ ├── p20.py │ │ │ ├── p21.py │ │ │ ├── p22.py │ │ │ ├── p23.py │ │ │ ├── p24.py │ │ │ ├── p25.py │ │ │ ├── p26.py │ │ │ ├── p27.py │ │ │ ├── p28.py │ │ │ ├── p29.py │ │ │ ├── p3.py │ │ │ ├── p30.py │ │ │ ├── p31.py │ │ │ ├── p32.py │ │ │ ├── p33.py │ │ │ ├── p34.py │ │ │ ├── p35.py │ │ │ ├── p36.py │ │ │ ├── p37.py │ │ │ ├── p38.py │ │ │ ├── p39.py │ │ │ ├── p4.py │ │ │ ├── p40.py │ │ │ ├── p41.py │ │ │ ├── p42.py │ │ │ ├── p43.py │ │ │ ├── p44.py │ │ │ ├── p45.py │ │ │ ├── p46.py │ │ │ ├── p47.py │ │ │ ├── p48.py │ │ │ ├── p49.py │ │ │ ├── p5.py │ │ │ ├── p50.py │ │ │ ├── p51.py │ │ │ ├── p52.py │ │ │ ├── p53.py │ │ │ ├── p54.py │ │ │ ├── p55.py │ │ │ ├── p56.py │ │ │ ├── p57.py │ │ │ ├── p58.py │ │ │ ├── p59.py │ │ │ ├── p6.py │ │ │ ├── p60.py │ │ │ ├── p61.py │ │ │ ├── p62.py │ │ │ ├── p63.py │ │ │ ├── p64.py │ │ │ ├── p65.py │ │ │ ├── p66.py │ │ │ ├── p67.py │ │ │ ├── p68.py │ │ │ ├── p69.py │ │ │ ├── p7.py │ │ │ ├── p70.py │ │ │ ├── p71.py │ │ │ ├── p72.py │ │ │ ├── p73.py │ │ │ ├── p74.py │ │ │ ├── p75.py │ │ │ ├── p76.py │ │ │ ├── p77.py │ │ │ ├── p78.py │ │ │ ├── p79.py │ │ │ ├── p8.py │ │ │ ├── p80.py │ │ │ ├── p81.py │ │ │ ├── p82.py │ │ │ ├── p83.py │ │ │ ├── p84.py │ │ │ ├── p85.py │ │ │ ├── p86.py │ │ │ ├── p87.py │ │ │ ├── p88.py │ │ │ ├── p89.py │ │ │ ├── p9.py │ │ │ ├── p90.py │ │ │ ├── p91.py │ │ │ ├── p92.py │ │ │ ├── p93.py │ │ │ ├── p94.py │ │ │ ├── p95.py │ │ │ ├── p96.py │ │ │ ├── p97.py │ │ │ ├── p98.py │ │ │ └── p99.py │ │ ├── scripts100/ │ │ │ ├── __init__.py │ │ │ ├── p100.py │ │ │ ├── p101.py │ │ │ ├── p102.py │ │ │ ├── p103.py │ │ │ ├── p104.py │ │ │ ├── p105.py │ │ │ ├── p106.py │ │ │ ├── p107.py │ │ │ ├── p108.py │ │ │ ├── p109.py │ │ │ ├── p110.py │ │ │ ├── p111.py │ │ │ ├── p112.py │ │ │ ├── p113.py │ │ │ ├── p114.py │ │ │ ├── p115.py │ │ │ ├── p116.py │ │ │ ├── p117.py │ │ │ ├── p118.py │ │ │ ├── p119.py │ │ │ ├── p120.py │ │ │ ├── p121.py │ │ │ ├── p122.py │ │ │ ├── p123.py │ │ │ ├── p124.py │ │ │ ├── p125.py │ │ │ ├── p126.py │ │ │ ├── p127.py │ │ │ ├── p128.py │ │ │ ├── p129.py │ │ │ ├── p130.py │ │ │ ├── p131.py │ │ │ ├── p132.py │ │ │ ├── p133.py │ │ │ ├── p134.py │ │ │ ├── p135.py │ │ │ ├── p136.py │ │ │ ├── p137.py │ │ │ ├── p138.py │ │ │ ├── p139.py │ │ │ ├── p140.py │ │ │ ├── p141.py │ │ │ ├── p142.py │ │ │ ├── p143.py │ │ │ ├── p144.py │ │ │ ├── p145.py │ │ │ ├── p146.py │ │ │ ├── p147.py │ │ │ ├── p148.py │ │ │ ├── p149.py │ │ │ ├── p150.py │ │ │ ├── p151.py │ │ │ ├── p152.py │ │ │ ├── p153.py │ │ │ ├── p154.py │ │ │ ├── p155.py │ │ │ ├── p156.py │ │ │ ├── p157.py │ │ │ ├── p158.py │ │ │ ├── p159.py │ │ │ ├── p160.py │ │ │ ├── p161.py │ │ │ ├── p162.py │ │ │ ├── p163.py │ │ │ ├── p164.py │ │ │ ├── p165.py │ │ │ ├── p166.py │ │ │ ├── p167.py │ │ │ ├── p168.py │ │ │ ├── p169.py │ │ │ ├── p170.py │ │ │ ├── p171.py │ │ │ ├── p172.py │ │ │ ├── p173.py │ │ │ ├── p174.py │ │ │ ├── p175.py │ │ │ ├── p176.py │ │ │ ├── p177.py │ │ │ ├── p178.py │ │ │ ├── p179.py │ │ │ ├── p180.py │ │ │ ├── p181.py │ │ │ ├── p182.py │ │ │ ├── p183.py │ │ │ ├── p184.py │ │ │ ├── p185.py │ │ │ ├── p186.py │ │ │ ├── p187.py │ │ │ ├── p188.py │ │ │ ├── p189.py │ │ │ ├── p190.py │ │ │ ├── p191.py │ │ │ ├── p192.py │ │ │ ├── p193.py │ │ │ ├── p194.py │ │ │ ├── p195.py │ │ │ ├── p196.py │ │ │ ├── p197.py │ │ │ ├── p198.py │ │ │ └── p199.py │ │ └── scripts200/ │ │ ├── __init__.py │ │ ├── p200.py │ │ ├── p201.py │ │ ├── p202.py │ │ ├── p203.py │ │ ├── p204.py │ │ ├── p205.py │ │ ├── p206.py │ │ ├── p207.py │ │ ├── p208.py │ │ ├── p209.py │ │ ├── p210.py │ │ ├── p211.py │ │ ├── p212.py │ │ ├── p213.py │ │ ├── p214.py │ │ ├── p215.py │ │ ├── p216.py │ │ ├── p217.py │ │ ├── p218.py │ │ ├── p219.py │ │ ├── p220.py │ │ ├── p221.py │ │ ├── p222.py │ │ ├── p223.py │ │ ├── p224.py │ │ ├── p225.py │ │ ├── p226.py │ │ ├── p227.py │ │ ├── p228.py │ │ ├── p229.py │ │ ├── p230.py │ │ ├── p231.py │ │ ├── p232.py │ │ ├── p233.py │ │ ├── p234.py │ │ ├── p235.py │ │ ├── p236.py │ │ ├── p237.py │ │ ├── p238.py │ │ ├── p239.py │ │ ├── p240.py │ │ ├── p241.py │ │ ├── p242.py │ │ ├── p243.py │ │ ├── p244.py │ │ ├── p245.py │ │ ├── p246.py │ │ ├── p247.py │ │ ├── p248.py │ │ ├── p249.py │ │ ├── p250.py │ │ ├── p251.py │ │ ├── p252.py │ │ ├── p253.py │ │ ├── p254.py │ │ ├── p255.py │ │ ├── p256.py │ │ ├── p257.py │ │ ├── p258.py │ │ ├── p259.py │ │ ├── p260.py │ │ ├── p261.py │ │ └── p262.py │ ├── c/ │ │ ├── __init__.py │ │ ├── tile.py │ │ └── tilecache.cfg │ ├── cache/ │ │ ├── __init__.py │ │ ├── tile.py │ │ └── tilecache.cfg │ ├── climate/ │ │ ├── __init__.py │ │ └── orc.py │ ├── current/ │ │ ├── __init__.py │ │ └── live.py │ ├── dispatch.py │ ├── fields.py │ ├── geocoder.py │ ├── geojson/ │ │ ├── __init__.py │ │ ├── agclimate.py │ │ ├── cf6.py │ │ ├── cli.py │ │ ├── climodat_dayclimo.py │ │ ├── convective_sigmet.py │ │ ├── coopobs.py │ │ ├── lsr.py │ │ ├── network.py │ │ ├── networks.py │ │ ├── nexrad_attr.py │ │ ├── recent_metar.py │ │ ├── sbw.py │ │ ├── sbw_county_intersect.py │ │ ├── seven_am.py │ │ ├── sps.py │ │ ├── station_neighbors.py │ │ ├── usdm.py │ │ ├── vtec_event.py │ │ ├── webcam.py │ │ └── winter_roads.py │ ├── getweather.py │ ├── iemre/ │ │ ├── __init__.py │ │ ├── daily.py │ │ ├── hourly.py │ │ └── multiday.py │ ├── json/ │ │ ├── __init__.py │ │ ├── cf6.py │ │ ├── cli.py │ │ ├── cli_audit.py │ │ ├── climodat_dd.py │ │ ├── climodat_stclimo.py │ │ ├── current.py │ │ ├── dcp_vars.py │ │ ├── ibw_tags.py │ │ ├── mcd_bysize.py │ │ ├── network.py │ │ ├── nwstext.py │ │ ├── nwstext_center_date.py │ │ ├── nwstext_search.py │ │ ├── outlook_progression.py │ │ ├── prism.py │ │ ├── products.py │ │ ├── radar.py │ │ ├── raob.py │ │ ├── reference.py │ │ ├── ridge_current.py │ │ ├── sbw_by_point.py │ │ ├── snowfall_observations_v2.py │ │ ├── spc_bysize.py │ │ ├── spcmcd.py │ │ ├── spcoutlook.py │ │ ├── spcwatch.py │ │ ├── sps_by_point.py │ │ ├── stage4.py │ │ ├── state_ugc.py │ │ ├── stations.py │ │ ├── tms.py │ │ ├── vtec_emergencies.py │ │ ├── vtec_event.py │ │ ├── vtec_events.py │ │ ├── vtec_events_bypoint.py │ │ ├── vtec_events_bystate.py │ │ ├── vtec_events_byugc.py │ │ ├── vtec_events_bywfo.py │ │ ├── vtec_max_etn.py │ │ ├── vtec_pds.py │ │ ├── watches.py │ │ ├── webcam.py │ │ ├── webcams.py │ │ ├── wpcmpd.py │ │ └── wpcoutlook.py │ ├── metadata/ │ │ ├── __init__.py │ │ └── xml/ │ │ ├── __init__.py │ │ ├── pl.py │ │ └── sd.py │ ├── mlib.py │ ├── mywindrose.py │ ├── nws/ │ │ ├── __init__.py │ │ └── debug_latlon/ │ │ ├── __init__.py │ │ └── generate_plot.py │ ├── onsite/ │ │ ├── __init__.py │ │ └── features/ │ │ ├── __init__.py │ │ ├── content.py │ │ └── vote.py │ ├── precip/ │ │ ├── __init__.py │ │ ├── catAZOS.py │ │ └── catSNET.py │ ├── projects/ │ │ ├── __init__.py │ │ └── iembot/ │ │ ├── __init__.py │ │ └── mastodon/ │ │ ├── __init__.py │ │ └── index.py │ ├── proxy_error_handler.py │ ├── rainfall/ │ │ ├── __init__.py │ │ └── mrms2img.py │ ├── request/ │ │ ├── __init__.py │ │ ├── asos.py │ │ ├── asos1min.py │ │ ├── coop.py │ │ ├── coopobs.py │ │ ├── daily.py │ │ ├── feel.py │ │ ├── gis/ │ │ │ ├── __init__.py │ │ │ ├── awc_gairmets.py │ │ │ ├── cwas.py │ │ │ ├── lsr.py │ │ │ ├── misc.py │ │ │ ├── nexrad_storm_attrs.py │ │ │ ├── pireps.py │ │ │ ├── sigmets.py │ │ │ ├── spc_mcd.py │ │ │ ├── spc_outlooks.py │ │ │ ├── spc_watch.py │ │ │ ├── sps.py │ │ │ ├── watch_by_county.py │ │ │ ├── watchwarn.py │ │ │ └── wpc_mpd.py │ │ ├── grx/ │ │ │ ├── __init__.py │ │ │ ├── iadot_trucks.py │ │ │ ├── l3attr.py │ │ │ └── time_mot_loc.py │ │ ├── grx_rings.py │ │ ├── hads.py │ │ ├── hml.py │ │ ├── hourlyprecip.py │ │ ├── isusm.py │ │ ├── maxcsv.py │ │ ├── metars.py │ │ ├── mos.py │ │ ├── nass_iowa.py │ │ ├── nlaeflux.py │ │ ├── normals.py │ │ ├── other.py │ │ ├── purpleair.py │ │ ├── raob.py │ │ ├── raster2netcdf.py │ │ ├── rwis.py │ │ ├── scan.py │ │ ├── scp.py │ │ ├── smos.py │ │ ├── ss.py │ │ ├── taf.py │ │ ├── talltowers.py │ │ ├── tempwind_aloft.py │ │ ├── uscrn.py │ │ └── wmo_bufr_srf.py │ ├── search.py │ ├── sites/ │ │ ├── __init__.py │ │ └── test.py │ ├── tilecache_dispatch.py │ ├── util.py │ ├── vtec/ │ │ ├── __init__.py │ │ ├── f.py │ │ └── index.py │ └── wx/ │ ├── __init__.py │ └── afos/ │ ├── __init__.py │ └── text2png.py ├── pyproject.toml ├── scripts/ │ ├── 00z/ │ │ ├── asos_high.py │ │ └── generate_rtp.py │ ├── 12z/ │ │ ├── asos_low.py │ │ └── generate_rtp.py │ ├── GIS/ │ │ ├── 24h_lsr.py │ │ ├── attribute2shape.py │ │ ├── current_ww.shp.xml │ │ └── wwa2shp.py │ ├── RUN_0Z.sh │ ├── RUN_0Z_ERA5LAND.sh │ ├── RUN_10MIN.sh │ ├── RUN_10_AFTER.sh │ ├── RUN_12Z.sh │ ├── RUN_1MIN.sh │ ├── RUN_20MIN.sh │ ├── RUN_20_AFTER.sh │ ├── RUN_2AM.sh │ ├── RUN_40_AFTER.sh │ ├── RUN_50_AFTER.sh │ ├── RUN_59_AFTER.sh │ ├── RUN_5MIN.sh │ ├── RUN_CLIMODAT_STATE.sh │ ├── RUN_COOP.sh │ ├── RUN_HRRR_REF.sh │ ├── RUN_MIDNIGHT.sh │ ├── RUN_NOON.sh │ ├── RUN_STAGE4.sh │ ├── RUN_SUMMARY.sh │ ├── asos/ │ │ ├── adjust_report_type.py │ │ ├── cf6_to_iemaccess.py │ │ ├── iem_scraper_example.py │ │ ├── iem_scraper_example2.py │ │ └── use_acis.py │ ├── cache/ │ │ ├── download_cpc.sh │ │ ├── midwest_winter_roads.py │ │ ├── nws_wawa_archive.py │ │ └── warn_cache.py │ ├── climate/ │ │ ├── today_hilo.py │ │ └── today_rec_hilo.py │ ├── climodat/ │ │ ├── avg_temp.py │ │ ├── check_database.py │ │ ├── compute4regions.py │ │ ├── compute_climate.py │ │ ├── daily_estimator.py │ │ ├── era5land_extract.py │ │ ├── estimate_missing.py │ │ ├── hrrr_solarrad.py │ │ ├── ks_monthly.py │ │ ├── ks_yearly.py │ │ ├── merra_solarrad.py │ │ ├── narr_solarrad.py │ │ ├── nldas_extract.py │ │ ├── power_extract.py │ │ ├── precip_days.py │ │ ├── run.sh │ │ ├── sync_coop_updates.py │ │ ├── use_acis.py │ │ └── yearly_precip.py │ ├── coop/ │ │ ├── PREC.sh │ │ ├── cfs_extract.py │ │ ├── data.desc │ │ ├── day_precip.py │ │ ├── email_rr3_to_harry.py │ │ ├── extract_coop_obs.py │ │ ├── extract_idhs.py │ │ ├── first_guess_for_harry.py │ │ ├── month_precip.py │ │ ├── ndfd_extract.py │ │ ├── plot_coop.py │ │ ├── plot_precip_12z.py │ │ ├── today_precip.py │ │ ├── use_acis.py │ │ └── year_precip.py │ ├── crontab │ ├── current/ │ │ ├── ifc_today_total.py │ │ ├── lsr_snow_mapper.py │ │ ├── mrms_today_total.py │ │ ├── plot_hilo.py │ │ ├── q3_xhour.py │ │ ├── rwis_station.py │ │ ├── stage4_hourly.py │ │ ├── stage4_today_total.py │ │ ├── stage4_xhour.py │ │ ├── temperature.py │ │ ├── today_gust.py │ │ ├── today_high.py │ │ ├── today_min_windchill.py │ │ ├── today_precip.py │ │ └── vsby.py │ ├── dailyb/ │ │ ├── spammer.py │ │ └── wwa.py │ ├── dbutil/ │ │ ├── SYNC_STATIONS.sh │ │ ├── add_iem_data_entry.py │ │ ├── asos2archive.py │ │ ├── clean_afos.py │ │ ├── clean_mos.py │ │ ├── clean_telemetry.py │ │ ├── clean_unknown_hads.py │ │ ├── compute_alldata_sts.py │ │ ├── compute_climate_sts.py │ │ ├── compute_cocorahs_sts.py │ │ ├── compute_coop_sts.py │ │ ├── compute_hads_sts.py │ │ ├── compute_isusm_sts.py │ │ ├── compute_network_extent.py │ │ ├── compute_rwis_sts.py │ │ ├── delete_station.py │ │ ├── hads_delete_dups.py │ │ ├── mine_autoplot.py │ │ ├── network_timezone.py │ │ ├── rwis2archive.py │ │ ├── set_attribute_phour.py │ │ ├── set_climate.py │ │ ├── set_county.py │ │ ├── set_elevation.py │ │ ├── set_timezone.py │ │ ├── set_wfo.py │ │ ├── sync_stations.py │ │ ├── unknown_stations.py │ │ ├── uscrn.py │ │ ├── xcheck_SFQ.py │ │ └── xcheck_madis.py │ ├── dl/ │ │ ├── archive_composite.py │ │ ├── download_cfs.py │ │ ├── download_ffg.py │ │ ├── download_gfs.py │ │ ├── download_hrrr_rad.py │ │ ├── download_hrrr_tsoil.py │ │ ├── download_imerg.py │ │ ├── download_nam.py │ │ ├── download_narr.py │ │ ├── download_ndfd.py │ │ ├── download_rtma_ru.py │ │ ├── fetch_merra.py │ │ ├── fetch_power.py │ │ ├── ncep_stage4.py │ │ └── radar_composite.py │ ├── era5/ │ │ ├── fetch_era5.py │ │ └── init_hourly.py │ ├── gfs/ │ │ ├── gfs2csv.py │ │ ├── gfs2iemre.py │ │ └── gfs_4inch.py │ ├── gs/ │ │ └── plot_gdd.py │ ├── hads/ │ │ ├── assign_has_hml.py │ │ ├── compute_hads_pday.py │ │ ├── compute_hads_phour.py │ │ ├── dedup_hml_forecasts.py │ │ ├── process_hads_inbound.py │ │ ├── process_nwps_stages.py │ │ ├── raw2obs.py │ │ └── sync_idpgis.py │ ├── hrrr/ │ │ ├── dl_hrrrref.py │ │ ├── hrrr_jobs.py │ │ ├── hrrr_ref2raster.py │ │ └── plot_ref.py │ ├── iemplot/ │ │ ├── IAMESONET_plot.csh │ │ ├── RUN.csh │ │ ├── coltbl.xwp │ │ ├── dump_altm.py │ │ ├── oa.csh │ │ ├── pres_plot.csh │ │ └── templates/ │ │ ├── createFile.csh │ │ ├── grid_25_25.grd │ │ ├── grid_50_50.grd │ │ ├── sf.pack │ │ ├── surface.gem │ │ └── use.stns │ ├── iemre/ │ │ ├── README.md │ │ ├── daily_analysis.py │ │ ├── db_to_netcdf.py │ │ ├── grid_climate.py │ │ ├── grid_climate_ifc.py │ │ ├── grid_climate_stage4.py │ │ ├── grid_rsds.py │ │ ├── hourly_analysis.py │ │ ├── ingest_nohrsc.py │ │ ├── init_daily.py │ │ ├── init_daily_ifc.py │ │ ├── init_dailyc.py │ │ ├── init_hourly.py │ │ ├── init_ifc_dailyc.py │ │ ├── init_narr.py │ │ ├── init_stage4_daily.py │ │ ├── init_stage4_dailyc.py │ │ ├── init_stage4_hourly.py │ │ ├── merge_ifc.py │ │ ├── merge_narr.py │ │ ├── por_dailyc.py │ │ ├── precip_ingest.py │ │ ├── prism_adjust_stage4.py │ │ ├── stage4_12z_adjust.py │ │ ├── use_icon.py │ │ └── use_ifs.py │ ├── ingestors/ │ │ ├── asos_1minute/ │ │ │ ├── p1_examples.txt │ │ │ ├── p2_examples.txt │ │ │ └── parse_ncei_asos1minute.py │ │ ├── awos/ │ │ │ └── parse_monthly_maint.py │ │ ├── cocorahs/ │ │ │ ├── cocorahs_data_ingest.py │ │ │ └── cocorahs_stations.py │ │ ├── dot_plows.py │ │ ├── dot_truckcams.py │ │ ├── dotcams/ │ │ │ ├── ingest_dot_webcams.py │ │ │ └── sync_roadcam_meta.py │ │ ├── elnino.py │ │ ├── flux_ingest.py │ │ ├── ifc/ │ │ │ └── ingest_ifc_precip.py │ │ ├── isusm/ │ │ │ ├── ingest_isusm.py │ │ │ └── run_ingest_isusm.sh │ │ ├── madis/ │ │ │ ├── extract_hfmetar.py │ │ │ ├── extract_madis.py │ │ │ ├── extract_metar.py │ │ │ ├── sync_stations.py │ │ │ └── to_iemaccess.py │ │ ├── ncei/ │ │ │ ├── 91_20/ │ │ │ │ ├── ingest.py │ │ │ │ └── merge_stations.py │ │ │ ├── ingest_fisherporter.py │ │ │ ├── ingest_isd.py │ │ │ ├── run_network_isd_ingest.py │ │ │ └── xcheck_ghcn_stations.py │ │ ├── onewire.py │ │ ├── other/ │ │ │ ├── feel_ingest.py │ │ │ ├── parse0006.py │ │ │ ├── parse0010.py │ │ │ └── purpleair.py │ │ ├── parse0002.py │ │ ├── rwis/ │ │ │ ├── process_rwis.py │ │ │ ├── process_rwis_dtn.py │ │ │ ├── process_soil.py │ │ │ └── process_traffic.py │ │ ├── soilm_ingest.py │ │ ├── squaw/ │ │ │ └── ingest_squaw.py │ │ └── uscrn_ingest.py │ ├── isuag/ │ │ └── fix_temps.py │ ├── isusm/ │ │ ├── agg_1minute.py │ │ ├── agg_precip.py │ │ ├── archiver.py │ │ ├── backfill_summary.py │ │ ├── csv2ldm.py │ │ ├── fancy_4inch.py │ │ ├── fix_high_low.py │ │ ├── fix_precip.py │ │ ├── fix_soil4t.py │ │ ├── fix_solar.py │ │ ├── isusm2rr5.py │ │ ├── nmp_monthly_email.py │ │ ├── run_plots.sh │ │ ├── zap_temp_humid.py │ │ └── zero_daily_precip.py │ ├── model/ │ │ └── motherlode_ingest.py │ ├── month/ │ │ ├── obs_precip.py │ │ ├── obs_precip_coop.py │ │ ├── plot_avgt.py │ │ ├── plot_gdd.py │ │ └── plot_sdd.py │ ├── mos/ │ │ └── current_bias.py │ ├── mrms/ │ │ ├── README.md │ │ ├── copy_daily_24h.py │ │ ├── gr2ae.txt │ │ ├── init_daily_mrms.py │ │ ├── init_mrms_dailyc.py │ │ ├── make_mrms_rasters.py │ │ ├── merge_mrms_q3.py │ │ ├── mesh_contours.py │ │ ├── mrms_lcref_comp.py │ │ ├── mrms_monthly_plot.py │ │ └── mrms_rainrate_comp.py │ ├── nass/ │ │ ├── ingest_iowa_pdf.py │ │ └── nass_quickstats.py │ ├── ncei/ │ │ └── ingest_climdiv.py │ ├── ndfd/ │ │ ├── grid_climate_ndfd.py │ │ ├── init_ndfd_dailyc.py │ │ ├── ndfd2iemre.py │ │ ├── ndfd2netcdf.py │ │ └── plot_temps.py │ ├── nldas/ │ │ ├── init_hourly.py │ │ └── process_nldasv2_noah.py │ ├── other/ │ │ ├── ot2archive.py │ │ └── update_daily_srad.py │ ├── outgoing/ │ │ └── madis2csv.py │ ├── plots/ │ │ ├── ARX_overlay.csh │ │ ├── ASOS_plot.csh │ │ ├── DEWPS_plot.csh │ │ ├── DMX_overlay.csh │ │ ├── DVN_overlay.csh │ │ ├── EAX_overlay.csh │ │ ├── FSD_overlay.csh │ │ ├── HEAT_plot.csh │ │ ├── HOURLY_PLOTS │ │ ├── MPX_overlay.csh │ │ ├── MW_mesonet.csh │ │ ├── OAX_overlay.csh │ │ ├── RELH_plot.csh │ │ ├── RUN_PLOTS │ │ ├── SDMESONET_plot.csh │ │ ├── TEMPS_plot.csh │ │ ├── WCHT_plot.csh │ │ ├── WINDS_plot.csh │ │ ├── black/ │ │ │ └── surfaceContours.csh │ │ ├── coltbl.xwp │ │ ├── createGrids.csh │ │ ├── plot_rwis_sf.py │ │ └── radar.tbl │ ├── prism/ │ │ ├── README.md │ │ ├── grid_climate_prism.py │ │ ├── ingest_prism.py │ │ ├── init_daily.py │ │ └── init_prism_dailyc.py │ ├── qc/ │ │ ├── check_afos.py │ │ ├── check_awos_online.py │ │ ├── check_isusm_online.py │ │ ├── check_n0q.py │ │ ├── check_station_geom.py │ │ ├── check_vtec_eventids.py │ │ └── check_webcams.py │ ├── ridge/ │ │ ├── ReflectivityColorCurveManager.xml │ │ └── ZDRColorCurveManager.xml │ ├── roads/ │ │ ├── archive_roadsplot.py │ │ ├── check_roads_geom.py │ │ ├── ingest_roads_rest.py │ │ ├── init_roads_database.py │ │ └── merge_roads.py │ ├── rtma/ │ │ ├── rtma_backfill.py │ │ └── wind_power.py │ ├── sbw/ │ │ ├── compute_shared_border_pct.py │ │ └── raccoon_sbw_to_ppt.py │ ├── scan/ │ │ ├── init_stations.py │ │ └── scan_ingest.py │ ├── season/ │ │ ├── plot_4month_stage4.py │ │ └── plot_cli_jul1_snow.py │ ├── smos/ │ │ ├── ingest_smos.py │ │ └── plot.py │ ├── summary/ │ │ ├── compute_daily.py │ │ ├── hourly_precip.py │ │ ├── max_reflect.py │ │ └── update_dailyrain.py │ ├── swat/ │ │ └── swat_realtime.py │ ├── ua/ │ │ ├── compute_params.py │ │ ├── compute_sts_ets.py │ │ ├── igra2_ingest.py │ │ └── ingest_from_spc.py │ ├── uscrn/ │ │ └── compute_uscrn_pday.py │ ├── usdm/ │ │ └── process_usdm.py │ ├── util/ │ │ ├── list_stale_autoplots.py │ │ ├── make_archive_baseline.py │ │ ├── monthly.sh │ │ ├── pick_state.py │ │ ├── poker2afos.py │ │ └── set_iemdb_etc_hosts.py │ ├── webalizer/ │ │ ├── agclimate.conf │ │ ├── combine_logs.py │ │ ├── datateam.conf │ │ ├── depbackend.conf │ │ ├── mesonet.conf │ │ ├── processlogs.sh │ │ ├── sustainablecorn.conf │ │ └── weatherim.conf │ ├── week/ │ │ └── plot_obs.py │ ├── windrose/ │ │ ├── daily_drive_network.py │ │ ├── drive_network_windrose.py │ │ └── make_windrose.py │ ├── year/ │ │ ├── plot_gdd.py │ │ ├── plot_stage4.py │ │ └── precip.py │ └── yieldfx/ │ ├── README.md │ ├── baseline/ │ │ ├── ames.met │ │ ├── cobs.met │ │ ├── crawfordsville.met │ │ ├── kanawha.met │ │ ├── lewis.met │ │ ├── mcnay.met │ │ ├── muscatine.met │ │ ├── nashua.met │ │ └── sutherland.met │ ├── baseline2db.py │ ├── cfs2iemre_netcdf.py │ ├── cfs_tiler.py │ ├── cfs_tiler_lastyear.py │ ├── counties.csv │ ├── county_csv.py │ ├── dump_hybridmaize.py │ ├── dumpbaseline.py │ ├── psims_baseline.py │ └── yieldfx_workflow.py ├── src/ │ ├── iemjs/ │ │ ├── CHANGELOG.md │ │ ├── LICENSE │ │ ├── README.md │ │ ├── package.json │ │ ├── src/ │ │ │ ├── domUtils.d.ts │ │ │ ├── domUtils.js │ │ │ ├── iemdata.d.ts │ │ │ ├── iemdata.js │ │ │ ├── index.d.ts │ │ │ └── index.js │ │ └── tests/ │ │ ├── runner.js │ │ ├── test-exports.js │ │ └── test-imports.js │ └── release-iemjs.sh ├── tests/ │ ├── iemweb/ │ │ ├── autoplot/ │ │ │ ├── test_api.py │ │ │ ├── test_barchar.py │ │ │ ├── test_extweb_failures.py │ │ │ ├── test_index.py │ │ │ ├── test_meta.py │ │ │ ├── test_one_offs.py │ │ │ ├── test_urls.py │ │ │ ├── urllist.txt │ │ │ └── urllist_index.txt │ │ ├── current/ │ │ │ └── test_live.py │ │ ├── geojson/ │ │ │ ├── test_geojson_index.py │ │ │ └── test_sbw.py │ │ ├── iembot/ │ │ │ └── test_mastodon.py │ │ ├── json/ │ │ │ ├── test_json_index.py │ │ │ ├── test_radar.py │ │ │ └── test_spcoutlook.py │ │ ├── onsite/ │ │ │ └── test_features.py │ │ ├── request/ │ │ │ ├── gis/ │ │ │ │ ├── test_lsr.py │ │ │ │ └── test_watchwarn.py │ │ │ ├── test_asos.py │ │ │ ├── test_coop.py │ │ │ ├── test_maxcsv.py │ │ │ └── test_metars.py │ │ ├── test_afos.py │ │ ├── test_all_application.py │ │ ├── test_dispatch.py │ │ ├── test_doc_urls.py │ │ ├── test_fields.py │ │ ├── test_iemweb_urls.py │ │ ├── test_module.py │ │ ├── test_proxy_error_handler.py │ │ ├── test_util.py │ │ ├── urls.txt │ │ ├── urls422.txt │ │ └── vtec/ │ │ └── test_vtec.py │ ├── run_feature_autoplots.py │ ├── run_mapserver.sh │ ├── stress_tilecache.py │ ├── test_mod_wsgi.py │ ├── test_php.py │ ├── urls.txt │ └── urls405.txt └── tsconfig.json
Showing preview only (429K chars total). Download the full file or copy to clipboard to get everything.
SYMBOL INDEX (5603 symbols across 926 files)
FILE: .github/ci_db_testdata.py
function create_realtime_isuag (line 18) | def create_realtime_isuag(conn: Connection | None = None) -> None:
function create_iemaccess_isuag (line 51) | def create_iemaccess_isuag(conn: Connection | None = None) -> None:
function ldm_product_log (line 68) | def ldm_product_log(conn: Connection | None = None) -> None:
function nexrad_attributes (line 85) | def nexrad_attributes(conn: Connection | None = None) -> None:
function main (line 94) | def main():
FILE: conftest.py
function dbcursor (line 8) | def dbcursor(database: str):
FILE: deployment/symlink_manager.py
function workflow (line 54) | def workflow(link: Path, target: Path):
function main (line 71) | def main():
FILE: htdocs/ASOS/reports/mon_prec.module.js
function formatPrecipitation (line 32) | function formatPrecipitation(cell) {
function getPrecipitationColumns (line 42) | function getPrecipitationColumns() {
function getNetworkFromURL (line 102) | function getNetworkFromURL() {
function loadTableData (line 108) | function loadTableData() {
function initializeTable (line 149) | function initializeTable() {
function setupControls (line 181) | function setupControls() {
FILE: htdocs/ASOS/reports/mon_prec.php
function friendly (line 54) | function friendly($val)
FILE: htdocs/COOP/7am-app.js
function escapeHTML (line 14) | function escapeHTML(val) {
function formatDateYYMMDD (line 28) | function formatDateYYMMDD(date) {
function formatDateISO (line 40) | function formatDateISO(date) {
function parseDateYYMMDD (line 52) | function parseDateYYMMDD(dateStr) {
function parseDateISO (line 64) | function parseDateISO(dateStr) {
function addDaysToDateString (line 78) | function addDaysToDateString(dateStr, days) {
function migrateLegacyHashURLs (line 90) | function migrateLegacyHashURLs() {
function parseURLParams (line 123) | function parseURLParams() {
function updateURL (line 152) | function updateURL() {
function updateMap (line 171) | function updateMap() {
function updateDate (line 187) | function updateDate() {
function pretty (line 228) | function pretty(val) {
function makeVectorLayer (line 234) | function makeVectorLayer(dt, title, group) {
function get_tms_url (line 263) | function get_tms_url() {
function buildUI (line 274) | function buildUI() {
function showPopover (line 395) | function showPopover(content) {
function hidePopover (line 406) | function hidePopover() {
FILE: htdocs/COOP/cat.module.js
function hiderows (line 6) | function hiderows() {
FILE: htdocs/COOP/extremes.js
function initializeApp (line 29) | function initializeApp() {
function getConfig (line 79) | function getConfig() {
function fetchData (line 114) | function fetchData() {
function getStartYear (line 148) | function getStartYear(tbl) {
function getEndYear (line 160) | function getEndYear(tbl) {
function renderHeader (line 171) | function renderHeader() {
function getNetworkDisplayName (line 211) | function getNetworkDisplayName(network) {
function initializeTable (line 233) | function initializeTable() {
function getTableColumns (line 265) | function getTableColumns() {
function updateTable (line 459) | function updateTable() {
function prepareTableData (line 476) | function prepareTableData() {
function formatNumber (line 533) | function formatNumber(value, decimals) {
function formatYears (line 541) | function formatYears(years) {
function showLoading (line 549) | function showLoading(show) {
function showApiInfo (line 564) | function showApiInfo() {
function showError (line 579) | function showError(message) {
function attachEventListeners (line 597) | function attachEventListeners() {
function initializeMap (line 703) | function initializeMap() {
function addStationsToMap (line 803) | function addStationsToMap() {
function fetchGeoJSONForMap (line 816) | function fetchGeoJSONForMap() {
function addGeoJSONToMap (line 837) | function addGeoJSONToMap(geoJsonData) {
function getStationStyle (line 870) | function getStationStyle(feature) {
function showStationPopup (line 965) | function showStationPopup(feature, coordinate) {
function updateMapLabels (line 1009) | function updateMapLabels() {
function updateLegend (line 1028) | function updateLegend() {
function getAttributeLabel (line 1074) | function getAttributeLabel(attribute) {
function calculateColorRanges (line 1093) | function calculateColorRanges() {
function getAttributeUnits (line 1138) | function getAttributeUnits(attribute) {
function getColorForValue (line 1147) | function getColorForValue(value) {
function handleFormChange (line 1172) | function handleFormChange() {
function updateUrl (line 1252) | function updateUrl() {
function populateYearFilter (line 1282) | function populateYearFilter(features) {
function filterFeaturesByYear (line 1362) | function filterFeaturesByYear(features) {
function applyYearFilter (line 1416) | function applyYearFilter() {
function updateYearFilterVisibility (line 1439) | function updateYearFilterVisibility() {
function addExportButtons (line 1477) | function addExportButtons() {
function generateExportFilename (line 1514) | function generateExportFilename(extension) {
FILE: htdocs/COOP/map/index.js
function escapeHTML (line 11) | function escapeHTML(val) {
function getCurrentDateString (line 24) | function getCurrentDateString() {
function updateURL (line 32) | function updateURL() {
function updateMap (line 53) | function updateMap() {
function updateDate (line 63) | function updateDate() {
function makeVectorLayer (line 135) | function makeVectorLayer(dt) {
function getFeatureData (line 149) | function getFeatureData(feature) {
function showPopover (line 171) | function showPopover(feature, coordinate) {
function hidePopover (line 203) | function hidePopover() {
function fetchCLIReport (line 212) | async function fetchCLIReport(url) {
function setDatePickerValue (line 231) | function setDatePickerValue(dateStr) {
function parseURLParameters (line 241) | function parseURLParameters() {
FILE: htdocs/DCP/map.js
function escapeHTML (line 12) | function escapeHTML(val) {
function updateURL (line 24) | function updateURL() {
function updateMap (line 37) | function updateMap() {
function makeVectorLayer (line 111) | function makeVectorLayer() {
function showPopup (line 131) | function showPopup(coord, content) {
function hidePopup (line 176) | function hidePopup() {
function initializeMap (line 186) | function initializeMap() {
function parseLegacyHashParams (line 239) | function parseLegacyHashParams() {
function parseModernUrlParams (line 255) | function parseModernUrlParams() {
function parseURLParams (line 271) | function parseURLParams() {
function initializeFontControls (line 314) | function initializeFontControls() {
function init (line 336) | function init() {
function initializeFormHandlers (line 347) | function initializeFormHandlers() {
FILE: htdocs/DCP/plot.module.js
function initializeForm (line 18) | function initializeForm() {
function populateStateSelect (line 63) | function populateStateSelect() {
function handleStateChange (line 78) | async function handleStateChange() {
function populateStationSelect (line 102) | function populateStationSelect(stations) {
function handleStationChange (line 116) | async function handleStationChange() {
function populateVariableSelect (line 143) | function populateVariableSelect(variables) {
function clearSelect (line 157) | function clearSelect(selectElement, placeholderText) {
function showMessage (line 164) | function showMessage(message) {
function clearMessage (line 173) | function clearMessage() {
function formatDateForInput (line 182) | function formatDateForInput(date) {
function addDays (line 189) | function addDays(date, days) {
function validatePlotInputs (line 199) | function validatePlotInputs() {
function generatePlotImageUrl (line 218) | function generatePlotImageUrl(values) {
function updateImage (line 237) | function updateImage() {
function updateURL (line 265) | function updateURL(state, station, variable, startDate, dayInterval) {
function extractURLParameters (line 281) | function extractURLParameters() {
function validateURLParams (line 303) | function validateURLParams(params) {
function parseURLParams (line 324) | function parseURLParams() {
function parseURLHash (line 343) | function parseURLHash() {
function setFormValues (line 369) | function setFormValues(state, station, variable, startDate, dayInterval) {
FILE: htdocs/GIS/apps/agclimate/gsplot.js
function roundValue (line 7) | function roundValue(value, varType) {
function generateASCIITable (line 13) | function generateASCIITable(features) {
function createPopupContent (line 55) | function createPopupContent(feature) {
function initMap (line 84) | function initMap() {
FILE: htdocs/GIS/apps/coop/gsplot.php
function mktitlelocal (line 28) | function mktitlelocal($map, $imgObj, $titlet)
function plotNoData (line 39) | function plotNoData($map, $img)
FILE: htdocs/GIS/apps/iem/freeze.js
function resetButtons (line 7) | function resetButtons() {
function initializeMapControls (line 24) | function initializeMapControls() {
function initializePresetViews (line 68) | function initializePresetViews() {
FILE: htdocs/GIS/apps/profit/index.js
function initializeMap (line 13) | function initializeMap() {
function handleYearChange (line 49) | function handleYearChange(event) {
function initializeEventListeners (line 61) | function initializeEventListeners() {
FILE: htdocs/GIS/apps/rview/warnings.module.js
function showControl (line 12) | function showControl(layerName) {
function setLayerDisplay (line 33) | function setLayerDisplay(layerName, displayValue) {
function init (line 43) | function init() {
FILE: htdocs/GIS/radmap.php
function draw_header (line 21) | function draw_header($map, $img, $width, $height)
function get_goes_fn_and_time (line 48) | function get_goes_fn_and_time($ts, $product)
function get_ridge_fn_and_time (line 81) | function get_ridge_fn_and_time($ts, $radar, $product)
FILE: htdocs/GIS/rasters.php
function rgb2html (line 41) | function rgb2html($r, $g, $b)
FILE: htdocs/QC/offline.php
function networkOffline (line 18) | function networkOffline($network)
FILE: htdocs/RWIS/camera.module.js
function formatDateForDisplay (line 8) | function formatDateForDisplay(date) {
function parseISODate (line 21) | function parseISODate(val) {
function setupDatePicker (line 42) | function setupDatePicker() {
function fetchTimes (line 75) | function fetchTimes(findTime) {
function updateURL (line 105) | function updateURL(filename) {
function getURLParams (line 115) | function getURLParams() {
function migrateLegacyHashURLs (line 123) | function migrateLegacyHashURLs() {
function getImage (line 144) | function getImage() {
function showLoadingState (line 179) | function showLoadingState(isLoading) {
function updateImageInfo (line 196) | function updateImageInfo(timeInfo) {
function parseURLParams (line 211) | function parseURLParams() {
function handlePopState (line 261) | function handlePopState() {
function addNavigationControls (line 268) | function addNavigationControls() {
function navigateImage (line 303) | function navigateImage(direction) {
function toggleAutoPlay (line 321) | function toggleAutoPlay() {
function convertTo12Hour (line 354) | function convertTo12Hour(hour24) {
function formatTimeString (line 372) | function formatTimeString(timestamp) {
function generateTimeOptionsHTML (line 384) | function generateTimeOptionsHTML(images) {
function selectTimeOption (line 405) | function selectTimeOption(findTime) {
function shouldAllowKeyboardNavigation (line 420) | function shouldAllowKeyboardNavigation(activeElement, event) {
function handleKeyboardNavigation (line 433) | function handleKeyboardNavigation(event) {
function init (line 453) | function init() {
FILE: htdocs/agclimate/index.js
function escapeHTML (line 16) | function escapeHTML(val) {
function pad (line 24) | function pad(number) {
function getN0QSource (line 32) | function getN0QSource() {
function toIEMString (line 40) | function toIEMString(val) {
function toISOString (line 44) | function toISOString(val) {
function logic (line 48) | function logic() {
function updateTitle (line 54) | function updateTitle() {
function updateURL (line 78) | function updateURL() {
function updateMap (line 91) | function updateMap() {
function setupMap (line 139) | function setupMap() {
function setDate (line 279) | function setDate() {
function setupUI (line 292) | function setupUI() {
FILE: htdocs/agclimate/soilt.module.js
function initializeModal (line 4) | function initializeModal() {
function init (line 39) | function init() {
FILE: htdocs/archive/codsat/index.module.js
constant BASE_URL (line 8) | const BASE_URL = "https://mtarchive.geol.iastate.edu";
function init (line 62) | async function init() {
function loadStateFromURL (line 121) | async function loadStateFromURL() {
function loadCascadingSelections (line 179) | async function loadCascadingSelections(urlState) {
function loadSectorTypesAndBeyond (line 198) | async function loadSectorTypesAndBeyond(urlState) {
function loadSectorsAndBeyond (line 217) | async function loadSectorsAndBeyond(urlState) {
function loadPlotTypesAndImages (line 236) | async function loadPlotTypesAndImages(urlState) {
function loadImagesForSelection (line 255) | async function loadImagesForSelection() {
function updateURL (line 303) | function updateURL() {
function attachEventListeners (line 337) | function attachEventListeners() {
function handleDateChange (line 390) | async function handleDateChange(options = {}) {
function restoreSelectionsForDate (line 445) | async function restoreSelectionsForDate(date, selections) {
function updateDateNavButtons (line 508) | function updateDateNavButtons() {
function shiftDateByDays (line 525) | function shiftDateByDays(days) {
function parseDateISO (line 540) | function parseDateISO(dateStr) {
function formatDateISO (line 555) | function formatDateISO(date) {
function addDaysToDateString (line 565) | function addDaysToDateString(dateStr, days) {
function isDateWithinBounds (line 575) | function isDateWithinBounds(dateStr) {
function handleSatelliteChange (line 591) | async function handleSatelliteChange() {
function handleSectorTypeChange (line 617) | async function handleSectorTypeChange() {
function handleSectorChange (line 642) | async function handleSectorChange() {
function handlePlotTypeChange (line 666) | async function handlePlotTypeChange() {
function fetchAvailableSatellites (line 723) | async function fetchAvailableSatellites(date) {
function fetchAvailableSectorTypes (line 734) | function fetchAvailableSectorTypes(date, satellite) {
function fetchAvailableSectors (line 744) | function fetchAvailableSectors(date, satellite, sectorType) {
function fetchAvailablePlotTypes (line 754) | function fetchAvailablePlotTypes(date, satellite, sectorType, sector) {
function fetchAvailableImages (line 764) | async function fetchAvailableImages(date, satellite, sectorType, sector,...
function extractTimestamp (line 796) | function extractTimestamp(filename) {
function fetchDirectoryListing (line 815) | async function fetchDirectoryListing(url) {
function showStatus (line 854) | function showStatus(message, type = 'info') {
function extractValidDirectoryName (line 866) | function extractValidDirectoryName(href) {
function populateSelect (line 878) | function populateSelect(selectElement, options, placeholder) {
constant PRODUCT_LABELS (line 890) | const PRODUCT_LABELS = {
function formatOptionText (line 921) | function formatOptionText(text) {
function loadImage (line 940) | function loadImage(index) {
function preloadImages (line 964) | function preloadImages(startIndex) {
function renderTimeline (line 978) | function renderTimeline() {
function updateTimelinePosition (line 1078) | function updateTimelinePosition() {
function handleKeyboardInput (line 1146) | function handleKeyboardInput(e) {
function handleShiftDayNavigation (line 1168) | function handleShiftDayNavigation(e) {
function handleFrameStep (line 1178) | function handleFrameStep(direction) {
function handlePlayPause (line 1190) | function handlePlayPause(event) {
function handleFirstFrame (line 1199) | function handleFirstFrame() {
function handleLastFrame (line 1204) | function handleLastFrame() {
function playAnimation (line 1212) | function playAnimation() {
function stopAnimation (line 1238) | function stopAnimation() {
function resetUI (line 1251) | function resetUI() {
function showRow (line 1267) | function showRow(rowId) {
function hideFromRow (line 1274) | function hideFromRow(rowId) {
function showError (line 1296) | function showError(element, message) {
function copyShareLink (line 1306) | async function copyShareLink(event) {
FILE: htdocs/archive/raob/index.module.js
function initializeDateTimeInputs (line 5) | function initializeDateTimeInputs() {
function init (line 35) | function init() {
FILE: htdocs/archive/raob/list.module.js
function rnd (line 12) | function rnd(val, precision) {
function initializeTable (line 35) | function initializeTable() {
function buildServiceUrl (line 57) | function buildServiceUrl() {
function buildCaption (line 70) | function buildCaption() {
function updateUrlParameters (line 82) | function updateUrlParameters() {
function updateFooterCaption (line 99) | function updateFooterCaption(caption, suffix = '') {
function handleFetchSuccess (line 106) | function handleFetchSuccess(data, caption) {
function handleFetchError (line 115) | function handleFetchError(error) {
function fetchData (line 119) | async function fetchData() {
function setupEventListeners (line 138) | function setupEventListeners() {
function setStationFromToken (line 190) | function setStationFromToken(token) {
function setYearFromToken (line 198) | function setYearFromToken(token) {
function setSortbyFromToken (line 206) | function setSortbyFromToken(token) {
function setAscFromToken (line 215) | function setAscFromToken(token) {
function handleSecondToken (line 223) | function handleSecondToken(token) {
function parseLegacyHashFormat (line 232) | function parseLegacyHashFormat(hash) {
function convertLegacyHashToUrlParams (line 253) | function convertLegacyHashToUrlParams() {
function parseStationParam (line 269) | function parseStationParam(urlParams) {
function parseYearParam (line 275) | function parseYearParam(urlParams) {
function parseSortbyParam (line 282) | function parseSortbyParam(urlParams) {
function parseAscParam (line 288) | function parseAscParam(urlParams) {
function parseModernUrlParameters (line 294) | function parseModernUrlParameters(urlParams) {
function parseUrlParameters (line 301) | function parseUrlParameters() {
FILE: htdocs/climodat/monitor.module.js
function handleMapStationSelection (line 6) | function handleMapStationSelection() {
function convertDateFormat (line 17) | function convertDateFormat(dateValue) {
function createHiddenInput (line 30) | function createHiddenInput(name, value) {
function handleDateFormSubmission (line 41) | function handleDateFormSubmission() {
function init (line 74) | function init() {
FILE: htdocs/climodat/monitor.php
function ss (line 10) | function ss($v)
FILE: htdocs/cow/chart.php
function ImageRectangleWithRoundedCorners (line 12) | function ImageRectangleWithRoundedCorners(&$im, $x1, $y1, $x2, $y2, $rad...
function imagettftextalign (line 23) | function imagettftextalign($image, $size, $angle, $x, $y, $color, $font,...
FILE: htdocs/current/camera.module.js
function switchToArchiveMode (line 4) | function switchToArchiveMode() {
function setupEventListeners (line 14) | function setupEventListeners() {
FILE: htdocs/current/camlapse/app.js
function rsplit (line 4) | function rsplit(val, sep, maxsplit) {
function escapeHTML (line 14) | function escapeHTML(val) {
function myloader (line 24) | function myloader() {
FILE: htdocs/current/camlapse/kcrg.js
function myloader (line 25) | function myloader() {
FILE: htdocs/current/viewer.js
function formatDateTimeLocal (line 8) | function formatDateTimeLocal(date) {
function parseDateTimeLocal (line 22) | function parseDateTimeLocal(dateTimeStr) {
constant ISOFMT (line 41) | const ISOFMT = "Y-MM-DD[T]HH:mm:ss[Z]";
function escapeHTML (line 100) | function escapeHTML(val) {
function liveShot (line 108) | function liveShot() {
function updateHashLink (line 120) | function updateHashLink() {
function findFeatureByCid (line 135) | function findFeatureByCid(cid) {
function handleRWISClick (line 162) | function handleRWISClick(img) {
function doRWISView (line 171) | function doRWISView() {
function updateCamera (line 207) | function updateCamera() {
function showSingleImageView (line 223) | function showSingleImageView() {
function setSingleImageViewVisibility (line 232) | function setSingleImageViewVisibility() {
function getSingleImageUrl (line 243) | function getSingleImageUrl() {
function setWebcamImageAndTitle (line 251) | function setWebcamImageAndTitle(url) {
function getCameraImageUrl (line 261) | function getCameraImageUrl() {
function getFallbackCameraImageUrl (line 265) | function getFallbackCameraImageUrl() {
function cronMinute (line 268) | function cronMinute() {
function getRADARSource (line 275) | function getRADARSource() {
function refreshRADAR (line 292) | function refreshRADAR() {
function refreshJSON (line 297) | function refreshJSON() {
function setWebcamGeoJsonLayer (line 304) | function setWebcamGeoJsonLayer() {
function setDashcamGeoJsonLayer (line 316) | function setDashcamGeoJsonLayer() {
function setRWISGeoJsonLayer (line 328) | function setRWISGeoJsonLayer() {
function setSBWLayer (line 340) | function setSBWLayer() {
function setLayerSource (line 355) | function setLayerSource(layer, url) {
function parseURI (line 366) | function parseURI() {
function buildUI (line 385) | function buildUI() {
function popupSBW (line 459) | function popupSBW(feature) {
function closeSBWPopover (line 488) | function closeSBWPopover() {
method style (line 525) | style(feature) {
FILE: htdocs/current/webcam.js
constant ISO8601 (line 8) | const ISO8601 = 'Y-m-d\\TH:i:s\\Z';
function toUTC (line 15) | function toUTC(dt) {
function fromUTC (line 24) | function fromUTC(dt) {
method change (line 90) | change(cb, isChecked) {
method shouldShow (line 138) | shouldShow(cid) {
method handler (line 161) | handler() {
method handler (line 169) | handler() {
method handler (line 255) | handler(btn) {
method select (line 285) | select() {
method run (line 330) | run() {
FILE: htdocs/explorer/index.js
function isAirportNetwork (line 10) | function isAirportNetwork(network) {
function isISUSMNetwork (line 13) | function isISUSMNetwork(network) {
function isClimateDistrictSid (line 16) | function isClimateDistrictSid(sid) {
function isStateSid (line 19) | function isStateSid(sid) {
function climateDistrictLabelFromSid (line 22) | function climateDistrictLabelFromSid(sid) {
function make_iem_tms (line 86) | function make_iem_tms(title, layername, visible, type) {
function escapeHTML (line 102) | function escapeHTML(val) {
function mapClickHandler (line 111) | function mapClickHandler(event) {
function stationLayerStyleFunc (line 147) | function stationLayerStyleFunc(feature) {
function displayFeature (line 174) | function displayFeature(evt) {
function initMap (line 190) | function initMap() {
function loadImage (line 270) | function loadImage(elem) {
function compute_href (line 364) | function compute_href(uri) {
function loadAutoplot (line 381) | function loadAutoplot(container, uri, divid) {
function changeStations (line 444) | function changeStations(elem) {
function loaderClicked (line 464) | function loaderClicked(elem) {
function initUI (line 497) | function initUI() {
function resizeCharts (line 528) | function resizeCharts(container) {
function windowFactory (line 546) | function windowFactory(initdiv, classID) {
FILE: htdocs/index.js
function onFeatureData (line 2) | function onFeatureData(data) {
function fetchFeatureData (line 24) | async function fetchFeatureData(url) {
FILE: htdocs/info/datasets.php
function get_text (line 24) | function get_text($pageid)
FILE: htdocs/js/form2url.module.js
function buildCurlCommand (line 3) | function buildCurlCommand(form, queryString) {
function form2url (line 25) | function form2url(form) {
function copyToClipboard (line 36) | function copyToClipboard(button) {
function fallbackCopyToClipboard (line 51) | function fallbackCopyToClipboard(text, button) {
function showCopyFeedback (line 72) | function showCopyFeedback(button, message) {
function escapeHtml (line 85) | function escapeHtml(text) {
function updateForm2UrlDisplay (line 91) | function updateForm2UrlDisplay(div) {
function attachFormListeners (line 108) | function attachFormListeners(div, form) {
function observeStationChanges (line 134) | function observeStationChanges(div, form) {
FILE: htdocs/js/iemss.js
function setupFilterByText (line 74) | function setupFilterByText(selectElement, textboxElement, selectSingleMa...
function sortListing (line 113) | function sortListing(option) {
function moveSelectedOptions (line 136) | function moveSelectedOptions(fromSelect, toSelect) {
function moveAllOptions (line 152) | function moveAllOptions(fromSelect, toSelect) {
function selectAllOptions (line 167) | function selectAllOptions(selectElement) {
function showIemssAlert (line 179) | function showIemssAlert(message, type = 'warning', duration = 5000) {
function updateStationCounts (line 222) | function updateStationCounts() {
function setupIemssDom (line 239) | function setupIemssDom(iemssElement, networkParam, select_name) {
function setupIemssFormSubmission (line 251) | function setupIemssFormSubmission(iemssElement) {
function setupStationMovementHandlers (line 283) | function setupStationMovementHandlers() {
function setupSortAndFilterHandlers (line 306) | function setupSortAndFilterHandlers() {
function setupIemssMapAndData (line 313) | function setupIemssMapAndData(iemssElement, networkParam) {
function setupIemssMapPopups (line 353) | function setupIemssMapPopups(mapInstance, geojsonInstance, geojsonSource...
FILE: htdocs/js/maptable.js
function get_style (line 14) | function get_style(color, text) {
function getLabelForFeature (line 35) | function getLabelForFeature(inst, feat) {
function highlightFeature (line 46) | function highlightFeature(inst, feat) {
function init_map (line 55) | function init_map(idx, inst) {
function buildTabulatorTable (line 124) | function buildTabulatorTable(idx, inst, data) {
function init (line 177) | function init(idx, div) {
FILE: htdocs/js/olselect-lonlat.js
function extractConfig (line 20) | function extractConfig(element) {
function validateConfig (line 39) | function validateConfig(config, callback) {
function createMarker (line 52) | function createMarker(config) {
function createSuggestedMarker (line 68) | function createSuggestedMarker(config) {
function createMapWithMarkers (line 96) | function createMapWithMarkers(element, config) {
function updateFormInputs (line 163) | function updateFormInputs(lonInput, latInput, config, lon, lat) {
function updateCoordinates (line 174) | function updateCoordinates(callback, config, lonInput, latInput, lon, la...
function syncFromInputs (line 187) | function syncFromInputs(marker, map, lonInput, latInput) {
function setupMapInteractions (line 201) | function setupMapInteractions(
function olSelectLonLat (line 267) | function olSelectLonLat(div, callback) {
FILE: htdocs/js/olselect.js
function showTooltip (line 141) | function showTooltip(feature) {
function hideTooltip (line 183) | function hideTooltip() {
FILE: htdocs/kml/sbw_interval.php
function nice_date (line 11) | function nice_date($val)
function pull_wfos_in_states (line 144) | function pull_wfos_in_states($state_abbreviations)
function pull_vtec_events_by_wfo_year (line 186) | function pull_vtec_events_by_wfo_year(
FILE: htdocs/lsr/static.js
constant TABLE_FILTERED_EVENT (line 15) | const TABLE_FILTERED_EVENT = "tfe";
function escapeHTML (line 48) | function escapeHTML(val) {
function parse_href (line 56) | function parse_href() {
function cronMinute (line 98) | function cronMinute() {
function getRADARSource (line 108) | function getRADARSource(dt) {
function make_iem_tms (line 115) | function make_iem_tms(title, layername, visible, type) {
method style (line 222) | style(feature) {
method style (line 291) | style(feature) {
function formatLSR (line 330) | function formatLSR(data) {
function revisedRandId (line 335) | function revisedRandId() {
function lsrHTML (line 338) | function lsrHTML(feature) {
function formatSBW (line 367) | function formatSBW(feature) {
function handleSBWClick (line 386) | function handleSBWClick(feature) {
function copyToClipboard (line 428) | function copyToClipboard(ttext, msg) {
function initUI (line 437) | function initUI() {
function genSettings (line 779) | function genSettings() {
function updateURL (line 791) | function updateURL() {
function applySettings (line 803) | function applySettings(opts) {
function updateRADARTimes (line 824) | function updateRADARTimes() {
function buildOpts (line 836) | function buildOpts() {
function loadData (line 853) | function loadData() {
function getShapefileLink (line 891) | function getShapefileLink(base) {
FILE: htdocs/nws/ccoop_current.php
function precip_formatter (line 19) | function precip_formatter($val)
function make_row (line 27) | function make_row($dict, $oddrow)
function get_sortdir (line 113) | function get_sortdir($baseurl, $column, $sortCol, $sortDir)
FILE: htdocs/nws/cf6map.js
function formatDate (line 11) | function formatDate(date) {
function parseDateShort (line 19) | function parseDateShort(dateStr) {
function updateURL (line 27) | function updateURL() {
function handleLegacyHashLinks (line 37) | function handleLegacyHashLinks() {
function readURLParams (line 62) | function readURLParams() {
function escapeHTML (line 79) | function escapeHTML(val) {
function updateDate (line 88) | function updateDate() {
function updateMap (line 171) | function updateMap() {
function makeVectorLayer (line 177) | function makeVectorLayer(dt) {
function showPopover (line 189) | function showPopover(content) {
function hidePopover (line 207) | function hidePopover() {
function loadCF6Report (line 217) | function loadCF6Report(url) {
function initializeApp (line 234) | function initializeApp() {
FILE: htdocs/nws/climap.js
function escapeHTML (line 11) | function escapeHTML(val) {
function getCurrentDateString (line 24) | function getCurrentDateString() {
function updateURL (line 32) | function updateURL() {
function updateMap (line 43) | function updateMap() {
function updateDate (line 53) | function updateDate() {
function makeVectorLayer (line 144) | function makeVectorLayer(dt) {
function showPopover (line 158) | function showPopover(feature, coordinate) {
function hidePopover (line 193) | function hidePopover() {
function fetchCLIReport (line 202) | async function fetchCLIReport(url) {
function setDatePickerValue (line 225) | function setDatePickerValue(dateStr) {
function parseURLParameters (line 235) | function parseURLParameters() {
FILE: htdocs/nws/clitable.module.js
function makeTableInteractive (line 4) | function makeTableInteractive() {
function addExportButtons (line 231) | function addExportButtons(table) {
FILE: htdocs/nws/clitable.php
function departure (line 85) | function departure($actual, $normal)
function departcolor (line 92) | function departcolor($actual, $normal)
function new_record (line 103) | function new_record($actual, $record)
function new_record2 (line 110) | function new_record2($actual, $record)
function new_record3 (line 116) | function new_record3($actual, $record)
FILE: htdocs/nws/list_tags.module.js
function htmlFormatter (line 36) | function htmlFormatter(cell) {
function extractTableData (line 41) | function extractTableData(table) {
function setupTableButton (line 67) | function setupTableButton(buttonId, tableId, columns) {
function addDownloadButtons (line 106) | function addDownloadButtons(originalButtonId, table) {
function getSVRColumns (line 134) | function getSVRColumns() {
function getTORColumns (line 151) | function getTORColumns() {
function getFFWColumns (line 156) | function getFFWColumns() {
function getSMWColumns (line 173) | function getSMWColumns() {
FILE: htdocs/nws/list_tags.php
function do_text (line 70) | function do_text($row)
function do_col1 (line 80) | function do_col1($row)
function do_col2 (line 90) | function do_col2($row)
function do_col3 (line 97) | function do_col3($row)
function do_row (line 104) | function do_row($row)
function do_row_ma (line 122) | function do_row_ma($row)
function do_row_ffw (line 140) | function do_row_ffw($row)
function generateStatsSummary (line 265) | function generateStatsSummary($counts) {
FILE: htdocs/nws/list_ugcs.module.js
function getUrlParams (line 4) | function getUrlParams() {
function fetchUgcs (line 14) | async function fetchUgcs(params) {
function formatSearchCell (line 25) | function formatSearchCell(cell) {
function renderTable (line 31) | function renderTable(data) {
function addExportButtons (line 49) | function addExportButtons(table) {
FILE: htdocs/nws/pds_watches.module.js
method renderComplete (line 67) | renderComplete() {
FILE: htdocs/nws/snowfall_6hour.module.js
function initializeTable (line 9) | function initializeTable() {
function init (line 153) | function init() {
FILE: htdocs/nws/spc_outlook_search/index.js
function escapeHTML (line 12) | function escapeHTML(val) {
function showLoading (line 22) | function showLoading() {
function hideLoading (line 31) | function hideLoading() {
function workflow (line 43) | function workflow() {
function updateURLParams (line 55) | function updateURLParams(params = {}) {
function updateMarkerPosition (line 66) | function updateMarkerPosition(lon, lat) {
function buildUI (line 79) | function buildUI() {
function updateSearchResultsHeader (line 113) | function updateSearchResultsHeader(lon, lat) {
function doOutlook (line 120) | function doOutlook(lon, lat) {
function doMCD (line 143) | function doMCD(lon, lat) {
function doWatch (line 163) | function doWatch(lon, lat) {
function convertLegacyHashLink (line 185) | function convertLegacyHashLink() {
function restoreCoordinatesFromURL (line 203) | function restoreCoordinatesFromURL(urlParams) {
function restoreFormSelectionFromURL (line 216) | function restoreFormSelectionFromURL(urlParams) {
function readURLParams (line 249) | function readURLParams(){
function initializeTables (line 265) | function initializeTables() {
FILE: htdocs/nws/sps_search/index.js
constant BACKEND_SPS_BYPOINT (line 6) | const BACKEND_SPS_BYPOINT = '/json/sps_by_point.py';
function formatDate (line 9) | function formatDate(date) {
function updateMarkerPosition (line 17) | function updateMarkerPosition(lon, lat) {
function updateURLParams (line 26) | function updateURLParams(lon, lat) {
function handleLegacyHashLinks (line 36) | function handleLegacyHashLinks() {
function readURLParams (line 60) | function readURLParams() {
function updateTable (line 89) | function updateTable(){
function buildUI (line 169) | function buildUI(){
FILE: htdocs/nws/vtec_obs.php
function c1 (line 85) | function c1($relh)
function c2 (line 94) | function c2($sknt, $gust)
function c3 (line 120) | function c3($vsby)
function c4 (line 129) | function c4($tmpf)
function c5 (line 142) | function c5($wcht)
function c6 (line 155) | function c6($hidx, $thres)
FILE: htdocs/nws/wpc_national_hilo/index.module.js
constant API_BASE_URL (line 5) | const API_BASE_URL = '/api/1/nws/wpc_national_hilo.json';
function validateRawData (line 8) | function validateRawData(rawData) {
function createLocationString (line 13) | function createLocationString(row) {
function initializeDateEntry (line 18) | function initializeDateEntry(processedData, date) {
function processTemperatureRow (line 32) | function processTemperatureRow(processedData, row) {
function convertToDisplayFormat (line 51) | function convertToDisplayFormat(processedData) {
function processTableData (line 62) | function processTableData(rawData) {
function formatTemperature (line 78) | function formatTemperature(cell, formatterParams) {
function formatLocations (line 87) | function formatLocations(cell) {
function initializeTable (line 95) | function initializeTable() {
function updateResultCount (line 154) | function updateResultCount(count) {
function updatePageTitle (line 163) | function updatePageTitle(title) {
function setLoadingState (line 171) | function setLoadingState(isLoading) {
function fetchTableData (line 194) | async function fetchTableData(params) {
function loadTableData (line 230) | async function loadTableData(params) {
function getFormParams (line 244) | function getFormParams() {
function updateTitleFromParams (line 268) | function updateTitleFromParams(params) {
function handleFormSubmit (line 281) | async function handleFormSubmit(event) {
function setupExportButtons (line 306) | function setupExportButtons() {
function initializeApp (line 324) | async function initializeApp() {
FILE: htdocs/nws/wpc_national_hilo/index.php
function write_entry (line 42) | function write_entry($entry){
FILE: htdocs/nws/wpc_outlook_search/index.js
function escapeHTML (line 11) | function escapeHTML(val) {
function showLoading (line 21) | function showLoading() {
function hideLoading (line 30) | function hideLoading() {
function workflow (line 42) | function workflow() {
function updateURLParams (line 53) | function updateURLParams(params = {}) {
function updateMarkerPosition (line 64) | function updateMarkerPosition(lon, lat) {
function buildUI (line 77) | function buildUI() {
function updateSearchResultsHeader (line 104) | function updateSearchResultsHeader(lon, lat) {
function doOutlook (line 111) | function doOutlook(lon, lat) {
function doMPD (line 133) | function doMPD(lon, lat) {
function restoreCoordinatesFromURL (line 153) | function restoreCoordinatesFromURL(urlParams) {
function restoreFormSelectionFromURL (line 166) | function restoreFormSelectionFromURL(urlParams) {
function readURLParams (line 191) | function readURLParams(){
function initializeTables (line 207) | function initializeTables() {
FILE: htdocs/plotting/auto/index.module.js
function formatState (line 11) | function formatState(data) {
function onNetworkChange (line 18) | function onNetworkChange() {
function hideImageLoad (line 27) | function hideImageLoad() {
function setupTiming (line 37) | function setupTiming() {
function createFP (line 65) | function createFP(inputelem) {
function initOptionalControls (line 85) | function initOptionalControls() {
function initDateInputs (line 99) | function initDateInputs() {
function initImageHandlers (line 106) | function initImageHandlers() {
function initColormapSelects (line 122) | function initColormapSelects() {
function init (line 137) | function init() {
FILE: htdocs/plotting/auto/js/mapselect.js
function stationLayerStyleFunc (line 58) | function stationLayerStyleFunc(feature) {
function mapFactory (line 76) | function mapFactory(network, formname) {
FILE: htdocs/plotting/rwis/SFtemps.php
function checker (line 78) | function checker($v)
FILE: htdocs/projects/iembot/index.js
function clean (line 1) | function clean(str) {
function urlChanger (line 7) | function urlChanger() {
function revdiv (line 12) | function revdiv(myid) {
FILE: htdocs/projects/iembot/twitter.php
function reloadbot (line 66) | function reloadbot()
FILE: htdocs/rainfall/obhour.module.js
function formatPrecipitation (line 135) | function formatPrecipitation(cell) {
function getPrecipitationColumns (line 159) | function getPrecipitationColumns() {
function updateURL (line 191) | function updateURL(network) {
function updateStatus (line 198) | function updateStatus(message, type = 'info') {
function formatTimeOffset (line 210) | function formatTimeOffset(hours) {
function formatDisplayDate (line 216) | function formatDisplayDate(date) {
function formatColumnDate (line 228) | function formatColumnDate(date) {
function updateColumnHeaders (line 239) | function updateColumnHeaders(selectedDateTime) {
function loadPrecipitationData (line 278) | async function loadPrecipitationData(network, datetime) {
function initializeControls (line 334) | function initializeControls() {
function setupEventHandlers (line 373) | function setupEventHandlers() {
function startAutoRefresh (line 423) | function startAutoRefresh() {
function stopAutoRefresh (line 445) | function stopAutoRefresh() {
FILE: htdocs/request/grx/asos.php
function s2icon (line 18) | function s2icon($s) // skipcq
FILE: htdocs/request/grx/rwis.php
function pcolor (line 24) | function pcolor($tmpf)
function s2icon (line 37) | function s2icon($s) // skipcq
FILE: htdocs/sites/current.php
function fmt (line 28) | function fmt($val, $varname)
function make_shef_table (line 35) | function make_shef_table($data, $iscurrent)
FILE: htdocs/sites/monthlysum.module.js
function go (line 1) | function go() {
FILE: htdocs/sites/monthlysum.php
function f (line 57) | function f($data, $key1, $key2, $fmt)
function f2 (line 69) | function f2($data, $key, $fmt)
function make_table (line 79) | function make_table($data, $key, $minyear, $maxyear, $fmt, $climo)
FILE: htdocs/sites/networks.php
function attrs2str (line 19) | function attrs2str($arr)
function pretty_date (line 31) | function pretty_date($val, $fmt = "M d, Y")
FILE: htdocs/sites/obhistory.module.js
function buildUrl (line 7) | function buildUrl(dateStr) {
function updateURI (line 33) | function updateURI() {
function handleDatePickerChange (line 40) | function handleDatePickerChange(event) {
function handleDatePickerBlur (line 57) | function handleDatePickerBlur(event) {
function handleDatePickerKeydown (line 65) | function handleDatePickerKeydown(event) {
function handlePrevButtonClick (line 76) | function handlePrevButtonClick() {
function handleNextButtonClick (line 84) | function handleNextButtonClick() {
function navigateToDate (line 92) | function navigateToDate(dateStr) {
function showMETAR (line 97) | function showMETAR() {
function toggleMETAR (line 115) | function toggleMETAR() {
function showMADIS (line 141) | function showMADIS() {
function toggleMADIS (line 159) | function toggleMADIS() {
FILE: htdocs/sites/obhistory.php
function wind_formatter (line 20) | function wind_formatter($row, $units = "mph")
function indy_sky_formatter (line 66) | function indy_sky_formatter($skyc, $skyl)
function sky_formatter (line 76) | function sky_formatter($row)
function temp_formatter (line 86) | function temp_formatter($val)
function vis_formatter (line 91) | function vis_formatter($val)
function precip_formatter (line 96) | function precip_formatter($val)
function asos_formatter (line 102) | function asos_formatter($i, $row, $windunits = "mph")
function pavement_formatter (line 143) | function pavement_formatter($row, $sensor)
function rwis_formatter (line 153) | function rwis_formatter($i, $row, $windunits = "mph")
function formatter (line 173) | function formatter($i, $row, $windunits = "mph")
function hads_formatter (line 200) | function hads_formatter($i, $row, $shefcols, $windunits = "mph")
function scan_formatter (line 224) | function scan_formatter($i, $row, $windunits = "mph")
FILE: htdocs/sites/scp.php
function cldtop (line 67) | function cldtop($val1, $val2)
function skyc (line 74) | function skyc($row, $i)
FILE: htdocs/sites/site.php
function pretty_key (line 122) | function pretty_key($key)
function pretty_value (line 129) | function pretty_value($key, $value)
function df (line 199) | function df($val){
FILE: htdocs/timemachine/index.js
function escapeHTML (line 11) | function escapeHTML(val) {
function updateURL (line 22) | function updateURL() {
function readURL (line 33) | function readURL() {
function setProduct (line 47) | function setProduct(pid) {
function addproducts (line 63) | function addproducts(data) {
function updateTimeDisplay (line 91) | function updateTimeDisplay() {
function calculateTimeConstraints (line 119) | function calculateTimeConstraints(opt) {
function adjustTimeForConstraints (line 134) | function adjustTimeForConstraints(sts, ets, interval) {
function updateTimeSliders (line 160) | function updateTimeSliders(sts, interval) {
function updateControlVisibility (line 165) | function updateControlVisibility(interval) {
function updateImageDisplay (line 184) | function updateImageDisplay(opt) {
function update (line 214) | function update() {
function updateUITimestamp (line 234) | function updateUITimestamp() {
function getSelectedOption (line 244) | function getSelectedOption() {
function buildUI (line 254) | function buildUI() {
function refresh (line 298) | function refresh() {
function translateHashLink (line 308) | function translateHashLink() {
function handleKeyboardNavigation (line 363) | function handleKeyboardNavigation(event) {
FILE: htdocs/topics/pests/index.module.js
function hideImageLoad (line 23) | function hideImageLoad() {
function rectify_start_date (line 40) | function rectify_start_date(pest) {
function updateStationForecast (line 58) | async function updateStationForecast() {
function updateImage (line 107) | function updateImage() {
function showProgressBar (line 155) | function showProgressBar() {
function setupDatePicker (line 176) | function setupDatePicker(elementId, onChangeCallback) {
function setupUI (line 191) | function setupUI() {
function updatePest (line 214) | function updatePest() {
function init (line 229) | function init() {
FILE: htdocs/vtec/emergencies.js
function toggleFeatures (line 29) | function toggleFeatures(type, show) {
function load_data (line 50) | function load_data() {
function featureHTML (line 99) | function featureHTML(features, lalo) {
function init_map (line 132) | function init_map() {
function createPopup (line 184) | function createPopup(content, coordinates) {
function makeDraggable (line 236) | function makeDraggable(element) {
function applyDateFilter (line 290) | function applyDateFilter() {
function initTable (line 339) | function initTable() {
function init_ui (line 411) | function init_ui() {
FILE: htdocs/vtec/events.module.js
function updateEventCount (line 5) | function updateEventCount(count) {
function updateApiUrlDisplay (line 10) | function updateApiUrlDisplay(apiUrl) {
function showLoading (line 19) | function showLoading(show) {
function showError (line 24) | function showError(show) {
function showDownloadButtons (line 29) | function showDownloadButtons(show) {
function getInputValue (line 34) | function getInputValue(selector, defaultValue) {
function getCheckboxValue (line 38) | function getCheckboxValue(selector) {
function getRadioValue (line 42) | function getRadioValue(selector, defaultValue) {
function getFormValues (line 46) | function getFormValues() {
function buildBaseApiUrl (line 59) | function buildBaseApiUrl(whichValue, wfo, state, year) {
function addFiltersToUrl (line 65) | function addFiltersToUrl(apiUrl, ponChecked, phenomena, sonChecked, sign...
function getConfig (line 76) | function getConfig() {
function toggleFormVisibility (line 87) | function toggleFormVisibility() {
class VTECEvents (line 101) | class VTECEvents {
method constructor (line 102) | constructor() {
method init (line 107) | init() {
method setupEventListeners (line 112) | setupEventListeners() {
method loadEvents (line 138) | async loadEvents() {
method renderTable (line 162) | renderTable(events) {
method downloadCSV (line 292) | downloadCSV() {
method copyToClipboard (line 298) | copyToClipboard() {
FILE: htdocs/vtec/maxetn.module.js
function htmlFormatter (line 43) | function htmlFormatter(cell) {
function generateColumns (line 48) | function generateColumns(data) {
function formatColumnTitle (line 100) | function formatColumnTitle(key) {
function getColumnWidth (line 113) | function getColumnWidth(key) {
function processData (line 126) | function processData(rawData) {
function loadData (line 156) | async function loadData() {
function setupDownloadButtons (line 224) | function setupDownloadButtons() {
function init (line 256) | function init() {
function getConfigFromForm (line 282) | function getConfigFromForm() {
function setupFormHandler (line 294) | function setupFormHandler() {
function updatePageElements (line 324) | function updatePageElements() {
FILE: htdocs/vtec/pds.module.js
function getPDSColumns (line 33) | function getPDSColumns() {
function loadTableData (line 116) | function loadTableData() {
function initializeTable (line 152) | function initializeTable() {
function setupControls (line 184) | function setupControls() {
FILE: htdocs/vtec/search.js
constant BACKEND_EVENTS_BYPOINT (line 16) | const BACKEND_EVENTS_BYPOINT = '/json/vtec_events_bypoint.py';
constant BACKEND_EVENTS_BYUGC (line 17) | const BACKEND_EVENTS_BYUGC = '/json/vtec_events_byugc.py';
constant BACKEND_SBW_BYPOINT (line 18) | const BACKEND_SBW_BYPOINT = '/json/sbw_by_point.py';
constant BACKEND_EVENTS (line 19) | const BACKEND_EVENTS = "/json/vtec_events.py";
constant BACKEND_EVENTS_BYSTATE (line 20) | const BACKEND_EVENTS_BYSTATE = "/json/vtec_events_bystate.py";
function getURLParams (line 61) | function getURLParams() {
function updateURL (line 65) | function updateURL(params) {
function hasParamValue (line 71) | function hasParamValue(value) {
function addByPointParams (line 75) | function addByPointParams(params, newParams) {
function addByUGCParams (line 83) | function addByUGCParams(params, newParams) {
function addListParams (line 93) | function addListParams(params, newParams) {
function setModeParams (line 102) | function setModeParams(mode, newParams = {}) {
function escapeHTML (line 134) | function escapeHTML(val) {
function formatDatePicker (line 147) | function formatDatePicker(dateInput) {
function updateMarkerPosition (line 159) | function updateMarkerPosition(lon, lat) {
function updateMarkerPosition2 (line 175) | function updateMarkerPosition2(lon, lat) {
function updateTable (line 180) | function updateTable(){
function updateTable2ByUGC (line 224) | function updateTable2ByUGC(){
function updateTable2ByPoint (line 265) | function updateTable2ByPoint(){
function updateTable3 (line 314) | function updateTable3(){
function createPhenomenaSummary (line 378) | function createPhenomenaSummary(tableData, containerId) {
function filterTableByPhenomena (line 497) | function filterTableByPhenomena(containerId, phenomena, significance) {
function clearPhenomenaFilter (line 523) | function clearPhenomenaFilter(containerId) {
function getTableContainer (line 547) | function getTableContainer(containerId) {
function formatRecordCountText (line 553) | function formatRecordCountText(totalCount, filteredCount) {
function updateTableToolbar (line 560) | function updateTableToolbar(containerId, tableData, filteredCount = null) {
function setupExportButtons (line 574) | function setupExportButtons() {
function setupTableConfigurations (line 629) | function setupTableConfigurations() {
function setupDateInputs (line 807) | function setupDateInputs() {
function setupSelectBoxes (line 850) | function setupSelectBoxes() {
function setupManualButtons (line 924) | function setupManualButtons() {
function setupDropdownPopulation (line 962) | function setupDropdownPopulation() {
function buildUI (line 1036) | function buildUI(){
function processHashMigration (line 1046) | function processHashMigration() {
function handleByUGCMode (line 1055) | function handleByUGCMode(urlParams) {
function handleByPointMode (line 1081) | function handleByPointMode(urlParams) {
function handleEventsByPointMode (line 1108) | function handleEventsByPointMode(urlParams) {
function handleListMode (line 1121) | function handleListMode(urlParams) {
function processURLParams (line 1152) | function processURLParams(){
function activateTab (line 1196) | function activateTab(mode) {
function handleByUGCHashMigration (line 1224) | function handleByUGCHashMigration(tokens, params) {
function handleByPointHashMigration (line 1229) | function handleByPointHashMigration(tokens, params) {
function handleEventsByPointHashMigration (line 1238) | function handleEventsByPointHashMigration(tokens, params) {
function handleListHashMigration (line 1247) | function handleListHashMigration(tokens, params) {
function migrateHashToURLParams (line 1259) | function migrateHashToURLParams(hash) {
function parseLuxonDate (line 1282) | function parseLuxonDate(val) {
function customDateTimeSorter (line 1290) | function customDateTimeSorter(a, b) {
function initializeApp (line 1303) | function initializeApp() {
FILE: htdocs/vtec/yearly_counts.php
function get_data (line 33) | function get_data()
function get_data2 (line 64) | function get_data2()
FILE: htdocs/wx/afos/index.module.js
constant NO_DATE_SET (line 5) | const NO_DATE_SET = 'No Limit';
constant INITIAL_LOAD_THROTTLE_MS (line 6) | const INITIAL_LOAD_THROTTLE_MS = 3000;
function text (line 48) | function text(str) {
function dealWithToken (line 55) | function dealWithToken(token) {
function readURLParams (line 91) | function readURLParams() {
function readAnchorTags (line 110) | function readAnchorTags() {
function readCookies (line 127) | function readCookies() {
function saveCookies (line 145) | function saveCookies() {
function updateURL (line 172) | function updateURL(pilTokens = []) {
function updateURLFromCurrentTabs (line 191) | function updateURLFromCurrentTabs() {
function loadTabContent (line 207) | async function loadTabContent(div, pil, center, ttaaii, limit, sdate, ed...
function queueStartupTabLoad (line 235) | function queueStartupTabLoad(div, pil, center, ttaaii, limit, sdate, eda...
function refreshActiveTab (line 246) | function refreshActiveTab() {
function addTab (line 276) | function addTab(
function activateTab (line 366) | function activateTab(targetTab) {
function dlbtn (line 393) | function dlbtn(btn, fmt) {
function buildUI (line 422) | function buildUI() {
function init (line 542) | function init() {
FILE: htdocs/wx/afos/list.module.js
function showHide (line 6) | function showHide() {
function scrollToSection (line 19) | function scrollToSection(name) {
FILE: htdocs/wx/afos/p.php
function locate_product (line 52) | function locate_product($conn, $e, $pil, $dir)
function last_product (line 93) | function last_product($conn, $pil)
function exact_product (line 113) | function exact_product($conn, $e, $pil, $bbb)
FILE: include/cow_worker.php
function printLSR (line 5) | function printLSR($lsr, $verified = FALSE)
function printWARN (line 50) | function printWARN($lsrs, $warn)
FILE: include/database.inc.php
function iem_pg_prepare (line 10) | function iem_pg_prepare($dbconn, $sql)
function get_dbconn_str (line 25) | function get_dbconn_str($dbname)
function iemdb (line 36) | function iemdb($dbname)
FILE: include/dbase.stub.php
function dbase_open (line 8) | function dbase_open(string $path, int $mode) {}
function dbase_close (line 13) | function dbase_close($database): bool {}
function dbase_add_record (line 18) | function dbase_add_record($database, array $data): bool {}
function dbase_delete_record (line 23) | function dbase_delete_record($database, int $number): bool {}
function dbase_replace_record (line 28) | function dbase_replace_record($database, array $data, int $number): bool {}
function dbase_numrecords (line 33) | function dbase_numrecords($database): int {}
function dbase_numfields (line 38) | function dbase_numfields($database): int {}
function dbase_pack (line 43) | function dbase_pack($database): bool {}
function dbase_get_record (line 48) | function dbase_get_record($database, int $number): array|false {}
function dbase_get_record_with_names (line 53) | function dbase_get_record_with_names($database, int $number): array|fals...
function dbase_create (line 58) | function dbase_create(string $path, array $fields, int $type = DBASE_TYP...
function dbase_get_header_info (line 63) | function dbase_get_header_info($database): array {}
FILE: include/forms.php
function ugcStateSelect (line 23) | function ugcStateSelect($state, $selected)
function selectNetworkType (line 48) | function selectNetworkType($nettype, $selected)
function selectNetwork (line 86) | function selectNetwork($selected, $extra = array())
function networkMultiSelect (line 118) | function networkMultiSelect(
function make_sname (line 151) | function make_sname($tbl)
function networkSelect (line 165) | function networkSelect(
function networkSelectAuto (line 227) | function networkSelectAuto($network, $selected, $extra = array())
function xssafe (line 263) | function xssafe($data, $encoding = 'UTF-8')
function get_str404 (line 279) | function get_str404($name, $default = null, $maxlength = null)
function get_int404 (line 294) | function get_int404($name, $default = null)
function get_float404 (line 310) | function get_float404($name, $default = null)
function make_checkboxes (line 325) | function make_checkboxes($name, $selected, $ar)
function make_select (line 388) | function make_select(
function stateSelect (line 497) | function stateSelect(
function wfoSelect (line 606) | function wfoSelect($selected)
function minuteSelect (line 643) | function minuteSelect($selected, $name, $skip = 1)
function hour24Select (line 672) | function hour24Select($selected, $name)
function hourSelect (line 701) | function hourSelect($selected, $name)
function gmtHourSelect (line 733) | function gmtHourSelect($selected, $name)
function monthSelect (line 769) | function monthSelect($selected, $name = "month", $fmt = "M", $jsextra = '')
function yearSelect (line 824) | function yearSelect($start, $selected, $fname = 'year', $jsextra = '', $...
function daySelect (line 877) | function daySelect($selected, $name = 'day')
FILE: include/generators.php
function gen_feature (line 182) | function gen_feature($t)
FILE: include/iemmap.php
function saveWebImage (line 5) | function saveWebImage($img)
function iemmap_title (line 12) | function iemmap_title($map, $img, $title = null, $subtitle = null)
FILE: include/iemprop.php
function get_iemprop (line 22) | function get_iemprop($propname)
FILE: include/jpgraph/gd_image.inc.php
class Image (line 37) | class Image {
method __construct (line 76) | function __construct($aWidth=0,$aHeight=0,$aFormat=DEFAULT_GFORMAT,$aS...
method SetInterlace (line 100) | function SetInterlace($aFlg=true) {
method SetAntiAliasing (line 105) | function SetAntiAliasing($aFlg=true) {
method GetAntiAliasing (line 115) | function GetAntiAliasing() {
method CreateRawCanvas (line 119) | function CreateRawCanvas($aWidth=0,$aHeight=0) {
method CloneCanvasH (line 146) | function CloneCanvasH() {
method CreateImgCanvas (line 153) | function CreateImgCanvas($aWidth=0,$aHeight=0) {
method CopyCanvasH (line 182) | function CopyCanvasH($aToHdl,$aFromHdl,$aToX,$aToY,$aFromX,$aFromY,$aW...
method Copy (line 194) | function Copy($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight,$fro...
method CopyMerge (line 198) | function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight...
method GetWidth (line 223) | static function GetWidth($aImg) {
method GetHeight (line 227) | static function GetHeight($aImg) {
method CreateFromString (line 231) | static function CreateFromString($aStr) {
method SetCanvasH (line 240) | function SetCanvasH($aHdl) {
method SetCanvasColor (line 245) | function SetCanvasColor($aColor) {
method SetAlphaBlending (line 249) | function SetAlphaBlending($aFlg=true) {
method SetAutoMargin (line 253) | function SetAutoMargin() {
method SetFont (line 265) | function SetFont($family,$style=FS_NORMAL,$size=10) {
method GetTextHeight (line 287) | function GetTextHeight($txt="",$angle=0) {
method GetFontHeight (line 320) | function GetFontHeight($angle=0) {
method GetFontWidth (line 326) | function GetFontWidth($angle=0) {
method GetTextWidth (line 334) | function GetTextWidth($txt,$angle=0) {
method StrokeBoxedText (line 381) | function StrokeBoxedText($x,$y,$txt,$dir=0,$fcolor="white",$bcolor="bl...
method StrokeBoxedText2 (line 466) | function StrokeBoxedText2($x,$y,$txt,$dir=0,$fcolor="white",$bcolor="b...
method SetTextAlign (line 619) | function SetTextAlign($halign,$valign="bottom") {
method _StrokeBuiltinFont (line 624) | function _StrokeBuiltinFont($x,$y,$txt,$dir,$paragraph_align,&$aBoundi...
method AddTxtCR (line 694) | function AddTxtCR($aTxt) {
method NormAngle (line 707) | function NormAngle($a) {
method imagettfbbox_fixed (line 719) | function imagettfbbox_fixed($size, $angle, $fontfile, $text) {
method GetTTFBBox (line 810) | function GetTTFBBox($aTxt,$aAngle=0) {
method GetBBoxTTF (line 815) | function GetBBoxTTF($aTxt,$aAngle=0) {
method GetBBoxHeight (line 868) | function GetBBoxHeight($aTxt,$aAngle=0) {
method GetBBoxWidth (line 873) | function GetBBoxWidth($aTxt,$aAngle=0) {
method _StrokeTTF (line 879) | function _StrokeTTF($x,$y,$txt,$dir,$paragraph_align,&$aBoundingBox,$d...
method StrokeText (line 1080) | function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=f...
method SetMargin (line 1104) | function SetMargin($lm,$rm,$tm,$bm) {
method SetTransparent (line 1122) | function SetTransparent($color) {
method SetColor (line 1126) | function SetColor($color,$aAlpha=0) {
method PushColor (line 1137) | function PushColor($color) {
method PopColor (line 1149) | function PopColor() {
method SetLineWeight (line 1158) | function SetLineWeight($weight) {
method SetStartPoint (line 1165) | function SetStartPoint($x,$y) {
method Arc (line 1170) | function Arc($cx,$cy,$w,$h,$s,$e) {
method FilledArc (line 1177) | function FilledArc($xc,$yc,$w,$h,$s,$e,$style='') {
method FilledCakeSlice (line 1190) | function FilledCakeSlice($cx,$cy,$w,$h,$s,$e) {
method CakeSlice (line 1194) | function CakeSlice($xc,$yc,$w,$h,$s,$e,$fillcolor="",$arccolor="") {
method Ellipse (line 1228) | function Ellipse($xc,$yc,$w,$h) {
method Circle (line 1232) | function Circle($xc,$yc,$r) {
method FilledCircle (line 1238) | function FilledCircle($xc,$yc,$r) {
method lip (line 1244) | function lip($f,$t,$p) {
method SetLineStyle (line 1253) | function SetLineStyle($s) {
method StyleLine (line 1277) | function StyleLine($x1,$y1,$x2,$y2,$aStyle='', $from_grid_class = fals...
method DashedLine (line 1325) | function DashedLine($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) {
method DashedLineForGrid (line 1353) | function DashedLineForGrid($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=...
method Line (line 1386) | function Line($x1,$y1,$x2,$y2) {
method Polygon (line 1401) | function Polygon($p,$closed=FALSE,$fast=FALSE) {
method FilledPolygon (line 1430) | function FilledPolygon($pts) {
method Rectangle (line 1449) | function Rectangle($xl,$yu,$xr,$yl) {
method FilledRectangle (line 1453) | function FilledRectangle($xl,$yu,$xr,$yl) {
method FilledRectangle2 (line 1457) | function FilledRectangle2($xl,$yu,$xr,$yl,$color1,$color2,$style=1) {
method ShadowRectangle (line 1486) | function ShadowRectangle($xl,$yu,$xr,$yl,$fcolor=false,$shadow_width=4...
method FilledRoundedRectangle (line 1520) | function FilledRoundedRectangle($xt,$yt,$xr,$yl,$r=5) {
method RoundedRectangle (line 1551) | function RoundedRectangle($xt,$yt,$xr,$yl,$r=5) {
method FilledBevel (line 1575) | function FilledBevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$col...
method Bevel (line 1580) | function Bevel($x1,$y1,$x2,$y2,$depth=2,$color1='white@0.4',$color2='b...
method StyleLineTo (line 1596) | function StyleLineTo($x,$y) {
method LineTo (line 1602) | function LineTo($x,$y) {
method Point (line 1608) | function Point($x,$y) {
method Fill (line 1612) | function Fill($x,$y) {
method FillToBorder (line 1616) | function FillToBorder($x,$y,$aBordColor) {
method SetExpired (line 1624) | function SetExpired($aFlg=true) {
method Headers (line 1629) | function Headers() {
method SetQuality (line 1657) | function SetQuality($q) {
method Stream (line 1662) | function Stream($aFile=NULL) {
method DoSupersampling (line 1696) | function DoSupersampling() {
method Destroy (line 1709) | function Destroy() {
method SetImgFormat (line 1715) | function SetImgFormat($aFormat,$aQuality=75) {
method DrawLine (line 1755) | function DrawLine($im, $x1, $y1, $x2, $y2, $weight, $color) {
method DrawImageSmoothArc (line 1854) | function DrawImageSmoothArc($im, $xc, $yc, $w, $h, $s, $e, $color, $st...
method CreateColorForImageSmoothArc (line 1861) | function CreateColorForImageSmoothArc($color) {
method imageSmoothCircle (line 1872) | function imageSmoothCircle( &$img, $cx, $cy, $cr, $color ) {
method __get (line 1926) | function __get($name) {
method __set (line 1943) | function __set($name, $value) {
class RotImage (line 1954) | class RotImage extends Image {
method __construct (line 1959) | function __construct($aWidth,$aHeight,$a=0,$aFormat=DEFAULT_GFORMAT,$a...
method SetCenter (line 1966) | function SetCenter($dx,$dy) {
method SetTranslation (line 1975) | function SetTranslation($dx,$dy) {
method UpdateRotMatrice (line 1982) | function UpdateRotMatrice() {
method SetAngle (line 1995) | function SetAngle($a) {
method Circle (line 2002) | function Circle($xc,$yc,$r) {
method FilledCircle (line 2007) | function FilledCircle($xc,$yc,$r) {
method Arc (line 2013) | function Arc($xc,$yc,$w,$h,$s,$e) {
method FilledArc (line 2020) | function FilledArc($xc,$yc,$w,$h,$s,$e,$style='') {
method SetMargin (line 2027) | function SetMargin($lm,$rm,$tm,$bm) {
method Rotate (line 2032) | function Rotate($x,$y) {
method CopyMerge (line 2044) | function CopyMerge($fromImg,$toX,$toY,$fromX,$fromY,$toWidth,$toHeight...
method ArrRotate (line 2050) | function ArrRotate($pnts) {
method DashedLine (line 2059) | function DashedLine($x1,$y1,$x2,$y2,$dash_length=1,$dash_space=4) {
method Line (line 2065) | function Line($x1,$y1,$x2,$y2) {
method Rectangle (line 2071) | function Rectangle($x1,$y1,$x2,$y2) {
method FilledRectangle (line 2076) | function FilledRectangle($x1,$y1,$x2,$y2) {
method Polygon (line 2083) | function Polygon($pnts,$closed=FALSE,$fast=FALSE) {
method FilledPolygon (line 2094) | function FilledPolygon($pnts) {
method Point (line 2098) | function Point($x,$y) {
method StrokeText (line 2103) | function StrokeText($x,$y,$txt,$dir=0,$paragraph_align="left",$debug=f...
class ImgStreamCache (line 2114) | class ImgStreamCache {
method __construct (line 2118) | function __construct($aCacheDir=CACHE_DIR) {
method SetTimeout (line 2129) | function SetTimeout($aTimeout) {
method PutAndStream (line 2134) | function PutAndStream($aImage,$aCacheFileName,$aInline,$aStrokeFileNam...
method IsValid (line 2243) | function IsValid($aCacheFileName) {
method StreamImgFile (line 2259) | function StreamImgFile($aImage,$aCacheFileName) {
method GetAndStream (line 2277) | function GetAndStream($aImage,$aCacheFileName) {
method MakeDirs (line 2289) | function MakeDirs($aFile) {
FILE: include/jpgraph/imageSmoothArc.php
function imageSmoothArcDrawSegment (line 38) | function imageSmoothArcDrawSegment (&$img, $cx, $cy, $a, $b, $aaAngleX, ...
function imageSmoothArc (line 254) | function imageSmoothArc ( &$img, $cx, $cy, $w, $h, $color, $start, $stop)
FILE: include/jpgraph/imgdata_balls.inc.php
class ImgData_Balls (line 11) | class ImgData_Balls extends ImgData {
method GetImg (line 51) | function GetImg($aMark,$aIdx) {
method __construct (line 73) | function __construct() {
FILE: include/jpgraph/imgdata_bevels.inc.php
class ImgData_Bevels (line 11) | class ImgData_Bevels extends ImgData {
method __construct (line 21) | function __construct() {
FILE: include/jpgraph/imgdata_diamonds.inc.php
class ImgData_Diamonds (line 11) | class ImgData_Diamonds extends ImgData {
method __construct (line 22) | function __construct() {
FILE: include/jpgraph/imgdata_pushpins.inc.php
class ImgData_PushPins (line 11) | class ImgData_PushPins extends ImgData {
method __construct (line 22) | function __construct() {
FILE: include/jpgraph/imgdata_squares.inc.php
class ImgData_Squares (line 11) | class ImgData_Squares extends ImgData {
method ImgData_Squares (line 22) | function ImgData_Squares () {
FILE: include/jpgraph/imgdata_stars.inc.php
class ImgData_Stars (line 12) | class ImgData_Stars extends ImgData {
method __construct (line 22) | function __construct() {
FILE: include/jpgraph/jpgraph.php
function CheckPHPVersion (line 235) | function CheckPHPVersion($aMinVersion) {
function _phpErrorHandler (line 271) | function _phpErrorHandler($errno,$errmsg,$filename, $linenum, $vars) {
function sign (line 292) | function sign($a) {return $a >= 0 ? 1 : -1;}
function GenImgName (line 300) | function GenImgName() {
class JpgTimer (line 331) | class JpgTimer {
method __construct (line 334) | function __construct() {
method Push (line 339) | function Push() {
method Pop (line 346) | function Pop() {
class DateLocale (line 359) | class DateLocale {
method __construct (line 364) | function __construct() {
method Set (line 372) | function Set($aLocale) {
method GetDayAbb (line 419) | function GetDayAbb() {
method GetShortDay (line 423) | function GetShortDay() {
method GetShortMonth (line 427) | function GetShortMonth() {
method GetShortMonthName (line 431) | function GetShortMonthName($aNbr) {
method GetLongMonthName (line 435) | function GetLongMonthName($aNbr) {
method GetMonth (line 439) | function GetMonth() {
class Footer (line 452) | class Footer {
method __construct (line 457) | function __construct() {
method SetTimer (line 466) | function SetTimer($aTimer,$aTimerPostString='') {
method SetMargin (line 471) | function SetMargin($aLeft=3,$aRight=3,$aBottom=3) {
method Stroke (line 477) | function Stroke($aImg) {
class Graph (line 501) | class Graph {
method __construct (line 586) | function __construct($aWidth=300,$aHeight=200,$aCachedName='',$aTimeou...
method InitializeFrameAndMargin (line 657) | function InitializeFrameAndMargin() {
method SetupCache (line 679) | function SetupCache($aFilename,$aTimeout=60) {
method Set3DPerspective (line 685) | function Set3DPerspective($aDir=1,$aHorizon=100,$aSkewDist=120,$aQuali...
method SetUserFont (line 697) | function SetUserFont($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont1 (line 701) | function SetUserFont1($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont2 (line 705) | function SetUserFont2($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont3 (line 709) | function SetUserFont3($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetImgFormat (line 714) | function SetImgFormat($aFormat,$aQuality=75) {
method SetGridDepth (line 719) | function SetGridDepth($aDepth) {
method SetIconDepth (line 723) | function SetIconDepth($aDepth) {
method SetAngle (line 728) | function SetAngle($aAngle) {
method SetAlphaBlending (line 732) | function SetAlphaBlending($aFlg=true) {
method SetMargin (line 737) | function SetMargin($lm,$rm,$tm,$bm) {
method SetY2OrderBack (line 741) | function SetY2OrderBack($aBack=true) {
method Set90AndMargin (line 747) | function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) {
method SetClipping (line 759) | function SetClipping($aFlg=true) {
method Add (line 764) | function Add($aPlot) {
method AddTable (line 794) | function AddTable($aTable) {
method AddIcon (line 805) | function AddIcon($aIcon) {
method AddY2 (line 817) | function AddY2($aPlot) {
method AddY (line 848) | function AddY($aN,$aPlot) {
method AddText (line 876) | function AddText($aTxt,$aToY2=false) {
method AddLine (line 903) | function AddLine($aLine,$aToY2=false) {
method AddBand (line 935) | function AddBand($aBand,$aToY2=false) {
method SetPlotGradient (line 962) | function SetPlotGradient($aFrom='navy',$aTo='silver',$aGradType=2) {
method SetBackgroundGradient (line 968) | function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=...
method SetBackgroundCFlag (line 976) | function SetBackgroundCFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix=100) {
method SetBackgroundCountryFlag (line 983) | function SetBackgroundCountryFlag($aName,$aBgType=BGIMG_FILLPLOT,$aMix...
method SetBackgroundImage (line 991) | function SetBackgroundImage($aFileName,$aBgType=BGIMG_FILLPLOT,$aImgFo...
method SetBackgroundImageMix (line 1015) | function SetBackgroundImageMix($aMix) {
method SetBackgroundImagePos (line 1020) | function SetBackgroundImagePos($aXpos,$aYpos) {
method SetAxisStyle (line 1026) | function SetAxisStyle($aStyle) {
method SetBox (line 1031) | function SetBox($aDrawPlotFrame=true,$aPlotFrameColor=array(0,0,0),$aP...
method SetColor (line 1038) | function SetColor($aColor) {
method SetMarginColor (line 1043) | function SetMarginColor($aColor) {
method SetFrame (line 1048) | function SetFrame($aDrawImgFrame=true,$aImgFrameColor=array(0,0,0),$aI...
method SetFrameBevel (line 1054) | function SetFrameBevel($aDepth=3,$aBorder=false,$aBorderColor='black',...
method SetShadow (line 1066) | function SetShadow($aShowShadow=true,$aShadowWidth=5,$aShadowColor='da...
method SetScale (line 1076) | function SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1) {
method SetY2Scale (line 1140) | function SetY2Scale($aAxisType='lin',$aY2Min=1,$aY2Max=1) {
method SetYDeltaDist (line 1170) | function SetYDeltaDist($aDist) {
method SetYScale (line 1175) | function SetYScale($aN,$aAxisType="lin",$aYMin=1,$aYMax=1) {
method SetTickDensity (line 1203) | function SetTickDensity($aYDensity=TICKD_NORMAL,$aXDensity=TICKD_NORMA...
method GetCSIMareas (line 1242) | function GetCSIMareas() {
method GetHTMLImageMap (line 1304) | function GetHTMLImageMap($aMapName) {
method CheckCSIMCache (line 1311) | function CheckCSIMCache($aCacheName,$aTimeOut=60) {
method GetURLArguments (line 1362) | static function GetURLArguments($aAddRecursiveBlocker=false) {
method SetCSIMImgAlt (line 1401) | function SetCSIMImgAlt($aAlt) {
method StrokeCSIM (line 1405) | function StrokeCSIM($aScriptName='auto',$aCSIMName='',$aBorder=0) {
method StrokeCSIMImage (line 1476) | function StrokeCSIMImage() {
method GetCSIMImgHTML (line 1482) | function GetCSIMImgHTML($aCSIMName, $aScriptName='auto', $aBorder=0 ) {
method GetTextsYMinMax (line 1490) | function GetTextsYMinMax($aY2=false) {
method GetTextsXMinMax (line 1519) | function GetTextsXMinMax($aY2=false) {
method GetXMinMax (line 1548) | function GetXMinMax() {
method AdjustMarginsForTitles (line 1600) | function AdjustMarginsForTitles() {
method StrokeStore (line 1667) | function StrokeStore($aStrokeFileName) {
method doAutoscaleXAxis (line 1680) | function doAutoscaleXAxis() {
method doAutoScaleYnAxis (line 1816) | function doAutoScaleYnAxis() {
method doAutoScaleYAxis (line 1900) | function doAutoScaleYAxis() {
method InitScaleConstants (line 1947) | function InitScaleConstants() {
method doPrestrokeAdjustments (line 1961) | function doPrestrokeAdjustments() {
method StrokeBands (line 1992) | function StrokeBands($aDepth,$aCSIM) {
method Stroke (line 2017) | function Stroke($aStrokeFileName='') {
method SetAxisLabelBackground (line 2290) | function SetAxisLabelBackground($aType,$aXFColor='lightgray',$aXColor=...
method StrokeAxisLabelBackground (line 2298) | function StrokeAxisLabelBackground() {
method StrokeAxis (line 2381) | function StrokeAxis($aStrokeLabels=true) {
method LoadBkgImage (line 2468) | static function LoadBkgImage($aImgFormat='',$aFile='',$aImgStr='') {
method StrokePlotGrad (line 2524) | function StrokePlotGrad() {
method StrokeBackgroundGrad (line 2537) | function StrokeBackgroundGrad() {
method StrokeFrameBackground (line 2570) | function StrokeFrameBackground() {
method StrokeFrame (line 2664) | function StrokeFrame() {
method FillMarginArea (line 2703) | function FillMarginArea() {
method FillPlotArea (line 2725) | function FillPlotArea() {
method StrokePlotArea (line 2735) | function StrokePlotArea() {
method StrokeIcons (line 2760) | function StrokeIcons() {
method StrokePlotBox (line 2767) | function StrokePlotBox() {
method SetTitleBackgroundFillStyle (line 2782) | function SetTitleBackgroundFillStyle($aStyle,$aColor1='black',$aColor2...
method SetTitleBackground (line 2788) | function SetTitleBackground($aBackColor='gray', $aStyle=TITLEBKG_STYLE...
method StrokeTitles (line 2799) | function StrokeTitles() {
method StrokeTexts (line 2962) | function StrokeTexts() {
method StrokeTables (line 2978) | function StrokeTables() {
method DisplayClientSideaImageMapAreas (line 2987) | function DisplayClientSideaImageMapAreas() {
method SetTextScaleOff (line 3018) | function SetTextScaleOff($aOff) {
method SetTextScaleAbsCenterOff (line 3024) | function SetTextScaleAbsCenterOff($aOff) {
method GetLinesYMinMax (line 3029) | function GetLinesYMinMax( $aLines ) {
method GetLinesXMinMax (line 3047) | function GetLinesXMinMax( $aLines ) {
method GetPlotsYMinMax (line 3065) | function GetPlotsYMinMax($aPlots) {
method hasLinePlotAndBarPlot (line 3096) | function hasLinePlotAndBarPlot() {
method SetTheme (line 3116) | function SetTheme($graph_theme) {
method ClearTheme (line 3131) | function ClearTheme() {
method SetSupersampling (line 3159) | function SetSupersampling($do = false, $scale = 2) {
class LineProperty (line 3175) | class LineProperty {
method __construct (line 3178) | function __construct($aWeight=1,$aColor='black',$aStyle='solid') {
method SetColor (line 3184) | function SetColor($aColor) {
method SetWeight (line 3188) | function SetWeight($aWeight) {
method SetStyle (line 3192) | function SetStyle($aStyle) {
method Show (line 3196) | function Show($aShow=true) {
method Stroke (line 3200) | function Stroke($aImg,$aX1,$aY1,$aX2,$aY2) {
class GraphTabTitle (line 3220) | class GraphTabTitle extends Text{
method __construct (line 3224) | function __construct() {
method SetColor (line 3231) | function SetColor($aTxtColor,$aFillColor='lightyellow',$aBorderColor='...
method SetFillColor (line 3237) | function SetFillColor($aFillColor) {
method SetTabAlign (line 3241) | function SetTabAlign($aAlign) {
method SetWidth (line 3245) | function SetWidth($aWidth) {
method Set (line 3249) | function Set($t) {
method SetCorner (line 3254) | function SetCorner($aD) {
method Stroke (line 3258) | function Stroke($aImg,$aDummy1=null,$aDummy2=null) {
class SuperScriptText (line 3346) | class SuperScriptText extends Text {
method __construct (line 3353) | function __construct($aTxt='',$aSuper='',$aXAbsPos=0,$aYAbsPos=0) {
method FromReal (line 3358) | function FromReal($aVal,$aPrecision=2) {
method Set (line 3385) | function Set($aTxt,$aSuper='') {
method SetSuperFont (line 3390) | function SetSuperFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=8) {
method GetWidth (line 3397) | function GetWidth($aImg) {
method GetFontHeight (line 3407) | function GetFontHeight($aImg) {
method GetTextHeight (line 3416) | function GetTextHeight($aImg) {
method Stroke (line 3424) | function Stroke($aImg,$ax=-1,$ay=-1) {
class Grid (line 3526) | class Grid {
method __construct (line 3534) | function __construct($aAxis) {
method SetColor (line 3539) | function SetColor($aMajColor,$aMinColor=false) {
method SetWeight (line 3547) | function SetWeight($aMajorWeight,$aMinorWeight=1) {
method SetLineStyle (line 3553) | function SetLineStyle($aMajorType,$aMinorType='solid') {
method SetStyle (line 3558) | function SetStyle($aMajorType,$aMinorType='solid') {
method Show (line 3563) | function Show($aShowMajor=true,$aShowMinor=false) {
method SetFill (line 3568) | function SetFill($aFlg=true,$aColor1='lightgray',$aColor2='lightblue') {
method Stroke (line 3574) | function Stroke() {
method DoStroke (line 3587) | function DoStroke($aTicksPos,$aType,$aColor,$aWeight) {
class AxisPrototype (line 3673) | class AxisPrototype {
method __construct (line 3696) | function __construct($img,$aScale,$color = array(0,0,0)) {
method SetLabelFormat (line 3719) | function SetLabelFormat($aFormStr) {
method SetLabelFormatString (line 3723) | function SetLabelFormatString($aFormStr,$aDate=false) {
method SetLabelFormatCallback (line 3727) | function SetLabelFormatCallback($aFuncName) {
method SetLabelAlign (line 3731) | function SetLabelAlign($aHAlign,$aVAlign='top',$aParagraphAlign='left') {
method HideFirstTickLabel (line 3738) | function HideFirstTickLabel($aShow=false) {
method HideLastTickLabel (line 3742) | function HideLastTickLabel($aShow=false) {
method SetTickPositions (line 3747) | function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) {
method SetMajTickPositions (line 3752) | function SetMajTickPositions($aMajPos,$aLabels=NULL) {
method HideTicks (line 3757) | function HideTicks($aHideMinor=true,$aHideMajor=true) {
method HideZeroLabel (line 3763) | function HideZeroLabel($aFlag=true) {
method HideFirstLastLabel (line 3767) | function HideFirstLastLabel() {
method Hide (line 3780) | function Hide($aHide=true) {
method HideLine (line 3785) | function HideLine($aHide=true) {
method HideLabels (line 3789) | function HideLabels($aHide=true) {
method SetWeight (line 3794) | function SetWeight($aWeight) {
method SetColor (line 3799) | function SetColor($aColor,$aLabelColor=false) {
method SetTitle (line 3806) | function SetTitle($aTitle,$aAdjustAlign='high') {
method SetTitleMargin (line 3812) | function SetTitleMargin($aMargin) {
method SetTitleSide (line 3817) | function SetTitleSide($aSideOfAxis) {
method SetTickSide (line 3821) | function SetTickSide($aDir) {
method SetTickSize (line 3825) | function SetTickSize($aMajSize,$aMinSize=3) {
method SetTickLabels (line 3830) | function SetTickLabels($aLabelArray,$aLabelColorArray=null) {
method SetLabelMargin (line 3835) | function SetLabelMargin($aMargin) {
method SetTextTickInterval (line 3841) | function SetTextTickInterval($aStep,$aStart=0) {
method SetTextLabelInterval (line 3848) | function SetTextLabelInterval($aStep) {
method SetLabelSide (line 3855) | function SetLabelSide($aSidePos) {
method SetFont (line 3860) | function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) {
method SetPos (line 3867) | function SetPos($aPosOnOtherScale) {
method SetPosAbsDelta (line 3873) | function SetPosAbsDelta($aDelta) {
method SetLabelAngle (line 3878) | function SetLabelAngle($aAngle) {
class Axis (line 3893) | class Axis extends AxisPrototype {
method __construct (line 3895) | function __construct($img,$aScale,$color='black') {
method Stroke (line 3900) | function Stroke($aOtherAxisScale,$aStrokeLabels=true) {
method StrokeLabels (line 4013) | function StrokeLabels($aPos,$aMinor=false,$aAbsLabel=false) {
class Ticks (line 4167) | class Ticks {
method __construct (line 4187) | function __construct($aScale) {
method SetLabelFormat (line 4193) | function SetLabelFormat($aFormatString,$aDate=FALSE) {
method SetLabelDateFormat (line 4198) | function SetLabelDateFormat($aFormatString) {
method SetFormatCallback (line 4202) | function SetFormatCallback($aCallbackFuncName) {
method SupressZeroLabel (line 4207) | function SupressZeroLabel($aFlag=true) {
method SupressMinorTickMarks (line 4212) | function SupressMinorTickMarks($aHide=true) {
method SupressTickMarks (line 4217) | function SupressTickMarks($aHide=true) {
method SupressFirst (line 4222) | function SupressFirst($aHide=true) {
method SupressLast (line 4227) | function SupressLast($aHide=true) {
method GetMinTickAbsSize (line 4232) | function GetMinTickAbsSize() {
method GetMajTickAbsSize (line 4237) | function GetMajTickAbsSize() {
method SetSize (line 4241) | function SetSize($aMajSize,$aMinSize=3) {
method IsSpecified (line 4247) | function IsSpecified() {
method SetSide (line 4251) | function SetSide($aSide) {
method SetDirection (line 4256) | function SetDirection($aSide=SIDE_RIGHT) {
method SetMarkColor (line 4261) | function SetMarkColor($aMajorColor,$aMinorColor='') {
method SetColor (line 4265) | function SetColor($aMajorColor,$aMinorColor='') {
method SetWeight (line 4277) | function SetWeight($aWeight) {
class LinearTicks (line 4287) | class LinearTicks extends Ticks {
method __construct (line 4296) | function __construct() {
method GetMajor (line 4301) | function GetMajor() {
method GetMinor (line 4306) | function GetMinor() {
method Set (line 4311) | function Set($aMajStep,$aMinStep=false) {
method SetMajTickPositions (line 4326) | function SetMajTickPositions($aMajPos,$aLabels=NULL) {
method SetTickPositions (line 4330) | function SetTickPositions($aMajPos,$aMinPos=NULL,$aLabels=NULL) {
method HaveManualLabels (line 4344) | function HaveManualLabels() {
method _doManualTickPos (line 4349) | function _doManualTickPos($aScale) {
method _doAutoTickPos (line 4401) | function _doAutoTickPos($aScale) {
method AdjustForDST (line 4484) | function AdjustForDST($aFlg=true) {
method _doLabelFormat (line 4489) | function _doLabelFormat($aVal,$aIdx,$aNbrTicks) {
method _StrokeTicks (line 4560) | function _StrokeTicks($aImg,$aScale,$aPos) {
method Stroke (line 4622) | function Stroke($aImg,$aScale,$aPos) {
method SetXLabelOffset (line 4640) | function SetXLabelOffset($aLabelOff,$aTickOff=-1) {
method SetTextLabelStart (line 4655) | function SetTextLabelStart($aTextLabelOff) {
class LinearScale (line 4665) | class LinearScale {
method __construct (line 4689) | function __construct($aMin=0,$aMax=0,$aType='y') {
method IsSpecified (line 4701) | function IsSpecified() {
method SetAutoMin (line 4711) | function SetAutoMin($aMin) {
method SetAutoMax (line 4718) | function SetAutoMax($aMax) {
method SetAutoTicks (line 4724) | function SetAutoTicks($aFlag=true) {
method SetGrace (line 4729) | function SetGrace($aGraceTop,$aGraceBottom=0) {
method GetMinVal (line 4738) | function GetMinVal() {
method GetMaxVal (line 4743) | function GetMaxVal() {
method Update (line 4748) | function Update($aImg,$aMin,$aMax) {
method Translate (line 4755) | function Translate($aCoord) {
method RelTranslate (line 4769) | function RelTranslate($aCoord) {
method SetIntScale (line 4782) | function SetIntScale($aIntScale=true) {
method IntAutoScale (line 4787) | function IntAutoScale($img,$min,$max,$maxsteps,$majend=true) {
method AutoScale (line 4903) | function AutoScale($img,$min,$max,$maxsteps,$majend=true) {
method InitConstants (line 5013) | function InitConstants($img) {
method SetConstants (line 5040) | function SetConstants($aStart,$aLen) {
method CalcTicks (line 5067) | function CalcTicks($maxsteps,$min,$max,$a,$b,$majend=true) {
method CalcTicksFreeze (line 5109) | function CalcTicksFreeze($maxsteps,$min,$max,$a,$b) {
method IntCalcTicks (line 5134) | function IntCalcTicks($maxsteps,$min,$max,$a,$majend=true) {
method IntCalcTicksFreeze (line 5182) | function IntCalcTicksFreeze($maxsteps,$min,$max,$a) {
method MatchMin3 (line 5212) | function MatchMin3($a,$b,$c,$weight) {
method __get (line 5227) | function __get($name) {
method __set (line 5237) | function __set($name, $value) {
class DisplayValue (line 5247) | class DisplayValue {
method __construct (line 5259) | function __construct() {
method Show (line 5263) | function Show($aFlag=true) {
method SetColor (line 5267) | function SetColor($aColor,$aNegcolor='') {
method SetFont (line 5272) | function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=8) {
method ApplyFont (line 5278) | function ApplyFont($aImg) {
method SetMargin (line 5282) | function SetMargin($aMargin) {
method SetAngle (line 5286) | function SetAngle($aAngle) {
method SetAlign (line 5290) | function SetAlign($aHAlign,$aVAlign='') {
method SetFormat (line 5295) | function SetFormat($aFormat,$aNegFormat='') {
method SetFormatCallback (line 5300) | function SetFormatCallback($aFunc) {
method HideZero (line 5304) | function HideZero($aFlag=true) {
method Stroke (line 5308) | function Stroke($img,$aVal,$x,$y) {
class Plot (line 5381) | class Plot {
method __construct (line 5400) | function __construct($aDatay,$aDatax=false) {
method Stroke (line 5428) | function Stroke($aImg,$aXScale,$aYScale) {
method HideLegend (line 5432) | function HideLegend($f=true) {
method DoLegend (line 5436) | function DoLegend($graph) {
method StrokeDataValue (line 5441) | function StrokeDataValue($img,$aVal,$x,$y) {
method SetCSIMTargets (line 5446) | function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') {
method GetCSIMareas (line 5453) | function GetCSIMareas() {
method PreStrokeAdjust (line 5459) | function PreStrokeAdjust($aGraph) {
method PreScaleSetup (line 5468) | function PreScaleSetup($aGraph) {
method Min (line 5473) | function Min() {
method Max (line 5507) | function Max() {
method SetColor (line 5541) | function SetColor($aColor) {
method SetLegend (line 5545) | function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') {
method SetWeight (line 5552) | function SetWeight($aWeight) {
method SetLineWeight (line 5556) | function SetLineWeight($aWeight=1) {
method SetCenter (line 5560) | function SetCenter($aCenter=true) {
method StrokeMargin (line 5566) | function StrokeMargin($aImg) {
method Legend (line 5571) | function Legend($aGraph) {
method Clear (line 5577) | function Clear() {
class ColorFactory (line 5588) | class ColorFactory {
method getColor (line 5627) | static function getColor() {
FILE: include/jpgraph/jpgraph_antispam-digits.php
class HandDigits (line 11) | class HandDigits {
method __construct (line 15) | function __construct() {
class AntiSpam (line 155) | class AntiSpam {
method __construct (line 159) | function __construct($aNumber='') {
method Rand (line 163) | function Rand($aLen) {
method Stroke (line 172) | function Stroke() {
FILE: include/jpgraph/jpgraph_antispam.php
class HandDigits (line 11) | class HandDigits {
method __construct (line 15) | function __construct() {
class AntiSpam (line 546) | class AntiSpam {
method __construct (line 551) | function __construct($aData='') {
method Set (line 556) | function Set($aData) {
method Rand (line 560) | function Rand($aLen) {
method Stroke (line 579) | function Stroke() {
FILE: include/jpgraph/jpgraph_bar.php
class BarPlot (line 30) | class BarPlot extends Plot {
method __construct (line 49) | function __construct($datay,$datax=false) {
method SetShadow (line 58) | function SetShadow($aColor="black",$aHSize=3,$aVSize=3,$aShow=true) {
method Set3D (line 68) | function Set3D($aHSize=3,$aVSize=3,$aShow=true) {
method SetYMin (line 77) | function SetYMin($aYStartValue) {
method SetYBase (line 83) | function SetYBase($aYStartValue) {
method RotatePattern (line 91) | function RotatePattern($aPat,$aRotate=true) {
method Legend (line 101) | function Legend($graph) {
method PreStrokeAdjust (line 138) | function PreStrokeAdjust($graph) {
method Min (line 176) | function Min() {
method Max (line 182) | function Max() {
method SetWidth (line 189) | function SetWidth($aWidth) {
method SetAbsWidth (line 201) | function SetAbsWidth($aWidth) {
method SetAlign (line 205) | function SetAlign($aAlign) {
method SetNoFill (line 209) | function SetNoFill() {
method SetFillColor (line 215) | function SetFillColor($aColor) {
method SetFillGradient (line 226) | function SetFillGradient($aFromColor,$aToColor=null,$aStyle=null) {
method SetValuePos (line 233) | function SetValuePos($aPos) {
method SetPattern (line 237) | function SetPattern($aPattern, $aColor='black'){
method _SetPatternHelper (line 264) | function _SetPatternHelper($aPattern, &$aPatternValue, &$aDensity){
method Clear (line 317) | function Clear() {
method Stroke (line 323) | function Stroke($img,$xscale,$yscale) {
class GroupBarPlot (line 690) | class GroupBarPlot extends BarPlot {
method __construct (line 695) | function __construct($plots) {
method Legend (line 713) | function Legend($graph) {
method Min (line 725) | function Min() {
method Max (line 736) | function Max() {
method GetCSIMareas (line 747) | function GetCSIMareas() {
method Stroke (line 757) | function Stroke($img,$xscale,$yscale) {
class AccBarPlot (line 782) | class AccBarPlot extends BarPlot {
method __construct (line 787) | function __construct($plots) {
method Legend (line 817) | function Legend($graph) {
method Max (line 829) | function Max() {
method Min (line 867) | function Min() {
method Stroke (line 900) | function Stroke($img,$xscale,$yscale) {
FILE: include/jpgraph/jpgraph_canvas.php
class CanvasGraph (line 20) | class CanvasGraph extends Graph {
method __construct (line 23) | function __construct($aWidth=300,$aHeight=200,$aCachedName="",$timeout...
method InitFrame (line 30) | function InitFrame() {
method Stroke (line 35) | function Stroke($aStrokeFileName="") {
FILE: include/jpgraph/jpgraph_canvtools.php
class CanvasScale (line 24) | class CanvasScale {
method __construct (line 29) | function __construct($graph,$xmin=0,$xmax=10,$ymin=0,$ymax=10) {
method Set (line 39) | function Set($xmin=0,$xmax=10,$ymin=0,$ymax=10) {
method Get (line 46) | function Get() {
method Translate (line 50) | function Translate($x,$y) {
method TranslateX (line 56) | function TranslateX($x) {
method TranslateY (line 61) | function TranslateY($y) {
class Shape (line 73) | class Shape {
method __construct (line 76) | function __construct($aGraph,$scale) {
method SetColor (line 82) | function SetColor($aColor) {
method Line (line 86) | function Line($x1,$y1,$x2,$y2) {
method SetLineWeight (line 92) | function SetLineWeight($aWeight) {
method Polygon (line 96) | function Polygon($p,$aClosed=false) {
method FilledPolygon (line 105) | function FilledPolygon($p) {
method Bezier (line 121) | function Bezier($p,$aSteps=40) {
method Rectangle (line 148) | function Rectangle($x1,$y1,$x2,$y2) {
method FilledRectangle (line 154) | function FilledRectangle($x1,$y1,$x2,$y2) {
method Circle (line 160) | function Circle($x1,$y1,$r) {
method FilledCircle (line 169) | function FilledCircle($x1,$y1,$r) {
method RoundedRectangle (line 178) | function RoundedRectangle($x1,$y1,$x2,$y2,$r=null) {
method FilledRoundedRectangle (line 191) | function FilledRoundedRectangle($x1,$y1,$x2,$y2,$r=null) {
method ShadowRectangle (line 204) | function ShadowRectangle($x1,$y1,$x2,$y2,$fcolor=false,$shadow_width=n...
method SetTextAlign (line 214) | function SetTextAlign($halign,$valign="bottom") {
method StrokeText (line 218) | function StrokeText($x1,$y1,$txt,$dir=0,$paragraph_align="left") {
method IndentedRectangle (line 226) | function IndentedRectangle($xt,$yt,$w,$h,$iw=0,$ih=0,$aCorner=3,$aFill...
class CanvasRectangleText (line 383) | class CanvasRectangleText {
method __construct (line 390) | function __construct($aTxt='',$xl=0,$yt=0,$w=0,$h=0) {
method SetShadow (line 398) | function SetShadow($aColor='gray',$aWidth=3) {
method SetFont (line 403) | function SetFont($FontFam,$aFontStyle,$aFontSize=12) {
method SetTxt (line 407) | function SetTxt($aTxt) {
method ParagraphAlign (line 411) | function ParagraphAlign($aParaAlign) {
method SetFillColor (line 415) | function SetFillColor($aFillColor) {
method SetAutoMargin (line 419) | function SetAutoMargin($aMargin) {
method SetColor (line 423) | function SetColor($aColor) {
method SetFontColor (line 427) | function SetFontColor($aColor) {
method SetPos (line 431) | function SetPos($xl=0,$yt=0,$w=0,$h=0) {
method Pos (line 438) | function Pos($xl=0,$yt=0,$w=0,$h=0) {
method Set (line 445) | function Set($aTxt,$xl,$yt,$w=0,$h=0) {
method SetCornerRadius (line 453) | function SetCornerRadius($aRad=5) {
method Stroke (line 457) | function Stroke($aImg,$scale) {
FILE: include/jpgraph/jpgraph_contour.php
class Contour (line 22) | class Contour {
method __construct (line 45) | function __construct($aMatrix,$aIsobars=10, $aColors=null) {
method SetInvert (line 91) | function SetInvert($aFlg=true) {
method getMinMaxVal (line 100) | function getMinMaxVal() {
method resetEdgeMatrices (line 114) | function resetEdgeMatrices() {
method isobarHCrossing (line 132) | function isobarHCrossing($aRow,$aCol,$aIsobar) {
method isobarVCrossing (line 158) | function isobarVCrossing($aRow,$aCol,$aIsobar) {
method determineIsobarEdgeCrossings (line 182) | function determineIsobarEdgeCrossings($aIsobar) {
method getCrossingCoord (line 214) | function getCrossingCoord($aRow,$aCol,$aEdgeDir,$aIsobarVal) {
method adjustDataPointValues (line 252) | function adjustDataPointValues() {
method UseHighContrastColor (line 273) | function UseHighContrastColor($aFlg=true,$aBW=false) {
method CalculateColors (line 282) | function CalculateColors() {
method getIsobars (line 316) | function getIsobars() {
class ContourPlot (line 389) | class ContourPlot extends Plot {
method __construct (line 418) | function __construct($aDataMatrix, $aIsobar=10, $aFactor=1, $aInvert=f...
method SetInvert (line 450) | function SetInvert($aFlg=true) {
method SetIsobarColors (line 460) | function SetIsobarColors($aColorArray) {
method ShowLegend (line 470) | function ShowLegend($aFlg=true) {
method Invertlegend (line 479) | function Invertlegend($aFlg=true) {
method Min (line 486) | function Min() {
method Max (line 493) | function Max() {
method Legend (line 501) | function Legend($aGraph) {
method PreScaleSetup (line 525) | function PreScaleSetup($aGraph) {
method UseHighContrastColor (line 542) | function UseHighContrastColor($aFlg=true,$aBW=false) {
method Stroke (line 555) | function Stroke($img,$xscale,$yscale) {
FILE: include/jpgraph/jpgraph_date.php
class DateScale (line 49) | class DateScale extends LinearScale {
method __construct (line 56) | function __construct($aMin=0,$aMax=0,$aType='x') {
method AdjDate (line 74) | function AdjDate($aTime,$aRound=0,$aYearType=false,$aMonthType=false,$...
method AdjStartDate (line 131) | function AdjStartDate($aTime,$aYearType=false,$aMonthType=false,$aDayT...
method AdjEndDate (line 139) | function AdjEndDate($aTime,$aYearType=false,$aMonthType=false,$aDayTyp...
method AdjTime (line 149) | function AdjTime($aTime,$aRound=0,$aHourType=false,$aMinType=false,$aS...
method AdjStartTime (line 213) | function AdjStartTime($aTime,$aHourType=false,$aMinType=false,$aSecTyp...
method AdjEndTime (line 222) | function AdjEndTime($aTime,$aHourType=false,$aMinType=false,$aSecType=...
method DoDateAutoScale (line 231) | function DoDateAutoScale($aStartTime,$aEndTime,$aDensity=0,$aAdjust=tr...
method SetDateFormat (line 377) | function SetDateFormat($aFormat) {
method AdjustForDST (line 382) | function AdjustForDST($aFlg=true) {
method SetDateAlign (line 387) | function SetDateAlign($aStartAlign,$aEndAlign=false) {
method SetTimeAlign (line 395) | function SetTimeAlign($aStartAlign,$aEndAlign=false) {
method AutoScale (line 404) | function AutoScale($img,$aStartTime,$aEndTime,$aNumSteps,$_adummy=fals...
FILE: include/jpgraph/jpgraph_errhandler.inc.php
class ErrMsgText (line 24) | class ErrMsgText {
method __construct (line 26) | function __construct() {
method Get (line 43) | function Get($errnbr,$a1=null,$a2=null,$a3=null,$a4=null,$a5=null) {
class JpGraphError (line 101) | class JpGraphError {
method Raise (line 105) | public static function Raise($aMsg,$aHalt=true){
method SetErrLocale (line 108) | public static function SetErrLocale($aLoc) {
method RaiseL (line 112) | public static function RaiseL($errnbr,$a1=null,$a2=null,$a3=null,$a4=n...
method SetImageFlag (line 115) | public static function SetImageFlag($aFlg=true) {
method GetImageFlag (line 118) | public static function GetImageFlag() {
method SetLogFile (line 121) | public static function SetLogFile($aFile) {
method GetLogFile (line 124) | public static function GetLogFile() {
method SetTitle (line 127) | public static function SetTitle($aTitle) {
method GetTitle (line 130) | public static function GetTitle() {
class JpGraphException (line 135) | class JpGraphException extends Exception {
method __construct (line 137) | public function __construct($message, $code = 0) {
method _toString (line 142) | public function _toString() {
method Stroke (line 146) | public function Stroke() {
method defaultHandler (line 158) | static public function defaultHandler(Throwable $exception) {
class JpGraphExceptionL (line 173) | class JpGraphExceptionL extends JpGraphException {
method __construct (line 175) | public function __construct($errcode,$a1=null,$a2=null,$a3=null,$a4=nu...
class JpGraphErrObject (line 194) | class JpGraphErrObject {
method __construct (line 200) | function __construct() {
method SetTitle (line 204) | function SetTitle($aTitle) {
method SetStrokeDest (line 208) | function SetStrokeDest($aDest) {
method Raise (line 213) | function Raise($aMsg,$aHalt=false) {
class JpGraphErrObjectImg (line 246) | class JpGraphErrObjectImg extends JpGraphErrObject {
method __construct (line 248) | function __construct() {
method Raise (line 253) | function Raise($aMsg,$aHalt=true) {
FILE: include/jpgraph/jpgraph_error.php
class ErrorPlot (line 17) | class ErrorPlot extends Plot {
method __construct (line 22) | function __construct($datay,$datax=false) {
method PreStrokeAdjust (line 30) | function PreStrokeAdjust($graph) {
method Stroke (line 43) | function Stroke($img,$xscale,$yscale) {
class ErrorLinePlot (line 87) | class ErrorLinePlot extends ErrorPlot {
method __construct (line 91) | function __construct($datay,$datax=false) {
method Legend (line 103) | function Legend($graph) {
method Stroke (line 109) | function Stroke($img,$xscale,$yscale) {
class LineErrorPlot (line 120) | class LineErrorPlot extends ErrorPlot {
method __construct (line 125) | function __construct($datay,$datax=false) {
method Legend (line 143) | function Legend($graph) {
method Stroke (line 149) | function Stroke($img,$xscale,$yscale) {
FILE: include/jpgraph/jpgraph_flags.php
class FlagImages (line 19) | class FlagImages {
method __construct (line 270) | function __construct($aSize=FLAGSIZE1) {
method GetNum (line 288) | function GetNum() {
method GetImgByName (line 292) | function GetImgByName($aName,&$outFullName) {
method GetImgByIdx (line 297) | function GetImgByIdx($aIdx) {
method GetIdxByOrdinal (line 308) | function GetIdxByOrdinal($aOrd,&$outFullName) {
method GetIdxByName (line 333) | function GetIdxByName($aName,&$outFullName) {
FILE: include/jpgraph/jpgraph_gantt.php
function array_fill (line 129) | function array_fill($iStart, $iLen, $vValue) {
class GanttActivityInfo (line 142) | class GanttActivityInfo {
method __construct (line 155) | function __construct() {
method Hide (line 159) | function Hide($aF=true) {
method Show (line 163) | function Show($aF=true) {
method SetFont (line 168) | function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) {
method SetStyle (line 174) | function SetStyle($aStyle) {
method SetColumnMargin (line 178) | function SetColumnMargin($aLeft,$aRight) {
method SetFontColor (line 183) | function SetFontColor($aFontColor) {
method SetColor (line 187) | function SetColor($aColor) {
method SetBackgroundColor (line 191) | function SetBackgroundColor($aColor) {
method SetColTitles (line 195) | function SetColTitles($aTitles,$aWidth=null) {
method SetMinColWidth (line 200) | function SetMinColWidth($aWidths) {
method GetWidth (line 214) | function GetWidth($aImg) {
method GetColStart (line 238) | function GetColStart($aImg,&$aStart,$aAddLeftMargin=false) {
method SetHeaderAlign (line 248) | function SetHeaderAlign($aAlign) {
method Stroke (line 252) | function Stroke($aImg,$aXLeft,$aYTop,$aXRight,$aYBottom,$aUseTextHeigh...
class GanttGraph (line 330) | class GanttGraph extends Graph {
method __construct (line 345) | function __construct($aWidth=0,$aHeight=0,$aCachedName="",$aTimeOut=0,...
method SetSimpleFont (line 372) | function SetSimpleFont($aFont,$aSize) {
method SetSimpleStyle (line 377) | function SetSimpleStyle($aBand,$aColor,$aBkgColor) {
method CreateSimple (line 384) | function CreateSimple($data,$constrains=array(),$progress=array()) {
method SetZoomFactor (line 475) | function SetZoomFactor($aZoom) {
method ShowHeaders (line 481) | function ShowHeaders($aFlg) {
method SetLabelVMarginFactor (line 487) | function SetLabelVMarginFactor($aVal) {
method SetVMarginFactor (line 492) | function SetVMarginFactor($aVal) {
method Add (line 498) | function Add($aObject) {
method StrokeTexts (line 526) | function StrokeTexts() {
method SetScale (line 545) | function SetScale($aAxisType,$aYMin=1,$aYMax=1,$aXMin=1,$aXMax=1) {
method SetDateRange (line 552) | function SetDateRange($aStart,$aEnd) {
method GetMaxLabelWidth (line 566) | function GetMaxLabelWidth() {
method GetMaxLabelHeight (line 586) | function GetMaxLabelHeight() {
method GetMaxBarAbsHeight (line 601) | function GetMaxBarAbsHeight() {
method GetBarMaxLineNumber (line 614) | function GetBarMaxLineNumber() {
method GetBarMinMax (line 627) | function GetBarMinMax() {
method AutoSize (line 659) | function AutoSize() {
method GetMaxActInfoColWidth (line 931) | function GetMaxActInfoColWidth() {
method Stroke (line 951) | function Stroke($aStrokeFileName="") {
method StrokeConstrains (line 1058) | function StrokeConstrains() {
method GetCSIMAreas (line 1142) | function GetCSIMAreas() {
class PredefIcons (line 1175) | class PredefIcons {
method GetLen (line 1178) | function GetLen() {
method GetImg (line 1182) | function GetImg($aIdx) {
method __construct (line 1190) | function __construct() {
class IconImage (line 1480) | class IconImage {
method __construct (line 1486) | function __construct($aIcon,$aScale=1) {
method GetWidth (line 1504) | function GetWidth() {
method GetHeight (line 1508) | function GetHeight() {
method SetAlign (line 1512) | function SetAlign($aX='left',$aY='center') {
method Stroke (line 1517) | function Stroke($aImg,$x,$y) {
class TextProperty (line 1545) | class TextProperty {
method __construct (line 1556) | function __construct($aTxt='') {
method Set (line 1562) | function Set($aTxt) {
method SetCSIMTarget (line 1566) | function SetCSIMTarget($aTarget,$aAltText='',$aWinTarget='') {
method SetCSIMAlt (line 1581) | function SetCSIMAlt($aAltText) {
method SetColor (line 1588) | function SetColor($aColor) {
method HasTabs (line 1592) | function HasTabs() {
method GetNbrTabs (line 1602) | function GetNbrTabs() {
method Align (line 1612) | function Align($aHAlign,$aVAlign="bottom") {
method SetAlign (line 1618) | function SetAlign($aHAlign,$aVAlign="bottom") {
method SetFont (line 1624) | function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) {
method SetColumnFonts (line 1630) | function SetColumnFonts($aFontArray) {
method IsColumns (line 1639) | function IsColumns() {
method GetWidth (line 1646) | function GetWidth($aImg,$aUseTabs=false,$aTabExtraMargin=1.1) {
method GetColWidth (line 1703) | function GetColWidth($aImg,$aMargin=0) {
method GetHeight (line 1734) | function GetHeight($aImg) {
method Show (line 1755) | function Show($aShow=true) {
method Stroke (line 1762) | function Stroke($aImg,$aX,$aY) {
class HeaderProperty (line 1832) | class HeaderProperty {
method __construct (line 1846) | function __construct() {
method Show (line 1852) | function Show($aShow=true) {
method SetIntervall (line 1856) | function SetIntervall($aInt) {
method SetInterval (line 1860) | function SetInterval($aInt) {
method GetIntervall (line 1864) | function GetIntervall() {
method SetFont (line 1868) | function SetFont($aFFamily,$aFStyle=FS_NORMAL,$aFSize=10) {
method SetFontColor (line 1874) | function SetFontColor($aColor) {
method GetFontHeight (line 1878) | function GetFontHeight($aImg) {
method GetFontWidth (line 1883) | function GetFontWidth($aImg) {
method GetStrWidth (line 1888) | function GetStrWidth($aImg,$aStr) {
method SetStyle (line 1893) | function SetStyle($aStyle) {
method SetBackgroundColor (line 1897) | function SetBackgroundColor($aColor) {
method SetFrameWeight (line 1901) | function SetFrameWeight($aWeight) {
method SetFrameColor (line 1905) | function SetFrameColor($aColor) {
method SetWeekendColor (line 1910) | function SetWeekendColor($aColor) {
method SetSundayFontColor (line 1915) | function SetSundayFontColor($aColor) {
method SetTitleVertMargin (line 1919) | function SetTitleVertMargin($aMargin) {
method SetLabelFormatString (line 1923) | function SetLabelFormatString($aStr) {
method SetFormatString (line 1927) | function SetFormatString($aStr) {
class GanttScale (line 1941) | class GanttScale {
method __construct (line 1966) | function __construct($aImg) {
method ShowHeaders (line 2012) | function ShowHeaders($aFlg) {
method UseWeekendBackground (line 2031) | function UseWeekendBackground($aShow) {
method IsRangeSet (line 2036) | function IsRangeSet() {
method SetVertLayout (line 2041) | function SetVertLayout($aLayout) {
method SetDateLocale (line 2046) | function SetDateLocale($aLocale) {
method GetNumberOfDays (line 2051) | function GetNumberOfDays() {
method GetPlotWidth (line 2056) | function GetPlotWidth() {
method SetLabelWidth (line 2064) | function SetLabelWidth($aLabelWidth) {
method SetWeekStart (line 2070) | function SetWeekStart($aStartDay) {
method IsDisplayMinute (line 2078) | function IsDisplayMinute() {
method IsDisplayHour (line 2083) | function IsDisplayHour() {
method IsDisplayDay (line 2089) | function IsDisplayDay() {
method IsDisplayWeek (line 2094) | function IsDisplayWeek() {
method IsDisplayMonth (line 2099) | function IsDisplayMonth() {
method IsDisplayYear (line 2104) | function IsDisplayYear() {
method SetVertSpacing (line 2109) | function SetVertSpacing($aSpacing) {
method SetRange (line 2115) | function SetRange($aMin,$aMax) {
method AdjustStartEndDay (line 2123) | function AdjustStartEndDay() {
method SetTableTitleBackground (line 2157) | function SetTableTitleBackground($aColor) {
method GetHeaderHeight (line 2165) | function GetHeaderHeight() {
method GetDayWidth (line 2196) | function GetDayWidth() {
method GetHourWidth (line 2201) | function GetHourWidth() {
method GetMinuteWidth (line 2205) | function GetMinuteWidth() {
method GetNumDaysInYear (line 2210) | function GetNumDaysInYear($aYear) {
method GetWeekNbr (line 2218) | function GetWeekNbr($aDate,$aSunStart=true) {
method IsLeap (line 2255) | function IsLeap($aYear) {
method GetYear (line 2265) | function GetYear($aDate) {
method GetNumDaysInMonth (line 2270) | function GetNumDaysInMonth($aMonth,$aYear) {
method GetMonthDayNbr (line 2280) | function GetMonthDayNbr($aDate) {
method GetYearDayNbr (line 2285) | function GetYearDayNbr($aDate) {
method GetMonthNbr (line 2290) | function GetMonthNbr($aDate) {
method TranslateDate (line 2295) | function TranslateDate($aDate) {
method TranslateVertPos (line 2321) | function TranslateVertPos($aPos,$atTop=false) {
method GetVertSpacing (line 2342) | function GetVertSpacing() {
method NormalizeDate (line 2347) | function NormalizeDate($aDate) {
method TimeToMinutes (line 2367) | function TimeToMinutes($aTimeString) {
method StrokeMinutes (line 2384) | function StrokeMinutes($aYCoord,$getHeight=false) {
method StrokeHours (line 2479) | function StrokeHours($aYCoord,$getHeight=false) {
method StrokeDays (line 2567) | function StrokeDays($aYCoord,$getHeight=false) {
method StrokeWeeks (line 2686) | function StrokeWeeks($aYCoord,$getHeight=false) {
method GetMonthLabel (line 2763) | function GetMonthLabel($aMonthNbr,$year) {
method StrokeMonths (line 2793) | function StrokeMonths($aYCoord,$getHeight=false) {
method StrokeYears (line 2860) | function StrokeYears($aYCoord,$getHeight=false) {
method StrokeTableHeaders (line 2919) | function StrokeTableHeaders($aYBottom) {
method Stroke (line 2969) | function Stroke() {
class GanttConstraint (line 3021) | class GanttConstraint {
method __construct (line 3030) | function __construct($aRow,$aType,$aColor,$aArrowSize,$aArrowType){
class GanttPlotObject (line 3044) | class GanttPlotObject {
method __construct (line 3054) | function __construct() {
method GetCSIMArea (line 3060) | function GetCSIMArea() {
method SetCSIMTarget (line 3064) | function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') {
method SetCSIMAlt (line 3081) | function SetCSIMAlt($aAlt) {
method SetConstrain (line 3090) | function SetConstrain($aRow,$aType,$aColor='black',$aArrowSize=ARROW_S...
method SetConstrainPos (line 3094) | function SetConstrainPos($xt,$yt,$xb,$yb) {
method GetMinDate (line 3098) | function GetMinDate() {
method GetMaxDate (line 3102) | function GetMaxDate() {
method SetCaptionMargin (line 3106) | function SetCaptionMargin($aMarg) {
method GetAbsHeight (line 3110) | function GetAbsHeight($aImg) {
method GetLineNbr (line 3114) | function GetLineNbr() {
method SetLabelLeftMargin (line 3118) | function SetLabelLeftMargin($aOff) {
method StrokeActInfo (line 3122) | function StrokeActInfo($aImg,$aScale,$aYPos) {
class Progress (line 3134) | class Progress {
method Set (line 3140) | function Set($aProg) {
method SetPattern (line 3148) | function SetPattern($aPattern,$aColor="blue",$aDensity=98) {
method SetFillColor (line 3154) | function SetFillColor($aColor) {
method SetHeight (line 3158) | function SetHeight($aHeight) {
class HorizontalGridLine (line 3170) | class HorizontalGridLine {
method __construct (line 3177) | function __construct() {
method Show (line 3183) | function Show($aShow=true) {
method SetRowFillColor (line 3187) | function SetRowFillColor($aColor1,$aColor2='') {
method SetStart (line 3192) | function SetStart($aStart) {
method Stroke (line 3196) | function Stroke($aImg,$aScale) {
class GanttBar (line 3249) | class GanttBar extends GanttPlotObject {
method __construct (line 3260) | function __construct($aPos,$aLabel,$aStart,$aEnd,$aCaption="",$aHeight...
method SetShadow (line 3291) | function SetShadow($aShadow=true,$aColor="gray") {
method SetBreakStyle (line 3296) | function SetBreakStyle($aFlg=true,$aLineStyle='dotted',$aLineWeight=1) {
method GetMaxDate (line 3302) | function GetMaxDate() {
method SetHeight (line 3306) | function SetHeight($aHeight) {
method SetColor (line 3310) | function SetColor($aColor) {
method SetFillColor (line 3314) | function SetFillColor($aColor) {
method GetAbsHeight (line 3318) | function GetAbsHeight($aImg) {
method SetPattern (line 3333) | function SetPattern($aPattern,$aColor="blue",$aDensity=95) {
method Stroke (line 3339) | function Stroke($aImg,$aScale) {
class MileStone (line 3517) | class MileStone extends GanttPlotObject {
method __construct (line 3522) | function __construct($aVPos,$aLabel,$aDate,$aCaption="") {
method GetAbsHeight (line 3541) | function GetAbsHeight($aImg) {
method Stroke (line 3545) | function Stroke($aImg,$aScale) {
class TextPropertyBelow (line 3612) | class TextPropertyBelow extends TextProperty {
method __construct (line 3613) | function __construct($aTxt='') {
method GetColWidth (line 3617) | function GetColWidth($aImg,$aMargin=0) {
class GanttVLine (line 3624) | class GanttVLine extends GanttPlotObject {
method __construct (line 3631) | function __construct($aDate,$aTitle="",$aColor="darkred",$aWeight=2,$a...
method SetRowSpan (line 3648) | function SetRowSpan($aStart, $aEnd=-1) {
method SetDayOffset (line 3653) | function SetDayOffset($aOff=0.5) {
method SetTitleMargin (line 3661) | function SetTitleMargin($aMarg) {
method SetWeight (line 3665) | function SetWeight($aWeight) {
method Stroke (line 3669) | function Stroke($aImg,$aScale) {
class LinkArrow (line 3701) | class LinkArrow {
method __construct (line 3708) | function __construct($x,$y,$aDirection,$aType=ARROWT_SOLID,$aSize=ARRO...
method SetColor (line 3716) | function SetColor($aColor) {
method SetSize (line 3720) | function SetSize($aSize) {
method SetType (line 3724) | function SetType($aType) {
method Stroke (line 3728) | function Stroke($aImg) {
class GanttLink (line 3773) | class GanttLink {
method __construct (line 3779) | function __construct($x1=0,$y1=0,$x2=0,$y2=0) {
method SetPos (line 3786) | function SetPos($x1,$y1,$x2,$y2) {
method SetPath (line 3793) | function SetPath($aPath) {
method SetColor (line 3797) | function SetColor($aColor) {
method SetArrow (line 3801) | function SetArrow($aSize,$aType=ARROWT_SOLID) {
method SetWeight (line 3806) | function SetWeight($aWeight) {
method Stroke (line 3810) | function Stroke($aImg) {
FILE: include/jpgraph/jpgraph_gb2312.php
class GB2312toUTF8 (line 12) | class GB2312toUTF8 {
method gb2utf8 (line 1509) | function gb2utf8($gb) {
method u2utf8 (line 1527) | function u2utf8($c) {
FILE: include/jpgraph/jpgraph_gradient.php
class Gradient (line 31) | class Gradient {
method __construct (line 35) | function __construct(&$img) {
method SetNumColors (line 40) | function SetNumColors($aNum) {
method FilledRectangle (line 52) | function FilledRectangle($xl,$yt,$xr,$yb,$from_color,$to_color,$style=...
method FilledFlatPolygon (line 335) | function FilledFlatPolygon($pts,$from_color,$to_color) {
method GetColArray (line 399) | function GetColArray($from_color,$to_color,$arr_size,&$colors,$numcols...
FILE: include/jpgraph/jpgraph_iconplot.php
class IconPlot (line 17) | class IconPlot {
method __construct (line 27) | function __construct($aFile="",$aX=0,$aY=0,$aScale=1.0,$aMix=100) {
method SetCountryFlag (line 38) | function SetCountryFlag($aFlag,$aX=0,$aY=0,$aScale=1.0,$aMix=100,$aStd...
method SetPos (line 50) | function SetPos($aX,$aY) {
method CreateFromString (line 55) | function CreateFromString($aStr) {
method SetScalePos (line 59) | function SetScalePos($aX,$aY) {
method SetScale (line 64) | function SetScale($aScale) {
method SetMix (line 68) | function SetMix($aMix) {
method SetAnchor (line 75) | function SetAnchor($aXAnchor='left',$aYAnchor='center') {
method PreStrokeAdjust (line 84) | function PreStrokeAdjust($aGraph) {
method DoLegend (line 88) | function DoLegend($aGraph) {
method Max (line 92) | function Max() {
method GetMaxDate (line 100) | function GetMaxDate() { return false; }
method GetMinDate (line 101) | function GetMinDate() { return false; }
method GetLineNbr (line 102) | function GetLineNbr() { return 0; }
method GetAbsHeight (line 103) | function GetAbsHeight() {return 0; }
method Min (line 106) | function Min() {
method StrokeMargin (line 110) | function StrokeMargin(&$aImg) {
method Stroke (line 114) | function Stroke($aImg,$axscale=null,$ayscale=null) {
method StrokeWithScale (line 118) | function StrokeWithScale($aImg,$axscale,$ayscale) {
method GetWidthHeight (line 130) | function GetWidthHeight() {
method _Stroke (line 135) | function _Stroke($aImg,$x=null,$y=null,$aReturnWidthHeight=false) {
FILE: include/jpgraph/jpgraph_imgtrans.php
class ImgTrans (line 15) | class ImgTrans {
method __construct (line 18) | function __construct($aGdImg) {
method _TransVert3D (line 27) | function _TransVert3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3...
method _TransHor3D (line 109) | function _TransHor3D($aGdImg,$aHorizon=100,$aSkewDist=120,$aDir=SKEW3D...
method Skew3D (line 207) | function Skew3D($aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOWN,$aHiQua...
method _Skew3D (line 212) | function _Skew3D($aGdImg,$aHorizon=120,$aSkewDist=150,$aDir=SKEW3D_DOW...
FILE: include/jpgraph/jpgraph_led.php
class DigitalLED74 (line 44) | class DigitalLED74
method __construct (line 209) | function __construct($aRadius = 2, $aMargin= 0.6) {
method SetSupersampling (line 214) | function SetSupersampling($aSuperSampling = 2) {
method _GetLED (line 218) | function _GetLED($aLedIdx, $aColor = 0) {
method Stroke (line 268) | function Stroke($aValStr, $aColor = 0, $aFileName = '') {
method StrokeNumber (line 273) | function StrokeNumber($aValStr, $aColor = 0, $aFileName = '') {
FILE: include/jpgraph/jpgraph_legend.inc.php
class Legend (line 22) | class Legend {
method __construct (line 48) | function __construct() {
method Hide (line 53) | function Hide($aHide=true) {
method SetHColMargin (line 57) | function SetHColMargin($aXMarg) {
method SetVColMargin (line 61) | function SetVColMargin($aSpacing) {
method SetLeftMargin (line 65) | function SetLeftMargin($aXMarg) {
method SetLineSpacing (line 70) | function SetLineSpacing($aSpacing) {
method SetShadow (line 74) | function SetShadow($aShow='gray',$aWidth=4) {
method SetMarkAbsSize (line 85) | function SetMarkAbsSize($aSize) {
method SetMarkAbsVSize (line 90) | function SetMarkAbsVSize($aSize) {
method SetMarkAbsHSize (line 94) | function SetMarkAbsHSize($aSize) {
method SetLineWeight (line 98) | function SetLineWeight($aWeight) {
method SetFrameWeight (line 102) | function SetFrameWeight($aWeight) {
method SetLayout (line 106) | function SetLayout($aDirection=LEGEND_VERT) {
method SetColumns (line 110) | function SetColumns($aCols) {
method SetReverse (line 114) | function SetReverse($f=true) {
method SetColor (line 119) | function SetColor($aFontColor,$aColor='black') {
method SetFont (line 124) | function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) {
method SetPos (line 130) | function SetPos($aX,$aY,$aHAlign='right',$aVAlign='top') {
method SetAbsPos (line 134) | function SetAbsPos($aX,$aY,$aHAlign='right',$aVAlign='top') {
method Pos (line 141) | function Pos($aX,$aY,$aHAlign='right',$aVAlign='top') {
method SetFillColor (line 151) | function SetFillColor($aColor) {
method Clear (line 155) | function Clear() {
method Add (line 159) | function Add($aTxt,$aColor,$aPlotmark='',$aLinestyle=0,$csimtarget='',...
method GetCSIMAreas (line 163) | function GetCSIMAreas() {
method SetBackgroundGradient (line 167) | function SetBackgroundGradient($aFrom='navy',$aTo='silver',$aGradType=...
method HasItems (line 173) | function HasItems() {
method Stroke (line 177) | function Stroke($aImg) {
FILE: include/jpgraph/jpgraph_line.php
class LinePlot (line 24) | class LinePlot extends Plot{
method __construct (line 38) | function __construct($datay,$datax=false) {
method SetFilled (line 47) | function SetFilled($aFlg=true) {
method SetBarCenter (line 51) | function SetBarCenter($aFlag=true) {
method SetStyle (line 55) | function SetStyle($aStyle) {
method SetStepStyle (line 59) | function SetStepStyle($aFlag=true) {
method SetColor (line 63) | function SetColor($aColor) {
method SetFillFromYMin (line 67) | function SetFillFromYMin($f=true) {
method SetFillFromYMax (line 71) | function SetFillFromYMax($f=true) {
method SetFillColor (line 75) | function SetFillColor($aColor,$aFilled=true) {
method SetFillGradient (line 81) | function SetFillGradient($aFromColor,$aToColor,$aNumColors=100,$aFille...
method Legend (line 89) | function Legend($graph) {
method AddArea (line 109) | function AddArea($aMin=0,$aMax=0,$aFilled=LP_AREA_NOT_FILLED,$aColor="...
method PreStrokeAdjust (line 120) | function PreStrokeAdjust($graph) {
method SetFastStroke (line 139) | function SetFastStroke($aFlg=true) {
method FastStroke (line 143) | function FastStroke($img,$xscale,$yscale,$aStartPoint=0,$exist_x=true) {
method Stroke (line 184) | function Stroke($img,$xscale,$yscale) {
class AccLinePlot (line 470) | class AccLinePlot extends Plot {
method __construct (line 475) | function __construct($plots) {
method Legend (line 494) | function Legend($graph) {
method Max (line 500) | function Max() {
method Min (line 526) | function Min() {
method PreStrokeAdjust (line 554) | function PreStrokeAdjust($graph) {
method SetInterpolateMode (line 576) | function SetInterpolateMode($aIntMode) {
method LineInterpolate (line 583) | function LineInterpolate(&$aData) {
method Stroke (line 652) | function Stroke($img,$xscale,$yscale) {
FILE: include/jpgraph/jpgraph_log.php
class LogScale (line 19) | class LogScale extends LinearScale {
method __construct (line 24) | function __construct($min,$max,$type="y") {
method Translate (line 34) | function Translate($a) {
method RelTranslate (line 54) | function RelTranslate($a) {
method GetMinVal (line 70) | function GetMinVal() {
method GetMaxVal (line 79) | function GetMaxVal() {
method AutoScale (line 93) | function AutoScale($img,$min,$max,$maxsteps,$majend=true) {
class LogTicks (line 129) | class LogTicks extends Ticks{
method __construct (line 134) | function __construct() {
method IsSpecified (line 138) | function IsSpecified() {
method SetLabelLogType (line 142) | function SetLabelLogType($aType) {
method GetMajor (line 149) | function GetMajor() {
method SetTextLabelStart (line 153) | function SetTextLabelStart($aStart) {
method SetXLabelOffset (line 158) | function SetXLabelOffset($dummy) {
method Stroke (line 166) | function Stroke($img,$scale,$pos) {
FILE: include/jpgraph/jpgraph_meshinterpolate.inc.php
function doMeshInterpolate (line 17) | function doMeshInterpolate( &$aData, $aFactor ) {
class MeshInterpolate (line 26) | class MeshInterpolate {
method IntSquare (line 38) | function IntSquare( $aRow, $aCol, $aFactor ) {
method Linear (line 72) | function Linear( &$aData, $aIntFactor ) {
FILE: include/jpgraph/jpgraph_mgraph.php
class MGraph (line 16) | class MGraph {
method __construct (line 38) | function __construct($aWidth=NULL,$aHeight=NULL,$aCachedName='',$aTime...
method SetFillColor (line 78) | function SetFillColor($aColor) {
method SetFrame (line 83) | function SetFrame($aFlg,$aColor='black',$aWeight=1) {
method SetBackgroundImageMix (line 90) | function SetBackgroundImageMix($aMix) {
method SetBackgroundImage (line 95) | function SetBackgroundImage($aFileName,$aCenter_aX=NULL,$aY=NULL) {
method _strokeBackgroundImage (line 129) | function _strokeBackgroundImage() {
method AddMix (line 164) | function AddMix($aGraph,$x=0,$y=0,$mix=100,$fx=0,$fy=0,$w=0,$h=0) {
method Add (line 168) | function Add($aGraph,$x=0,$y=0,$fx=0,$fy=0,$w=0,$h=0) {
method _gdImgHandle (line 172) | function _gdImgHandle($agdCanvas,$x,$y,$fx=0,$fy=0,$w=0,$h=0,$mix=100) {
method SetMargin (line 187) | function SetMargin($lm,$rm,$tm,$bm) {
method SetExpired (line 194) | function SetExpired($aFlg=true) {
method SetImgFormat (line 198) | function SetImgFormat($aFormat,$aQuality=75) {
method SetShadow (line 204) | function SetShadow($aShowShadow=true,$aShadowWidth=4,$aShadowColor='gr...
method StrokeTitle (line 212) | function StrokeTitle($image,$w,$h) {
method Stroke (line 271) | function Stroke($aFileName='') {
FILE: include/jpgraph/jpgraph_pie.php
class PiePlot (line 28) | class PiePlot {
method __construct (line 65) | function __construct($data) {
method SetCenter (line 77) | function SetCenter($x,$y=0.5) {
method SetGuideLines (line 83) | function SetGuideLines($aFlg=true,$aCurved=true,$aAlways=false) {
method SetGuideLinesAdjust (line 90) | function SetGuideLinesAdjust($aVFactor,$aRFactor=0.8) {
method SetColor (line 95) | function SetColor($aColor) {
method SetSliceColors (line 99) | function SetSliceColors($aColors) {
method SetShadow (line 103) | function SetShadow($aColor='darkgray',$aDropWidth=4) {
method SetCSIMTargets (line 108) | function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') {
method GetCSIMareas (line 116) | function GetCSIMareas() {
method AddSliceToCSIM (line 120) | function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) {
method SetTheme (line 185) | function SetTheme($aTheme) {
method ExplodeSlice (line 197) | function ExplodeSlice($e,$radius=20) {
method ExplodeAll (line 203) | function ExplodeAll($radius=20) {
method Explode (line 208) | function Explode($aExplodeArr) {
method SetStartAngle (line 216) | function SetStartAngle($aStart) {
method SetSize (line 230) | function SetSize($aSize) {
method SetLegends (line 239) | function SetLegends($aLegend) {
method SetLabels (line 244) | function SetLabels($aLabels,$aLblPosAdj="auto") {
method SetLabelPos (line 249) | function SetLabelPos($aLblPosAdj) {
method SetLabelType (line 254) | function SetLabelType($aType) {
method SetValueType (line 262) | function SetValueType($aType) {
method ShowBorder (line 267) | function ShowBorder($exterior=true,$interior=true) {
method Legend (line 273) | function Legend($graph) {
method AdjPercentage (line 354) | function AdjPercentage($aData,$aPrec=0) {
method Stroke (line 401) | function Stroke($img,$aaoption=0) {
method NormAngle (line 666) | function NormAngle($a) {
method Quadrant (line 672) | function Quadrant($a) {
method StrokeGuideLabels (line 684) | function StrokeGuideLabels($img,$xc,$yc,$radius) {
method StrokeAllLabels (line 951) | function StrokeAllLabels($img,$xc,$yc,$radius) {
method StrokeLabel (line 971) | function StrokeLabel($label,$img,$xc,$yc,$a,$r) {
method UsePlotThemeColors (line 1041) | function UsePlotThemeColors($flag = true) {
class PiePlotC (line 1052) | class PiePlotC extends PiePlot {
method __construct (line 1058) | function __construct($data,$aCenterTitle='') {
method SetMid (line 1064) | function SetMid($aTitle,$aColor='white',$aSize=0.5) {
method SetMidTitle (line 1071) | function SetMidTitle($aTitle) {
method SetMidSize (line 1075) | function SetMidSize($aSize) {
method SetMidColor (line 1079) | function SetMidColor($aColor) {
method SetMidCSIM (line 1083) | function SetMidCSIM($aTarget,$aAlt='',$aWinTarget='') {
method AddSliceToCSIM (line 1089) | function AddSliceToCSIM($i,$xc,$yc,$radius,$sa,$ea) {
method Stroke (line 1174) | function Stroke($img,$aaoption=0) {
method AddMiddleCSIM (line 1217) | function AddMiddleCSIM($xc,$yc,$r) {
method StrokeLabel (line 1231) | function StrokeLabel($label,$img,$xc,$yc,$a,$r) {
class PieGraph (line 1247) | class PieGraph extends Graph {
method __construct (line 1254) | function __construct($width=300,$height=200,$cachedName="",$timeout=0,...
method Add (line 1267) | function Add($aObj) {
method SetAntiAliasing (line 1304) | function SetAntiAliasing($aFlg=true) {
method SetColor (line 1308) | function SetColor($c) {
method DisplayCSIMAreas (line 1313) | function DisplayCSIMAreas() {
method Stroke (line 1345) | function Stroke($aStrokeFileName="") {
FILE: include/jpgraph/jpgraph_pie3d.php
class PiePlot3D (line 17) | class PiePlot3D extends PiePlot {
method __construct (line 25) | function __construct($data) {
method SetLegends (line 39) | function SetLegends($aLegend) {
method SetSliceColors (line 43) | function SetSliceColors($aColors) {
method Legend (line 47) | function Legend($aGraph) {
method SetCSIMTargets (line 52) | function SetCSIMTargets($aTargets,$aAlts='',$aWinTargets='') {
method SetEdge (line 60) | function SetEdge($aColor='black',$aWeight=1) {
method SetAngle (line 67) | function SetAngle($a) {
method Add3DSliceToCSIM (line 77) | function Add3DSliceToCSIM($i,$xc,$yc,$height,$width,$thick,$sa,$ea) { ...
method SetLabels (line 136) | function SetLabels($aLabels,$aLblPosAdj="auto") {
method SetLabelMargin (line 143) | function SetLabelMargin($m) {
method ShowLabelHint (line 148) | function ShowLabelHint($f=true) {
method SetLabelHintColor (line 153) | function SetLabelHintColor($c) {
method SetHeight (line 157) | function SetHeight($aHeight) {
method NormAngle (line 163) | function NormAngle($a) {
method Pie3DSlice (line 182) | function Pie3DSlice($img,$xc,$yc,$w,$h,$sa,$ea,$z,$fillcolor,$shadow=0...
method SetStartAngle (line 391) | function SetStartAngle($aStart) {
method Pie3D (line 399) | function Pie3D($aaoption,$img,$data,$colors,$xc,$yc,$d,$angle,$z,
method StrokeFullSliceFrame (line 719) | function StrokeFullSliceFrame($img,$xc,$yc,$sa,$ea,$w,$h,$z,$edgecolor...
method Stroke (line 779) | function Stroke($img,$aaoption=0) {
method StrokeLabels (line 875) | function StrokeLabels($label,$img,$a,$xp,$yp,$z) {
FILE: include/jpgraph/jpgraph_plotband.php
class Rectangle (line 23) | class Rectangle {
method __construct (line 26) | function __construct($aX,$aY,$aWidth,$aHeight) {
class RectPattern (line 43) | class RectPattern {
method __construct (line 51) | function __construct($aColor,$aWeight=1) {
method SetBackground (line 56) | function SetBackground($aBackgroundColor) {
method SetPos (line 60) | function SetPos($aRect) {
method ShowFrame (line 64) | function ShowFrame($aShow=true) {
method SetDensity (line 68) | function SetDensity($aDens) {
method Stroke (line 78) | function Stroke($aImg) {
class RectPatternSolid (line 106) | class RectPatternSolid extends RectPattern {
method __construct (line 108) | function __construct($aColor="black",$aWeight=1) {
method DoPattern (line 112) | function DoPattern($aImg) {
class RectPatternHor (line 123) | class RectPatternHor extends RectPattern {
method __construct (line 125) | function __construct($aColor="black",$aWeight=1,$aLineSpacing=7) {
method DoPattern (line 130) | function DoPattern($aImg) {
class RectPatternVert (line 145) | class RectPatternVert extends RectPattern {
method __construct (line 147) | function __construct($aColor="black",$aWeight=1,$aLineSpacing=7) {
method DoPattern (line 155) | function DoPattern($aImg) {
class RectPatternRDiag (line 171) | class RectPatternRDiag extends RectPattern {
method __construct (line 173) | function __construct($aColor="black",$aWeight=1,$aLineSpacing=12) {
method DoPattern (line 178) | function DoPattern($aImg) {
class RectPatternLDiag (line 240) | class RectPatternLDiag extends RectPattern {
method __construct (line 242) | function __construct($aColor="black",$aWeight=1,$aLineSpacing=12) {
method DoPattern (line 247) | function DoPattern($aImg) {
class RectPattern3DPlane (line 304) | class RectPattern3DPlane extends RectPattern {
method __construct (line 310) | function __construct($aColor="black",$aWeight=1) {
method SetHorizon (line 315) | function SetHorizon($aHorizon) {
method DoPattern (line 319) | function DoPattern($aImg) {
class RectPatternCross (line 421) | class RectPatternCross extends RectPattern {
method __construct (line 424) | function __construct($aColor="black",$aWeight=1) {
method SetOrder (line 430) | function SetOrder($aDepth) {
method SetPos (line 435) | function SetPos($aRect) {
method SetDensity (line 441) | function SetDensity($aDens) {
method DoPattern (line 446) | function DoPattern($aImg) {
class RectPatternDiagCross (line 457) | class RectPatternDiagCross extends RectPattern {
method __construct (line 460) | function __construct($aColor="black",$aWeight=1) {
method SetOrder (line 466) | function SetOrder($aDepth) {
method SetPos (line 471) | function SetPos($aRect) {
method SetDensity (line 477) | function SetDensity($aDens) {
method DoPattern (line 482) | function DoPattern($aImg) {
class RectPatternFactory (line 493) | class RectPatternFactory {
method __construct (line 494) | function __construct() {
method Create (line 497) | function Create($aPattern,$aColor,$aWeight=1) {
class PlotBand (line 538) | class PlotBand {
method __construct (line 543) | function __construct($aDir,$aPattern,$aMin,$aMax,$aColor="black",$aWei...
method SetPos (line 556) | function SetPos($aRect) {
method ShowFrame (line 561) | function ShowFrame($aFlag=true) {
method SetOrder (line 566) | function SetOrder($aDepth) {
method SetDensity (line 570) | function SetDensity($aDens) {
method GetDir (line 574) | function GetDir() {
method GetMin (line 578) | function GetMin() {
method GetMax (line 582) | function GetMax() {
method PreStrokeAdjust (line 586) | function PreStrokeAdjust($aGraph) {
method Stroke (line 591) | function Stroke($aImg,$aXScale,$aYScale) {
FILE: include/jpgraph/jpgraph_plotline.php
class PlotLine (line 17) | class PlotLine {
method __construct (line 25) | function __construct($aDir=HORIZONTAL,$aPos=0,$aColor='black',$aWeight...
method SetLegend (line 32) | function SetLegend($aLegend,$aCSIM='',$aCSIMAlt='',$aCSIMWinTarget='') {
method HideLegend (line 39) | function HideLegend($f=true) {
method SetPosition (line 43) | function SetPosition($aScalePosition) {
method SetDirection (line 47) | function SetDirection($aDir) {
method SetColor (line 51) | function SetColor($aColor) {
method SetWeight (line 55) | function SetWeight($aWeight) {
method SetLineStyle (line 59) | function SetLineStyle($aStyle) {
method GetCSIMAreas (line 63) | function GetCSIMAreas() {
method DoLegend (line 70) | function DoLegend($graph) {
method Legend (line 75) | function Legend($aGraph) {
method PreStrokeAdjust (line 84) | function PreStrokeAdjust($aGraph) {
method StrokeMargin (line 90) | function StrokeMargin($aImg) {
method PrescaleSetup (line 95) | function PrescaleSetup($aGraph) {
method Min (line 99) | function Min() {
method Max (line 103) | function Max() {
method _Stroke (line 107) | function _Stroke($aImg,$aMinX,$aMinY,$aMaxX,$aMaxY,$aXPos,$aYPos) {
method Stroke (line 129) | function Stroke($aImg,$aXScale,$aYScale) {
FILE: include/jpgraph/jpgraph_plotmark.inc.php
class PlotMark (line 17) | class PlotMark {
method __construct (line 35) | function __construct() {
method SetType (line 43) | function SetType($aType,$aFileName='',$aScale=1.0) {
method SetCallback (line 52) | function SetCallback($aFunc) {
method SetCallbackYX (line 56) | function SetCallbackYX($aFunc) {
method GetType (line 60) | function GetType() {
method SetColor (line 64) | function SetColor($aColor) {
method SetFillColor (line 68) | function SetFillColor($aFillColor) {
method SetWeight (line 72) | function SetWeight($aWeight) {
method SetSize (line 77) | function SetSize($aWidth) {
method SetWidth (line 81) | function SetWidth($aWidth) {
method SetDefaultWidth (line 85) | function SetDefaultWidth() {
method GetWidth (line 96) | function GetWidth() {
method Hide (line 100) | function Hide($aHide=true) {
method Show (line 104) | function Show($aShow=true) {
method SetCSIMAltVal (line 108) | function SetCSIMAltVal($aY,$aX='') {
method SetCSIMTarget (line 113) | function SetCSIMTarget($aTarget,$aWinTarget='') {
method SetCSIMAlt (line 118) | function SetCSIMAlt($aAlt) {
method GetCSIMAreas (line 122) | function GetCSIMAreas(){
method AddCSIMPoly (line 126) | function AddCSIMPoly($aPts) {
method AddCSIMCircle (line 148) | function AddCSIMCircle($x,$y,$r) {
method Stroke (line 166) | function Stroke($img,$x,$y) {
class ImgData (line 446) | class ImgData {
method __construct (line 454) | function __construct() {
method GetImg (line 459) | function GetImg($aMark,$aIdx) {
method GetAnchor (line 476) | function GetAnchor() {
class FlagCache (line 490) | class FlagCache {
method GetFlagImgByName (line 492) | static function GetFlagImgByName($aSize,$aName) {
FILE: include/jpgraph/jpgraph_polar.php
class PolarPlot (line 34) | class PolarPlot {
method __construct (line 48) | function __construct($aData) {
method SetWeight (line 59) | function SetWeight($aWeight) {
method SetColor (line 63) | function SetColor($aColor){
method SetFillColor (line 67) | function SetFillColor($aColor){
method Max (line 71) | function Max() {
method SetCSIMTargets (line 81) | function SetCSIMTargets($aTargets,$aAlts=null) {
method GetCSIMareas (line 87) | function GetCSIMareas() {
method SetLegend (line 91) | function SetLegend($aLegend,$aCSIM="",$aCSIMAlt="") {
method Legend (line 99) | function Legend($aGraph) {
method Stroke (line 114) | function Stroke($img,$scale) {
class PolarAxis (line 151) | class PolarAxis extends Axis {
method __construct (line 162) | function __construct($img,$aScale) {
method ShowAngleDegreeMark (line 166) | function ShowAngleDegreeMark($aFlg=true) {
method SetAngleStep (line 170) | function SetAngleStep($aStep) {
method HideTicks (line 174) | function HideTicks($aFlg=true,$aAngleFlg=true) {
method ShowAngleLabel (line 179) | function ShowAngleLabel($aFlg=true) {
method ShowGrid (line 183) | function ShowGrid($aMajor=true,$aMinor=false,$aAngle=true) {
method SetAngleFont (line 189) | function SetAngleFont($aFontFam,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetColor (line 195) | function SetColor($aColor,$aRadColor='',$aAngleColor='') {
method SetGridColor (line 202) | function SetGridColor($aMajorColor,$aMinorColor='',$aAngleColor='') {
method SetTickColors (line 213) | function SetTickColors($aRadColor,$aAngleColor='') {
method StrokeGrid (line 219) | function StrokeGrid($pos) {
method StrokeAngleLabels (line 310) | function StrokeAngleLabels($pos,$type) {
method Stroke (line 497) | function Stroke($pos,$dummy=true) {
class PolarScale (line 593) | class PolarScale extends LinearScale {
method __construct (line 597) | function __construct($aMax,$graph,$aClockwise) {
method SetClockwise (line 603) | function SetClockwise($aFlg) {
method _Translate (line 607) | function _Translate($v) {
method PTranslate (line 611) | function PTranslate($aAngle,$aRad) {
class PolarLogScale (line 637) | class PolarLogScale extends LogScale {
method __construct (line 641) | function __construct($aMax,$graph,$aClockwise=false) {
method SetClockwise (line 649) | function SetClockwise($aFlg) {
method PTranslate (line 653) | function PTranslate($aAngle,$aRad) {
class PolarGraph (line 681) | class PolarGraph extends Graph {
method __construct (line 687) | function __construct($aWidth=300,$aHeight=200,$aCachedName="",$aTimeOu...
method SetDensity (line 694) | function SetDensity($aDense) {
method SetClockwise (line 698) | function SetClockwise($aFlg) {
method Set90AndMargin (line 702) | function Set90AndMargin($lm=0,$rm=0,$tm=0,$bm=0) {
method SetScale (line 713) | function SetScale($aScale,$rmax=0,$dummy1=1,$dummy2=1,$dummy3=1) {
method SetType (line 728) | function SetType($aType) {
method SetPlotSize (line 732) | function SetPlotSize($w,$h) {
method GetPlotsMax (line 738) | function GetPlotsMax() {
method Stroke (line 749) | function Stroke($aStrokeFileName="") {
FILE: include/jpgraph/jpgraph_radar.php
class RadarLogTicks (line 18) | class RadarLogTicks extends Ticks {
method __construct (line 20) | function __construct() {
method Stroke (line 24) | function Stroke($aImg,&$grid,$aPos,$aAxisAngle,$aScale,&$aMajPos,&$aMa...
class RadarLinearTicks (line 108) | class RadarLinearTicks extends Ticks {
method __construct (line 113) | function __construct() {
method GetMajor (line 118) | function GetMajor() {
method GetMinor (line 123) | function GetMinor() {
method Set (line 128) | function Set($aMajStep,$aMinStep=false) {
method Stroke (line 143) | function Stroke($aImg,&$grid,$aPos,$aAxisAngle,$aScale,&$aMajPos,&$aMa...
class RadarAxis (line 219) | class RadarAxis extends AxisPrototype {
method __construct (line 224) | function __construct($img,$aScale,$color=array(0,0,0)) {
method Stroke (line 237) | function Stroke($pos,$aAxisAngle,&$grid,$title,$lf) {
method _StrokeAxisTitle (line 284) | function _StrokeAxisTitle($pos,$aAxisAngle,$title) {
class RadarGrid (line 336) | class RadarGrid { //extends Grid {
method __construct (line 341) | function __construct() {
method SetColor (line 345) | function SetColor($aMajColor) {
method SetWeight (line 349) | function SetWeight($aWeight) {
method SetLineStyle (line 354) | function SetLineStyle($aType) {
method Show (line 359) | function Show($aShowMajor=true) {
method Stroke (line 363) | function Stroke($img,$grid) {
class RadarPlot (line 399) | class RadarPlot {
method __construct (line 415) | function __construct($data) {
method Min (line 420) | function Min() {
method Max (line 424) | function Max() {
method SetLegend (line 428) | function SetLegend($legend) {
method SetLineStyle (line 432) | function SetLineStyle($aStyle) {
method SetLineWeight (line 436) | function SetLineWeight($w) {
method SetFillColor (line 440) | function SetFillColor($aColor) {
method SetFill (line 445) | function SetFill($f=true) {
method SetColor (line 449) | function SetColor($aColor,$aFillColor=false) {
method SetCSIMTargets (line 458) | function SetCSIMTargets($aTargets,$aAlts=null) {
method GetCSIMareas (line 464) | function GetCSIMareas() {
method Stroke (line 468) | function Stroke($img, $pos, $scale, $startangle) {
method GetCount (line 533) | function GetCount() {
method Legend (line 537) | function Legend($graph) {
class RadarGraph (line 554) | class RadarGraph extends Graph {
method __construct (line 560) | function __construct($width=300,$height=200,$cachedName="",$timeout=0,...
method HideTickMarks (line 571) | function HideTickMarks($aFlag=true) {
method ShowMinorTickmarks (line 575) | function ShowMinorTickmarks($aFlag=true) {
method SetScale (line 579) | function SetScale($axtype,$ymin=1,$ymax=1,$dummy1=null,$dumy2=null) {
method SetSize (line 598) | function SetSize($aSize) {
method SetPlotSize (line 606) | function SetPlotSize($aSize) {
method SetTickDensity (line 610) | function SetTickDensity($densy=TICKD_NORMAL,$dummy1=null) {
method SetPos (line 631) | function SetPos($px,$py=0.5) {
method SetCenter (line 635) | function SetCenter($px,$py=0.5) {
method SetColor (line 650) | function SetColor($aColor) {
method SetTitles (line 654) | function SetTitles($aTitleArray) {
method Add (line 658) | function Add($aPlot) {
method GetPlotsYMinMax (line 676) | function GetPlotsYMinMax($aPlots) {
method StrokeIcons (line 690) | function StrokeIcons() {
method StrokeTexts (line 699) | function StrokeTexts() {
method Stroke (line 709) | function Stroke($aStrokeFileName='') {
FILE: include/jpgraph/jpgraph_regstat.php
class Spline (line 17) | class Spline {
method __construct (line 24) | function __construct($xdata,$ydata) {
method Get (line 63) | function Get($num=50) {
method Interpolate (line 78) | function Interpolate($xpoint) {
class Bezier (line 112) | class Bezier {
method __construct (line 124) | function __construct($datax, $datay, $attraction_factor = 1) {
method Get (line 151) | function Get($steps) {
method GetPoint (line 174) | function GetPoint($mu) {
FILE: include/jpgraph/jpgraph_rgb.inc.php
class RGB (line 19) | class RGB {
method __construct (line 23) | function __construct($aImg=null) {
method Color (line 481) | function Color($aColor) {
method Equal (line 544) | function Equal($aCol1,$aCol2) {
method Allocate (line 552) | function Allocate($aColor,$aAlpha=0.0) {
method tryHexConversion (line 570) | static function tryHexConversion($aColor) {
method GetSpectrum (line 592) | static function GetSpectrum($aVal,$aDynamicRange=1.0) {
FILE: include/jpgraph/jpgraph_scatter.php
class FieldArrow (line 17) | class FieldArrow {
method __construct (line 24) | function __construct() {
method SetSize (line 28) | function SetSize($aSize,$aArrowSize=2) {
method SetColor (line 33) | function SetColor($aColor) {
method Stroke (line 37) | function Stroke($aImg,$x,$y,$a) {
class FieldPlot (line 65) | class FieldPlot extends Plot {
method __construct (line 70) | function __construct($datay,$datax,$angles) {
method SetCallback (line 85) | function SetCallback($aFunc) {
method Stroke (line 89) | function Stroke($img,$xscale,$yscale) {
method Legend (line 121) | function Legend($aGraph) {
class ScatterPlot (line 133) | class ScatterPlot extends Plot {
method __construct (line 138) | function __construct($datay,$datax=false) {
method SetImpuls (line 154) | function SetImpuls($f=true) {
method SetStem (line 158) | function SetStem($f=true) {
method SetLinkPoints (line 163) | function SetLinkPoints($aFlag=true,$aColor="black",$aWeight=1,$aStyle=...
method Stroke (line 170) | function Stroke($img,$xscale,$yscale) {
method Legend (line 234) | function Legend($aGraph) {
FILE: include/jpgraph/jpgraph_stock.php
class StockPlot (line 15) | class StockPlot extends Plot {
method __construct (line 22) | function __construct($datay,$datax=false) {
method SetColor (line 33) | function SetColor($aColor,$aColor1='white',$aColor2='darkred',$aColor3...
method SetWidth (line 40) | function SetWidth($aWidth) {
method HideEndLines (line 45) | function HideEndLines($aHide=true) {
method PreStrokeAdjust (line 50) | function PreStrokeAdjust($graph) {
method Stroke (line 62) | function Stroke($img,$xscale,$yscale) {
method ModBox (line 166) | function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) {}
class BoxPlot (line 173) | class BoxPlot extends StockPlot {
method __construct (line 176) | function __construct($datay,$datax=false) {
method SetMedianColor (line 181) | function SetMedianColor($aPos,$aNeg) {
method ModBox (line 186) | function ModBox($img,$xscale,$yscale,$i,$xl,$xr,$neg) {
FILE: include/jpgraph/jpgraph_table.php
class GTextTableCell (line 26) | class GTextTableCell {
method __construct (line 43) | function __construct($aVal='',$aRow=0,$aCol=0) {
method Init (line 52) | function Init($aTable) {
method SetCSIMTarget (line 56) | function SetCSIMTarget($aTarget,$aAlt='',$aWinTarget='') {
method GetCSIMArea (line 62) | function GetCSIMArea() {
method SetImageConstrain (line 69) | function SetImageConstrain($aType,$aVal) {
method SetCountryFlag (line 76) | function SetCountryFlag($aFlag,$aScale=1.0,$aMix=100,$aStdSize=3) {
method SetImage (line 81) | function SetImage($aFile,$aScale=1.0,$aMix=100) {
method SetImageFromString (line 85) | function SetImageFromString($aStr,$aScale=1.0,$aMix=100) {
method SetRowColSpan (line 90) | function SetRowColSpan($aRowSpan,$aColSpan) {
method SetMerged (line 96) | function SetMerged($aPRow,$aPCol,$aFlg=true) {
method IsMerged (line 102) | function IsMerged() {
method SetNumberFormat (line 106) | function SetNumberFormat($aF) {
method Set (line 110) | function Set($aTxt) {
method SetFont (line 114) | function SetFont($aFF,$aFS,$aFSize) {
method SetFillColor (line 121) | function SetFillColor($aColor) {
method SetFontColor (line 125) | function SetFontColor($aColor) {
method SetGridColor (line 129) | function SetGridColor($aLeft,$aTop=null,$aBottom=null,$aRight=null) {
method SetGridStyle (line 136) | function SetGridStyle($aLeft,$aTop=null,$aBottom=null,$aRight=null) {
method SetGridWeight (line 143) | function SetGridWeight($aLeft=null,$aTop=null,$aBottom=null,$aRight=nu...
method SetMargin (line 156) | function SetMargin($aLeft,$aRight,$aTop,$aBottom) {
method GetWidth (line 163) | function GetWidth($aImg) {
method GetHeight (line 195) | function GetHeight($aImg) {
method SetAlign (line 223) | function SetAlign($aHorAlign='left',$aVertAlign='bottom') {
method AdjustMarginsForGrid (line 234) | function AdjustMarginsForGrid() {
method StrokeVGrid (line 269) | function StrokeVGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) {
method StrokeHGrid (line 307) | function StrokeHGrid($aImg,$aX,$aY,$aWidth,$aHeight,$aDir=1) {
method Stroke (line 345) | function Stroke($aImg,$aX,$aY,$aWidth,$aHeight) {
class GTextTable (line 465) | class GTextTable {
method __construct (line 480) | function __construct() {
method Init (line 484) | function Init($aRows=0,$aCols=0,$aFillText='') {
method SetBorder (line 500) | function SetBorder($aWeight=1,$aColor='black') {
method SetPos (line 510) | function SetPos($aX,$aY) {
method SetScalePos (line 515) | function SetScalePos($aX,$aY) {
method SetAnchorPos (line 520) | function SetAnchorPos($aXAnchor,$aYAnchor='top') {
method SetCellCountryFlag (line 529) | function SetCellCountryFlag($aRow,$aCol,$aFlag,$aScale=1.0,$aMix=100,$...
method SetCellImage (line 540) | function SetCellImage($aRow,$aCol,$aFile,$aScale=1.0,$aMix=100) {
method SetRowImage (line 546) | function SetRowImage($aRow,$aFile,$aScale=1.0,$aMix=100) {
method SetColImage (line 553) | function SetColImage($aCol,$aFile,$aScale=1.0,$aMix=100) {
method SetImage (line 560) | function SetImage($aFileR1,$aScaleC1=null,$aMixR2=null,$aC2=null,$aFil...
method SetCellImageConstrain (line 579) | function SetCellImageConstrain($aRow,$aCol,$aType,$aVal) {
method toString (line 589) | function toString() {
method Set (line 612) | function Set($aArg1,$aArg2=NULL,$aArg3=NULL) {
method SetPadding (line 657) | function SetPadding($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aPad=null) {
method SetRowPadding (line 674) | function SetRowPadding($aRow,$aPad) {
method SetColPadding (line 681) | function SetColPadding($aCol,$aPad) {
method SetCellPadding (line 688) | function SetCellPadding($aRow,$aCol,$aPad) {
method SetTextOrientation (line 699) | function SetTextOrientation($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aO=...
method SetRowTextOrientation (line 716) | function SetRowTextOrientation($aRow,$aO) {
method SetColTextOrientation (line 723) | function SetColTextOrientation($aCol,$aO) {
method SetCellTextOrientation (line 730) | function SetCellTextOrientation($aRow,$aCol,$aO) {
method SetColor (line 744) | function SetColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) {
method SetRowColor (line 761) | function SetRowColor($aRow,$aColor) {
method SetColColor (line 768) | function SetColColor($aCol,$aColor) {
method SetCellColor (line 775) | function SetCellColor($aRow,$aCol,$aColor) {
method SetFillColor (line 786) | function SetFillColor($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=null) {
method SetRowFillColor (line 801) | function SetRowFillColor($aRow,$aColor) {
method SetColFillColor (line 808) | function SetColFillColor($aCol,$aColor) {
method SetCellFillColor (line 815) | function SetCellFillColor($aRow,$aCol,$aColor) {
method SetFont (line 825) | function SetFont() {
method SetRowFont (line 860) | function SetRowFont($aRow,$aFF,$aFS,$aFSize=10) {
method SetColFont (line 867) | function SetColFont($aCol,$aFF,$aFS,$aFSize=10) {
method SetCellFont (line 874) | function SetCellFont($aRow,$aCol,$aFF,$aFS,$aFSize=10) {
method SetAlign (line 885) | function SetAlign($aR1HAlign=null,$aC1VAlign=null,$aR2=null,$aC2=null,...
method SetCellAlign (line 909) | function SetCellAlign($aRow,$aCol,$aHorAlign,$aVertAlign='bottom') {
method SetRowAlign (line 915) | function SetRowAlign($aRow,$aHorAlign,$aVertAlign='bottom') {
method SetColAlign (line 922) | function SetColAlign($aCol,$aHorAlign,$aVertAlign='bottom') {
method SetNumberFormat (line 934) | function SetNumberFormat($aArgR1,$aC1=null,$aR2=null,$aC2=null,$aArg=n...
method SetRowNumberFormat (line 954) | function SetRowNumberFormat($aRow,$aF) {
method SetColNumberFormat (line 964) | function SetColNumberFormat($aCol,$aF) {
method SetCellNumberFormat (line 974) | function SetCellNumberFormat($aRow,$aCol,$aF) {
method SetMinColWidth (line 987) | function SetMinColWidth($aColWidth,$aWidth=null) {
method SetMinRowHeight (line 1001) | function SetMinRowHeight($aRowHeight,$aHeight=null) {
method SetGrid (line 1020) | function SetGrid($aWeight=1,$aColor='black',$aStyle=TGRID_SINGLE) {
method SetColGrid (line 1032) | function SetColGrid($aCol,$aWeight=1,$aColor='black',$aStyle=TGRID_SIN...
method SetRowGrid (line 1041) | function SetRowGrid($aRow,$aWeight=1,$aColor='black',$aStyle=TGRID_SIN...
method MergeRow (line 1055) | function MergeRow($aRow,$aHAlign='center',$aVAlign='center') {
method MergeCol (line 1060) | function MergeCol($aCol,$aHAlign='center',$aVAlign='center') {
method MergeCells (line 1065) | function MergeCells($aR1,$aC1,$aR2,$aC2,$aHAlign='center',$aVAlign='ce...
method SetCSIMTarget (line 1100) | function SetCSIMTarget($aTarget,$aAlt=null,$aAutoTarget=false) {
method SetCellCSIMTarget (line 1115) | function SetCellCSIMTarget($aRow,$aCol,$aTarget,$aAlt=null) {
method GetCSIMAreas (line 1126) | function GetCSIMAreas() {
method _chkC (line 1138) | function _chkC($aCol) {
method _chkR (line 1147) | function _chkR($aRow) {
method _getScalePos (line 1156) | function _getScalePos() {
method _autoSizeTable (line 1163) | function _autoSizeTable($aImg) {
method _setcell (line 1196) | function _setcell($aRow,$aCol,$aVal='') {
method StrokeWithScale (line 1206) | function StrokeWithScale($aImg,$aXScale,$aYScale) {
method Stroke (line 1217) | function Stroke($aImg,$aX=NULL,$aY=NULL) {
FILE: include/jpgraph/jpgraph_text.inc.php
class Text (line 17) | class Text {
method __construct (line 39) | function __construct($aTxt="",$aXAbsPos=0,$aYAbsPos=0) {
method Set (line 51) | function Set($aTxt) {
method SetPos (line 56) | function SetPos($aXAbsPos=0,$aYAbsPos=0,$aHAlign="left",$aVAlign="top") {
method SetScalePos (line 64) | function SetScalePos($aX,$aY) {
method Align (line 70) | function Align($aHAlign,$aVAlign="top",$aParagraphAlign="") {
method SetAlign (line 78) | function SetAlign($aHAlign,$aVAlign="top",$aParagraphAlign="") {
method ParagraphAlign (line 83) | function ParagraphAlign($aAlign) {
method SetParagraphAlign (line 88) | function SetParagraphAlign($aAlign) {
method SetShadow (line 92) | function SetShadow($aShadowColor='gray',$aShadowWidth=3) {
method SetWordWrap (line 98) | function SetWordWrap($aCol) {
method SetBox (line 104) | function SetBox($aFrameColor=array(255,255,255),$aBorderColor=array(0,...
method SetBox2 (line 122) | function SetBox2($aFrameColor=array(255,255,255),$aBorderColor=array(0...
method Hide (line 128) | function Hide($aHide=true) {
method Show (line 136) | function Show($aShow=true) {
method SetFont (line 141) | function SetFont($aFamily,$aStyle=FS_NORMAL,$aSize=10) {
method Center (line 148) | function Center($aLeft,$aRight,$aYAbsPos=false) {
method SetColor (line 156) | function SetColor($aColor) {
method SetAngle (line 160) | function SetAngle($aAngle) {
method SetOrientation (line 165) | function SetOrientation($aDirection=0) {
method GetWidth (line 177) | function GetWidth($aImg) {
method GetFontHeight (line 184) | function GetFontHeight($aImg) {
method GetTextHeight (line 191) | function GetTextHeight($aImg) {
method GetHeight (line 197) | function GetHeight($aImg) {
method SetMargin (line 206) | function SetMargin($aMarg) {
method StrokeWithScale (line 210) | function StrokeWithScale($aImg,$axscale,$ayscale) {
method SetCSIMTarget (line 221) | function SetCSIMTarget($aURITarget,$aAlt='',$aWinTarget='') {
method GetCSIMareas (line 227) | function GetCSIMareas() {
method Stroke (line 237) | function Stroke($aImg,$x=null,$y=null) {
method __get (line 304) | function __get($name) {
method __set (line 321) | function __set($name, $value) {
FILE: include/jpgraph/jpgraph_theme.inc.php
class Theme (line 21) | abstract class Theme {
method __construct (line 25) | function __construct() {
method GetColorList (line 31) | abstract function GetColorList();
method ApplyPlot (line 36) | abstract function ApplyPlot($plot);
method SetupPlot (line 42) | function SetupPlot($plot) {
method ApplyGraph (line 55) | function ApplyGraph($graph) {
method PreStrokeApply (line 76) | function PreStrokeApply($graph) {
method GetThemeColors (line 82) | function GetThemeColors($num = 30) {
method GetNextColor (line 108) | function GetNextColor() {
FILE: include/jpgraph/jpgraph_ttf.inc.php
class LanguageConv (line 159) | class LanguageConv {
method Convert (line 162) | function Convert($aTxt,$aFF) {
method iso2uni (line 213) | public static function iso2uni ($isoline){
method gr_iso2uni (line 224) | public static function gr_iso2uni ($isoline) {
method gr_win2uni (line 235) | public static function gr_win2uni ($winline) {
method heb_iso2uni (line 250) | public static function heb_iso2uni($isoline) {
class TTF (line 268) | class TTF {
method __construct (line 271) | function __construct() {
method File (line 468) | function File($family,$style=FS_NORMAL) {
method SetUserFont (line 524) | function SetUserFont($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont1 (line 532) | function SetUserFont1($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont2 (line 540) | function SetUserFont2($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
method SetUserFont3 (line 548) | function SetUserFont3($aNormal,$aBold='',$aItalic='',$aBoldIt='') {
class SymChar (line 565) | class SymChar {
method Get (line 566) | static function Get($aSymb,$aCapital=FALSE) {
FILE: include/jpgraph/jpgraph_utils.inc.php
class FuncGenerator (line 17) | class FuncGenerator {
method __construct (line 20) | function __construct($aFunc,$aXFunc='') {
method E (line 25) | function E($aXMin,$aXMax,$aSteps=50) {
class DateScaleUtils (line 69) | class DateScaleUtils {
method UseWeekFormat (line 77) | static function UseWeekFormat($aFlg) {
method doYearly (line 81) | static function doYearly($aType,$aMinor=false) {
method doDaily (line 136) | static function doDaily($aType,$aMinor=false) {
method doWeekly (line 183) | static function doWeekly($aType,$aMinor=false) {
method doMonthly (line 229) | static function doMonthly($aType,$aMinor=false) {
method GetTicks (line 320) | static function GetTicks($aData,$aType=1,$aMinor=false,$aEndPoints=fal...
method GetAutoTicks (line 325) | static function GetAutoTicks($aMin,$aMax,$aMaxTicks=10,$aMinor=false) {
method GetTicksFromMinMax (line 364) | static function GetTicksFromMinMax($aMin,$aMax,$aType,$aMinor=false,$a...
class ReadFileData (line 407) | Class ReadFileData {
method FromCSV (line 420) | static function FromCSV($aFile,&$aData,$aSepChar=',',$aMaxLineLength=1...
method FromCSV2 (line 466) | static function FromCSV2($aFile, &$aData, $aOptions = array()) {
method From2Col (line 542) | static function From2Col($aFile, $aCol1, $aCol2, $aSepChar=' ') {
method From1Col (line 564) | static function From1Col($aFile, $aCol1) {
method FromMatrix (line 576) | static function FromMatrix($aFile,$aSepChar=' ') {
class LinearRegression (line 600) | class LinearRegression {
method __construct (line 606) | public function __construct($aDataX,$aDataY) {
method Calc (line 614) | public function Calc() {
method GetAB (line 657) | public function GetAB() {
method GetStat (line 663) | public function GetStat() {
method GetY (line 669) | public function GetY($aMinX, $aMaxX, $aStep=1) {
FILE: include/jpgraph/jpgraph_windrose.php
class WindrosePlotScale (line 47) | class WindrosePlotScale {
method __construct (line 62) | function __construct($aData) {
method GetNumCirc (line 85) | function GetNumCirc() {
method SetMaxValue (line 91) | function SetMaxValue($aMax) {
method Set (line 98) | function Set($aMax,$aDelta=null) {
method AutoScale (line 112) | function AutoScale($aRadius,$aMinDist=30) {
method GetMax (line 149) | function GetMax() {
method Hide (line 153) | function Hide($aFlg=true) {
method SetAngle (line 157) | function SetAngle($aAngle) {
method RelTranslate (line 162) | function RelTranslate($aVal,$r,$ri) {
method SetLabelAlign (line 167) | function SetLabelAlign($aAlign) {
method SetLabelFormat (line 171) | function SetLabelFormat($aFmt) {
method SetLabelFillColor (line 175) | function SetLabelFillColor($aBkgColor,$aBorderColor=false) {
method SetFontColor (line 186) | function SetFontColor($aColor) {
method SetFont (line 191) | function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetZFont (line 198) | function SetZFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetZeroLabel (line 204) | function SetZeroLabel($aTxt) {
method SetZFontColor (line 208) | function SetZFontColor($aColor) {
method StrokeLabels (line 212) | function StrokeLabels($aImg,$xc,$yc,$ri,$rr) {
class LegendStyle (line 275) | class LegendStyle {
method SetFont (line 287) | function SetFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetLFont (line 299) | function SetLFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetTFont (line 305) | function SetTFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetCFont (line 311) | function SetCFont($aFontFamily,$aFontStyle=FS_NORMAL,$aFontSize=10) {
method SetFontColor (line 318) | function SetFontColor($aColor) {
method SetTFontColor (line 324) | function SetTFontColor($aColor) {
method SetLFontColor (line 328) | function SetLFontColor($aColor) {
method SetCFontColor (line 332) | function SetCFontColor($aColor) {
method SetCircleWeight (line 336) | function SetCircleWeight($aWeight) {
method SetCircleRadius (line 340) | function SetCircleRadius($aRadius) {
method SetCircleColor (line 344) | function SetCircleColor($aColor) {
method SetCircleText (line 348) | function SetCircleText($aTxt) {
method SetMargin (line 352) | function SetMargin($aMarg,$aBottomMargin=5) {
method SetLength (line 357) | function SetLength($aLength) {
method Show (line 361) | function Show($aFlg=true) {
method Hide (line 365) | function Hide($aFlg=true) {
method SetFormat (line 369) | function SetFormat($aFmt) {
method SetText (line 373) | function SetText($aTxt) {
class WindrosePlot (line 385) | class WindrosePlot {
method __construct (line 414) | function __construct($aData) {
method LayoutSize (line 432) | function LayoutSize() {
method SetSize (line 436) | function SetSize($aSize) {
method SetDataKeyEncoding (line 440) | function SetDataKeyEncoding($aEncoding) {
method SetColor (line 444) | function SetColor($aColor) {
method SetRadialColors (line 448) | function SetRadialColors($aColors) {
method SetRadialWeights (line 452) | function SetRadialWeights($aWeights) {
method SetRadialStyles (line 456) | function SetRadialStyles($aStyles) {
method SetBox (line 460) | function SetBox($aColor='black',$aWeight=1, $aStyle='solid', $aShow=tr...
method SetLabels (line 467) | function SetLabels($aLabels) {
method SetLabelMargin (line 471) | function SetLabelMargin($aMarg) {
method SetLabelFormat (line 475) | function SetLabelFormat($aLblFormat) {
method SetCompassLabels (line 479) | function SetCompassLabels($aLabels) {
method SetCenterSize (line 492) | function SetCenterSize($aSize) {
method SetZCircleSize (line 496) | function SetZCircleSize($aSize) {
method SetFont (line 500) | function SetFont($aFFam,$aFStyle=FS_NORMAL,$aFSize=10) {
method SetFontColor (line 506) | function SetFontColor($aColor) {
method SetGridColor (line 510) | function SetGridColor($aColor1,$aColor2) {
method SetGridWeight (line 515) | function SetGridWeight($aGrid1=1,$aGrid2=2) {
method SetRadialGridStyle (line 520) | function SetRadialGridStyle($aStyle) {
method SetRanges (line 528) | function SetRanges($aRanges) {
method SetRangeStyle (line 532) | function SetRangeStyle($aStyle) {
method SetRangeColors (line 536) | function SetRangeColors($aLegColors) {
method SetRangeWeights (line 540) | function SetRangeWeights($aWeights) {
method SetType (line 549) | function SetType($aType) {
method SetCenterPos (line 557) | function SetCenterPos($aX,$aY) {
method SetPos (line 562) | function SetPos($aX,$aY) {
method SetAntiAlias (line 567) | function SetAntiAlias($aFlag) {
method _ThickCircle (line 573) | function _ThickCircle($aImg,$aXC,$aYC,$aRad,$aWeight,$aColor) {
method _StrokeWindLeg (line 589) | function _StrokeWindLeg($aImg,$xc,$yc,$a,$ri,$r,$weight,$color) {
method _StrokeLegend (line 616) | function _StrokeLegend($aImg,$x,$y,$scaling=1,$aReturnWidth=false) {
method SetAutoScaleAngle (line 726) | function SetAutoScaleAngle($aIsRegRose=true) {
method NormAngle (line 854) | function NormAngle($a) {
method SetLabelPosition (line 861) | function SetLabelPosition($aPos) {
method _StrokeFreeRose (line 865) | function _StrokeFreeRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri) {
method FixupIndexes (line 1023) | function FixupIndexes($aDataArray,$num) {
method _StrokeRegularRose (line 1051) | function _StrokeRegularRose($dblImg,$value,$scaling,$xc,$yc,$r,$ri) {
method getWidth (line 1202) | function getWidth($aImg) {
method getHeight (line 1243) | function getHeight($aImg) {
method Stroke (line 1283) | function Stroke($aGraph) {
class WindroseGraph (line 1447) | class WindroseGraph extends Graph {
method __construct (line 1451) | function __construct($width=300,$height=200,$cachedName="",$timeout=0,...
method StrokeTexts (line 1464) | function StrokeTexts() {
method StrokeIcons (line 1473) | function StrokeIcons() {
method Add (line 1486) | function Add($aObj) {
method AddText (line 1507) | function AddText($aTxt,$aToY2=false) {
method SetColor (line 1511) | function SetColor($c) {
method Stroke (line 1516) | function Stroke($aStrokeFileName="") {
FILE: include/jpgraph/themes/AquaTheme.class.php
class AquaTheme (line 6) | class AquaTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 52) | function SetupGraph($graph) {
method SetupPieGraph (line 102) | function SetupPieGraph($graph) {
method PreStrokeApply (line 127) | function PreStrokeApply($graph) {
method ApplyPlot (line 139) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/GreenTheme.class.php
class GreenTheme (line 6) | class GreenTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 34) | function SetupGraph($graph) {
method SetupPieGraph (line 84) | function SetupPieGraph($graph) {
method PreStrokeApply (line 109) | function PreStrokeApply($graph) {
method ApplyPlot (line 121) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/OceanTheme.class.php
class OceanTheme (line 6) | class OceanTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 36) | function SetupGraph($graph) {
method SetupPieGraph (line 86) | function SetupPieGraph($graph) {
method PreStrokeApply (line 111) | function PreStrokeApply($graph) {
method ApplyPlot (line 123) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/OrangeTheme.class.php
class OrangeTheme (line 6) | class OrangeTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 36) | function SetupGraph($graph) {
method SetupPieGraph (line 86) | function SetupPieGraph($graph) {
method PreStrokeApply (line 111) | function PreStrokeApply($graph) {
method ApplyPlot (line 123) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/PastelTheme.class.php
class PastelTheme (line 6) | class PastelTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 30) | function SetupGraph($graph) {
method SetupPieGraph (line 80) | function SetupPieGraph($graph) {
method PreStrokeApply (line 105) | function PreStrokeApply($graph) {
method ApplyPlot (line 117) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/RoseTheme.class.php
class RoseTheme (line 6) | class RoseTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 36) | function SetupGraph($graph) {
method SetupPieGraph (line 86) | function SetupPieGraph($graph) {
method PreStrokeApply (line 111) | function PreStrokeApply($graph) {
method ApplyPlot (line 123) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/SoftyTheme.class.php
class SoftyTheme (line 6) | class SoftyTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 45) | function SetupGraph($graph) {
method SetupPieGraph (line 115) | function SetupPieGraph($graph) {
method PreStrokeApply (line 129) | function PreStrokeApply($graph) {
method ApplyPlot (line 141) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/UniversalTheme.class.php
class UniversalTheme (line 6) | class UniversalTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 34) | function SetupGraph($graph) {
method SetupPieGraph (line 89) | function SetupPieGraph($graph) {
method PreStrokeApply (line 114) | function PreStrokeApply($graph) {
method ApplyPlot (line 126) | function ApplyPlot($plot) {
FILE: include/jpgraph/themes/VividTheme.class.php
class VividTheme (line 6) | class VividTheme extends Theme
method GetColorList (line 13) | function GetColorList() {
method SetupGraph (line 30) | function SetupGraph($graph) {
method SetupPieGraph (line 80) | function SetupPieGraph($graph) {
method PreStrokeApply (line 105) | function PreStrokeApply($graph) {
method ApplyPlot (line 117) | function ApplyPlot($plot) {
FILE: include/memcache.php
class MemcacheSingleton (line 3) | class MemcacheSingleton
method __construct (line 8) | private function __construct()
method getInstance (line 16) | public static function getInstance()
function cacheable (line 26) | function cacheable($cacheKeyPrefix, $cacheDuration = 3600) {
FILE: include/mesoeast.php
function dwpf (line 5) | function dwpf($tmpf, $relh)
function read_data (line 13) | function read_data($dt, $candie = TRUE) {
FILE: include/mlib.php
function rectify_wfo (line 8) | function rectify_wfo($wfo3){
function unrectify_wfo (line 29) | function unrectify_wfo($wfo){
function getClientIp (line 40) | function getClientIp() {
function printTags (line 52) | function printTags($tokens)
function myround (line 71) | function myround($val, $prec){
function iemws_json (line 78) | function iemws_json($endpoint, $args)
function force_https (line 128) | function force_https()
function aSortBySecondIndex (line 143) | function aSortBySecondIndex($multiArray, $secondIndex, $sorder = "asc")
function c2f (line 171) | function c2f($myC)
function f2c (line 180) | function f2c($tmpf)
function dwpf (line 188) | function dwpf($tmpf, $relh)
function relh (line 199) | function relh($tmpc, $dwpc)
function drct2txt (line 209) | function drct2txt($dir)
FILE: include/myview.php
class MyView (line 13) | class MyView {
method __construct (line 35) | public function __construct() {
method render (line 38) | public function render($template_file) {
method __set (line 53) | public function __set($name, $value) {
method __get (line 56) | public function __get($name) {
FILE: include/network.php
class NetworkTable (line 7) | class NetworkTable
method __construct (line 14) | public function __construct($a, $force3char = FALSE, $only_online = FA...
method loadNetwork (line 63) | public function loadNetwork($network, $force3char = FALSE)
method loadStation (line 76) | public function loadStation($id)
method doConversions (line 89) | public function doConversions($id)
method get (line 109) | public function get($id)
FILE: include/rview_lib.php
function determine_time_base (line 4) | function determine_time_base($t)
function mktitle (line 16) | function mktitle($map, $imgObj, $titlet, $subtitle = "", $width = 640)
function mklogolocal (line 42) | function mklogolocal($map, $imgObj)
function drawStateNEXRAD (line 55) | function drawStateNEXRAD($hlext)
function drawCountyNEXRAD (line 103) | function drawCountyNEXRAD($site, $extents)
FILE: include/sites.php
class SitesContext (line 13) | class SitesContext
method printtd (line 19) | public function printtd($instr, $selected)
function station_helper (line 40) | function station_helper($station)
function get_sites_context (line 79) | function get_sites_context()
FILE: include/station.php
class StationData (line 7) | class StationData
method __construct (line 14) | public function __construct($a, $n = "")
method loadStation (line 48) | public function loadStation($dbconn, $id, $n = "")
method doConversions (line 65) | public function doConversions($id)
method get (line 82) | public function get($id)
FILE: include/vendor/abraham/twitteroauth/src/Config.php
class Config (line 12) | class Config
method setApiVersion (line 52) | public function setApiVersion(string $apiVersion): void
method setTimeouts (line 67) | public function setTimeouts(int $connectionTimeout, int $timeout): void
method setRetries (line 79) | public function setRetries(int $maxRetries, int $retriesDelay): void
method setDecodeJsonAsArray (line 88) | public function setDecodeJsonAsArray(bool $value): void
method setUserAgent (line 96) | public function setUserAgent(string $userAgent): void
method setProxy (line 104) | public function setProxy(array $proxy): void
method setGzipEncoding (line 114) | public function setGzipEncoding(bool $gzipEncoding): void
method setChunkSize (line 124) | public function setChunkSize(int $value): void
FILE: include/vendor/abraham/twitteroauth/src/Consumer.php
class Consumer (line 12) | class Consumer
method __construct (line 26) | public function __construct(
method __toString (line 39) | public function __toString()
FILE: include/vendor/abraham/twitteroauth/src/HmacSha1.php
class HmacSha1 (line 19) | class HmacSha1 extends SignatureMethod
method getName (line 24) | public function getName()
method buildSignature (line 32) | public function buildSignature(
FILE: include/vendor/abraham/twitteroauth/src/Request.php
class Request (line 12) | class Request
method __construct (line 27) | public function __construct(
method fromConsumerAndToken (line 52) | public static function fromConsumerAndToken(
method setParameter (line 85) | public function setParameter(string $name, string $value)
method getParameter (line 95) | public function getParameter(string $name): ?string
method getParameters (line 105) | public function getParameters(): array
method removeParameter (line 113) | public function removeParameter(string $name): void
method getSignableParameters (line 123) | public function getSignableParameters(): string
method getSignatureBaseString (line 146) | public function getSignatureBaseString(): string
method getNormalizedHttpMethod (line 164) | public function getNormalizedHttpMethod(): string
method getNormalizedHttpUrl (line 175) | public function getNormalizedHttpUrl(): string
method toUrl (line 191) | public function toUrl(): string
method toPostdata (line 206) | public function toPostdata(): string
method toHeader (line 217) | public function toHeader(): string
method __toString (line 244) | public function __toString(): string
method signRequest (line 254) | public function signRequest(
method buildSignature (line 274) | public function buildSignature(
method generateNonce (line 285) | public static function generateNonce(): string
FILE: include/vendor/abraham/twitteroauth/src/Response.php
class Response (line 12) | class Response
method setApiPath (line 28) | public function setApiPath(string $apiPath): void
method getApiPath (line 36) | public function getApiPath(): ?string
method setBody (line 44) | public function setBody($body)
method getBody (line 52) | public function getBody()
method setHttpCode (line 60) | public function setHttpCode(int $httpCode): void
method getHttpCode (line 68) | public function getHttpCode(): int
method setHeaders (line 76) | public function setHeaders(array $headers): void
method getsHeaders (line 89) | public function getsHeaders(): array
method setXHeaders (line 97) | public function setXHeaders(array $xHeaders = []): void
method getXHeaders (line 105) | public function getXHeaders(): array
FILE: include/vendor/abraham/twitteroauth/src/SignatureMethod.php
class SignatureMethod (line 16) | abstract class SignatureMethod
method getName (line 23) | abstract public function getName();
method buildSignature (line 37) | abstract public function buildSignature(
method checkSignature (line 53) | public function checkSignature(
FILE: include/vendor/abraham/twitteroauth/src/Token.php
class Token (line 12) | class Token
method __construct (line 23) | public function __construct(?string $key, ?string $secret)
method __toString (line 35) | public function __toString(): string
FILE: include/vendor/abraham/twitteroauth/src/TwitterOAuth.php
class TwitterOAuth (line 21) | class TwitterOAuth extends Config
method __construct (line 47) | public function __construct(
method setOauthToken (line 68) | public function setOauthToken(
method setBearer (line 79) | public function setBearer(string $oauthTokenSecret): void
method getLastApiPath (line 88) | public function getLastApiPath(): ?string
method getLastHttpCode (line 96) | public function getLastHttpCode(): int
method getLastXHeaders (line 104) | public function getLastXHeaders(): array
method getLastBody (line 112) | public function getLastBody()
method resetLastResponse (line 120) | public function resetLastResponse(): void
method resetAttemptsNumber (line 128) | private function resetAttemptsNumber(): void
method sleepIfNeeded (line 136) | private function sleepIfNeeded(): void
method url (line 151) | public function url(string $path, array $parameters): string
method oauth (line 168) | public function oauth(string $path, array $parameters = []): array
method oauth2 (line 194) | public function oauth2(string $path, array $parameters = [])
method get (line 229) | public function get(string $path, array $parameters = [])
method post (line 243) | public function post(
method delete (line 259) | public function delete(string $path, array $parameters = [])
method put (line 273) | public function put(
method upload (line 290) | public function upload(
method mediaStatus (line 309) | public function mediaStatus(string $media_id)
method uploadMediaNotChunked (line 331) | private function uploadMediaNotChunked(string $path, array $parameters)
method uploadMediaChunked (line 359) | private function uploadMediaChunked(string $path, array $parameters)
method mediaInitParameters (line 410) | private function mediaInitParameters(array $parameters): array
method cleanUpParameters (line 436) | private function cleanUpParameters(array $parameters)
method extension (line 452) | private function extension()
method http (line 469) | private function http(
method apiUrl (line 500) | protected function apiUrl(string $host, string $path)
method makeRequests (line 523) | private function makeRequests(
method requestsAvailable (line 546) | private function requestsAvailable(): bool
method oAuthRequest (line 564) | private function oAuthRequest(
method curlOptions (line 611) | private function curlOptions(): array
method request (line 654) | private function request(
method parseHeaders (line 732) | private function parseHeaders(string $header): array
method encodeAppAuthorization (line 752) | private function encodeAppAuthorization(Consumer $consumer): string
method curlCaOpt (line 765) | private function curlCaOpt(string $path): int
method setPostfieldsOptions (line 779) | private function setPostfieldsOptions(
FILE: include/vendor/abraham/twitteroauth/src/TwitterOAuthException.php
class TwitterOAuthException (line 10) | class TwitterOAuthException extends \Exception
FILE: include/vendor/abraham/twitteroauth/src/Util.php
class Util (line 12) | class Util
method urlencodeRfc3986 (line 19) | public static function urlencodeRfc3986($input)
method urldecodeRfc3986 (line 38) | public static function urldecodeRfc3986($string): string
method parseParameters (line 52) | public static function parseParameters($input): array
method buildHttpQuery (line 89) | public static function buildHttpQuery(array $params): string
FILE: include/vendor/abraham/twitteroauth/src/Util/JsonDecoder.php
class JsonDecoder (line 8) | class JsonDecoder
method decode (line 18) | public static function decode(string $string, bool $asArray)
FILE: include/vendor/composer/ClassLoader.php
class ClassLoader (line 43) | class ClassLoader
method __construct (line 106) | public function __construct($vendorDir = null)
method getPrefixes (line 115) | public function getPrefixes()
method getPrefixesPsr4 (line 127) | public function getPrefixesPsr4()
method getFallbackDirs (line 135) | public function getFallbackDirs()
method getFallbackDirsPsr4 (line 143) | public function getFallbackDirsPsr4()
method getClassMap (line 151) | public function getClassMap()
method addClassMap (line 161) | public function addClassMap(array $classMap)
method add (line 180) | public function add($prefix, $paths, $prepend = false)
method addPsr4 (line 230) | public function addPsr4($prefix, $paths, $prepend = false)
method set (line 278) | public function set($prefix, $paths)
method setPsr4 (line 298) | public function setPsr4($prefix, $paths)
method setUseIncludePath (line 319) | public function setUseIncludePath($useIncludePath)
method getUseIncludePath (line 330) | public function getUseIncludePath()
method setClassMapAuthoritative (line 343) | public function setClassMapAuthoritative($classMapAuthoritative)
method isClassMapAuthoritative (line 353) | public function isClassMapAuthoritative()
method setApcuPrefix (line 365) | public function setApcuPrefix($apcuPrefix)
method getApcuPrefix (line 375) | public function getApcuPrefix()
method register (line 387) | public function register($prepend = false)
method unregister (line 408) | public function unregister()
method loadClass (line 423) | public function loadClass($class)
method findFile (line 442) | public function findFile($class)
method getRegisteredLoaders (line 482) | public static function getRegisteredLoaders()
method findFileWithExtension (line 492) | private function findFileWithExtension($class, $ext)
method initializeIncludeClosure (line 561) | private static function initializeIncludeClosure()
FILE: include/vendor/composer/InstalledVersions.php
class InstalledVersions (line 27) | class InstalledVersions
method getInstalledPackages (line 57) | public static function getInstalledPackages()
method getInstalledPackagesByType (line 78) | public static function getInstalledPackagesByType($type)
method isInstalled (line 102) | public static function isInstalled($packageName, $includeDevRequiremen...
method satisfies (line 125) | public static function satisfies(VersionParser $parser, $packageName, ...
method getVersionRanges (line 142) | public static function getVersionRanges($packageName)
method getVersion (line 173) | public static function getVersion($packageName)
method getPrettyVersion (line 194) | public static function getPrettyVersion($packageName)
method getReference (line 215) | public static function getReference($packageName)
method getInstallPath (line 236) | public static function getInstallPath($packageName)
method getRootPackage (line 253) | public static function getRootPackage()
method getRawData (line 267) | public static function getRawData()
method getAllRawData (line 290) | public static function getAllRawData()
method reload (line 313) | public static function reload($data)
method getInstalled (line 329) | private static function getInstalled()
FILE: include/vendor/composer/autoload_real.php
class ComposerAutoloaderInit69db1f271801e9da41f8ec97675be152 (line 5) | class ComposerAutoloaderInit69db1f271801e9da41f8ec97675be152
method loadClassLoader (line 9) | public static function loadClassLoader($class)
method getLoader (line 19) | public static function getLoader()
FILE: include/vendor/composer/autoload_static.php
class ComposerStaticInit69db1f271801e9da41f8ec97675be152 (line 7) | class ComposerStaticInit69db1f271801e9da41f8ec97675be152
method getInitializer (line 45) | public static function getInitializer(ClassLoader $loader)
FILE: include/vendor/composer/ca-bundle/src/CaBundle.php
class CaBundle (line 21) | class CaBundle
method getSystemCaRootBundlePath (line 65) | public static function getSystemCaRootBundlePath(?LoggerInterface $log...
method getBundledCaBundlePath (line 122) | public static function getBundledCaBundlePath()
method validateCaFile (line 157) | public static function validateCaFile($filename, ?LoggerInterface $log...
method isOpensslParseSafe (line 194) | public static function isOpensslParseSafe()
method reset (line 203) | public static function reset()
method getEnvVariable (line 213) | private static function getEnvVariable($name)
method caFileUsable (line 231) | private static function caFileUsable($certFile, ?LoggerInterface $logg...
method caDirUsable (line 244) | private static function caDirUsable($certDir, ?LoggerInterface $logger...
method isFile (line 257) | private static function isFile($certFile, ?LoggerInterface $logger = n...
method isDir (line 272) | private static function isDir($certDir, ?LoggerInterface $logger = null)
method isReadable (line 287) | private static function isReadable($certFileOrDir, ?LoggerInterface $l...
method glob (line 302) | private static function glob($pattern, ?LoggerInterface $logger = null)
FILE: include/vendor/erusev/parsedown/Parsedown.php
class Parsedown (line 16) | class Parsedown
method text (line 24) | function text($text)
method setBreaksEnabled (line 51) | function setBreaksEnabled($breaksEnabled)
method setMarkupEscaped (line 60) | function setMarkupEscaped($markupEscaped)
method setUrlsLinked (line 69) | function setUrlsLinked($urlsLinked)
method setSafeMode (line 78) | function setSafeMode($safeMode)
method lines (line 144) | protected function lines(array $lines)
method isBlockContinuable (line 307) | protected function isBlockContinuable($Type)
method isBlockCompletable (line 312) | protected function isBlockCompletable($Type)
method blockCode (line 320) | protected function blockCode($Line, $Block = null)
method blockCodeContinue (line 346) | protected function blockCodeContinue($Line, $Block)
method blockCodeComplete (line 367) | protected function blockCodeComplete($Block)
method blockComment (line 379) | protected function blockComment($Line)
method blockCommentContinue (line 401) | protected function blockCommentContinue($Line, array $Block)
method blockFencedCode (line 421) | protected function blockFencedCode($Line)
method blockFencedCodeContinue (line 466) | protected function blockFencedCodeContinue($Line, $Block)
method blockFencedCodeComplete (line 494) | protected function blockFencedCodeComplete($Block)
method blockHeader (line 506) | protected function blockHeader($Line)
method blockList (line 539) | protected function blockList($Line)
method blockListContinue (line 578) | protected function blockListContinue($Line, array $Block)
method blockListComplete (line 636) | protected function blockListComplete(array $Block)
method blockQuote (line 655) | protected function blockQuote($Line)
method blockQuoteContinue (line 671) | protected function blockQuoteContinue($Line, array $Block)
method blockRule (line 698) | protected function blockRule($Line)
method blockSetextHeader (line 715) | protected function blockSetextHeader($Line, array $Block)
method blockMarkup (line 733) | protected function blockMarkup($Line)
method blockMarkupContinue (line 785) | protected function blockMarkupContinue($Line, array $Block)
method blockReference (line 824) | protected function blockReference($Line)
method blockTable (line 853) | protected function blockTable($Line, array $Block)
method blockTableContinue (line 960) | protected function blockTableContinue($Line, array $Block)
method paragraph (line 1014) | protected function paragraph($Line)
method line (line 1054) | public function line($text, $nonNestables=array())
method inlineCode (line 1138) | protected function inlineCode($Excerpt)
method inlineEmailTag (line 1157) | protected function inlineEmailTag($Excerpt)
method inlineEmphasis (line 1181) | protected function inlineEmphasis($Excerpt)
method inlineEscapeSequence (line 1213) | protected function inlineEscapeSequence($Excerpt)
method inlineImage (line 1224) | protected function inlineImage($Excerpt)
method inlineLink (line 1258) | protected function inlineLink($Excerpt)
method inlineMarkup (line 1330) | protected function inlineMarkup($Excerpt)
method inlineSpecialCharacter (line 1362) | protected function inlineSpecialCharacter($Excerpt)
method inlineStrikethrough (line 1383) | protected function inlineStrikethrough($Excerpt)
method inlineUrl (line 1403) | protected function inlineUrl($Excerpt)
method inlineUrlTag (line 1430) | protected function inlineUrlTag($Excerpt)
method unmarkedText (line 1451) | protected function unmarkedText($text)
method element (line 1470) | protected function element(array $Element)
method elements (line 1539) | protected function elements(array $Elements)
method li (line 1555) | protected function li($lines)
method parse (line 1578) | function parse($text)
method sanitiseElement (line 1585) | protected function sanitiseElement(array $Element)
method filterUnsafeUrlInAttribute (line 1618) | protected function filterUnsafeUrlInAttribute(array $Element, $attribute)
method escape (line 1637) | protected static function escape($text, $allowQuotes = false)
method striAtStart (line 1642) | protected static function striAtStart($string, $needle)
method instance (line 1656) | static function instance($name = 'default')
FILE: include/vendor/mapscript.php
class mapscript (line 31) | abstract class mapscript {
method msSaveImage (line 640) | static function msSaveImage($map,$img,$filename) {
method msFreeImage (line 644) | static function msFreeImage($img) {
method msSetup (line 648) | static function msSetup() {
method msCleanup (line 652) | static function msCleanup() {
method msLoadMapFromString (line 656) | static function msLoadMapFromString($buffer,$new_mappath,$config) {
method msGetErrorObj (line 780) | static function msGetErrorObj() {
method msResetErrorList (line 790) | static function msResetErrorList() {
method msGetVersion (line 794) | static function msGetVersion() {
method msGetVersionInt (line 798) | static function msGetVersionInt() {
method msGetErrorString (line 802) | static function msGetErrorString($delimiter) {
method msLoadConfig (line 892) | static function msLoadConfig($ms_config_file) {
method msFreeConfig (line 902) | static function msFreeConfig($config) {
method msConfigGetEnv (line 906) | static function msConfigGetEnv($config,$key) {
method msCo
Copy disabled (too large)
Download .json
Condensed preview — 1813 files, each showing path, character count, and a content snippet. Download the .json file for the full structured content (22,979K chars).
[
{
"path": ".deepsource.toml",
"chars": 461,
"preview": "version = 1\n\ntest_patterns = [\"**/tests/**\"]\n\nexclude_patterns = [\n \"include/vendor/**\",\n \"include/jpgraph/**\",\n]\n"
},
{
"path": ".editorconfig",
"chars": 840,
"preview": "# EditorConfig helps maintain consistent coding styles between editors and IDEs.\n# See https://editorconfig.org\n# Root m"
},
{
"path": ".github/ci_db_testdata.py",
"chars": 3036,
"preview": "\"\"\"Update The Test Database.\n\nThe test database instance for CI has static data for testing. This is static\nfrom the ti"
},
{
"path": ".github/copilot-instructions.md",
"chars": 4949,
"preview": "# IEM Repo\n\nEvery time you choose to apply a rule(s), explicitly state the rule(s) in the\noutput. You can abbreviate the"
},
{
"path": ".github/dependabot.yml",
"chars": 384,
"preview": "version: 2\nupdates:\n - package-ecosystem: \"github-actions\"\n directory: \"/\"\n schedule:\n interval: \"monthly\"\n "
},
{
"path": ".github/ms_environment.yml",
"chars": 28,
"preview": "dependencies:\n - mapserver\n"
},
{
"path": ".github/setupdata.sh",
"chars": 1985,
"preview": "# Ensure we error out\nset -x -e\n# Paths are setup in setuppaths.sh\npython .github/ci_db_testdata.py\npython scripts/dbuti"
},
{
"path": ".github/setuppaths.sh",
"chars": 390,
"preview": "set -e -x\n# Only path setups here, adding data handled in setupdata.sh\nsudo ln -s `pwd` /opt/iem\n# Kind of hacky, but th"
},
{
"path": ".github/workflows/build.yml",
"chars": 6162,
"preview": "name: IEM CI\non:\n pull_request:\n branches:\n - main\n push:\n branches:\n - main\n\njobs:\n build:\n defau"
},
{
"path": ".github/workflows/codeql.yml",
"chars": 930,
"preview": "name: \"CodeQL\"\n\non:\n push:\n branches: [ \"main\" ]\n pull_request:\n branches: [ \"main\" ]\n schedule:\n - cron: \"2"
},
{
"path": ".github/workflows/etchosts.txt",
"chars": 1256,
"preview": "127.0.0.1 iem.local\n127.0.0.1 iemdb.local\n127.0.0.1 iemdb-hads.local\n127.0.0.1 iemdb-mos.local\n127.0.0.1 iemdb-idep.loca"
},
{
"path": ".github/workflows/mapserver.yml",
"chars": 1382,
"preview": "name: Test Mapserver Files\non:\n pull_request:\n branches:\n - main\n push:\n branches:\n - main\njobs:\n bui"
},
{
"path": ".github/workflows/publish-iemjs.yml",
"chars": 2719,
"preview": "name: Publish iemjs to npm\n\non:\n push:\n tags:\n - 'iemjs-v*' # Triggers on tags like iemjs-v1.0.0, iemjs-v1.2.3"
},
{
"path": ".github/workflows/test-iemjs.yml",
"chars": 1689,
"preview": "name: Test iemjs package\n\non:\n push:\n branches: [ main, master ]\n paths:\n - 'src/iemjs/**'\n - '.github/"
},
{
"path": ".gitignore",
"chars": 253,
"preview": "/.settings\n/.buildpath\n/.project\n/.pydevproject\n**/fe.py\n/.vscode\n**/gemglb.nts\n**/last.nts\n/config/settings.inc.php\nnod"
},
{
"path": ".pre-commit-config.yaml",
"chars": 593,
"preview": "ci:\n autoupdate_schedule: quarterly\nrepos:\n - repo: https://github.com/pre-commit/mirrors-eslint\n rev: 'v10.3.0'\n "
},
{
"path": ".prettierrc",
"chars": 470,
"preview": "{\n \"semi\": true,\n \"trailingComma\": \"es5\",\n \"singleQuote\": true,\n \"printWidth\": 100,\n \"tabWidth\": 4,\n \"useTabs\": fa"
},
{
"path": "LICENSE",
"chars": 1065,
"preview": "Copyright (c) 2005 Iowa State University\n\nPermission is hereby granted, free of charge, to any person obtaining\na copy o"
},
{
"path": "README.md",
"chars": 1332,
"preview": "# Iowa Environmental Mesonet\n\n If using this code causes your server to have kittens, it is your own fault.\n\nThis mon"
},
{
"path": "cgi-bin/afos/retrieve.py",
"chars": 264,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/afos/retrieve.py\nUser documentation available"
},
{
"path": "cgi-bin/climate/orc.py",
"chars": 258,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/climate/orc.py\nUser documentation available a"
},
{
"path": "cgi-bin/geocoder.py",
"chars": 249,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/geocoder.py\nUser documentation available at h"
},
{
"path": "cgi-bin/index.php",
"chars": 32,
"preview": "<?php\nHeader(\"Location: /api\");\n"
},
{
"path": "cgi-bin/mywindrose.py",
"chars": 255,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/mywindrose.py\nUser documentation available at"
},
{
"path": "cgi-bin/onsite/birthday/getweather.py",
"chars": 121,
"preview": "\"\"\"Implementation at pylib/iemweb/getweather.py\"\"\"\n\nfrom iemweb.getweather import application\n\n__all__ = [\"application\"]"
},
{
"path": "cgi-bin/precip/catAZOS.py",
"chars": 267,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/precip/catAZOS.py\nUser documentation availabl"
},
{
"path": "cgi-bin/precip/catSNET.py",
"chars": 267,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/precip/catSNET.py\nUser documentation availabl"
},
{
"path": "cgi-bin/request/asos.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/asos.py\nUser documentation available "
},
{
"path": "cgi-bin/request/asos1min.py",
"chars": 273,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/asos1min.py\nUser documentation availa"
},
{
"path": "cgi-bin/request/coop.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/coop.py\nUser documentation available "
},
{
"path": "cgi-bin/request/coopobs.py",
"chars": 270,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/coopobs.py\nUser documentation availab"
},
{
"path": "cgi-bin/request/daily.py",
"chars": 264,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/daily.py\nUser documentation available"
},
{
"path": "cgi-bin/request/feel.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/feel.py\nUser documentation available "
},
{
"path": "cgi-bin/request/gis/awc_gairmets.py",
"chars": 297,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/awc_gairmets.py\nUser documentatio"
},
{
"path": "cgi-bin/request/gis/cwas.py",
"chars": 273,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/cwas.py\nUser documentation availa"
},
{
"path": "cgi-bin/request/gis/lsr.py",
"chars": 270,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/lsr.py\nUser documentation availab"
},
{
"path": "cgi-bin/request/gis/misc.py",
"chars": 273,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/misc.py\nUser documentation availa"
},
{
"path": "cgi-bin/request/gis/nexrad_storm_attrs.py",
"chars": 315,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/nexrad_storm_attrs.py\nUser docume"
},
{
"path": "cgi-bin/request/gis/pireps.py",
"chars": 279,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/pireps.py\nUser documentation avai"
},
{
"path": "cgi-bin/request/gis/sigmets.py",
"chars": 282,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/sigmets.py\nUser documentation ava"
},
{
"path": "cgi-bin/request/gis/spc_mcd.py",
"chars": 282,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_mcd.py\nUser documentation ava"
},
{
"path": "cgi-bin/request/gis/spc_outlooks.py",
"chars": 297,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_outlooks.py\nUser documentatio"
},
{
"path": "cgi-bin/request/gis/spc_watch.py",
"chars": 288,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/spc_watch.py\nUser documentation a"
},
{
"path": "cgi-bin/request/gis/sps.py",
"chars": 270,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/sps.py\nUser documentation availab"
},
{
"path": "cgi-bin/request/gis/watch_by_county.py",
"chars": 306,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/watch_by_county.py\nUser documenta"
},
{
"path": "cgi-bin/request/gis/watchwarn.py",
"chars": 288,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/watchwarn.py\nUser documentation a"
},
{
"path": "cgi-bin/request/gis/wpc_mpd.py",
"chars": 282,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/gis/wpc_mpd.py\nUser documentation ava"
},
{
"path": "cgi-bin/request/grx_rings.py",
"chars": 276,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/grx_rings.py\nUser documentation avail"
},
{
"path": "cgi-bin/request/hads.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hads.py\nUser documentation available "
},
{
"path": "cgi-bin/request/hml.py",
"chars": 258,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hml.py\nUser documentation available a"
},
{
"path": "cgi-bin/request/hourlyprecip.py",
"chars": 285,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/hourlyprecip.py\nUser documentation av"
},
{
"path": "cgi-bin/request/index.php",
"chars": 34,
"preview": "<?php\n\nheader(\"Location: /api/\");\n"
},
{
"path": "cgi-bin/request/isusm.py",
"chars": 264,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/isusm.py\nUser documentation available"
},
{
"path": "cgi-bin/request/metars.py",
"chars": 267,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/metars.py\nUser documentation availabl"
},
{
"path": "cgi-bin/request/mos.py",
"chars": 258,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/mos.py\nUser documentation available a"
},
{
"path": "cgi-bin/request/nass_iowa.py",
"chars": 276,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/nass_iowa.py\nUser documentation avail"
},
{
"path": "cgi-bin/request/nlaeflux.py",
"chars": 273,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/nlaeflux.py\nUser documentation availa"
},
{
"path": "cgi-bin/request/normals.py",
"chars": 270,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/normals.py\nUser documentation availab"
},
{
"path": "cgi-bin/request/other.py",
"chars": 125,
"preview": "\"\"\"implemented in /pylib/iemweb/request/other.py\"\"\"\n\nfrom iemweb.request.other import application\n\n__all__ = [\"applicati"
},
{
"path": "cgi-bin/request/purpleair.py",
"chars": 276,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/purpleair.py\nUser documentation avail"
},
{
"path": "cgi-bin/request/raob.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/raob.py\nUser documentation available "
},
{
"path": "cgi-bin/request/raster2netcdf.py",
"chars": 288,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/raster2netcdf.py\nUser documentation a"
},
{
"path": "cgi-bin/request/rwis.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/rwis.py\nUser documentation available "
},
{
"path": "cgi-bin/request/scan.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/scan.py\nUser documentation available "
},
{
"path": "cgi-bin/request/scp.py",
"chars": 258,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/scp.py\nUser documentation available a"
},
{
"path": "cgi-bin/request/smos.py",
"chars": 261,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/smos.py\nUser documentation available "
},
{
"path": "cgi-bin/request/ss.py",
"chars": 119,
"preview": "\"\"\"implemented in /pylib/iemweb/request/ss.py\"\"\"\n\nfrom iemweb.request.ss import application\n\n__all__ = [\"application\"]\n"
},
{
"path": "cgi-bin/request/taf.py",
"chars": 258,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/taf.py\nUser documentation available a"
},
{
"path": "cgi-bin/request/talltowers.py",
"chars": 279,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/talltowers.py\nUser documentation avai"
},
{
"path": "cgi-bin/request/tempwind_aloft.py",
"chars": 291,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/tempwind_aloft.py\nUser documentation "
},
{
"path": "cgi-bin/request/uscrn.py",
"chars": 264,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/uscrn.py\nUser documentation available"
},
{
"path": "cgi-bin/request/wmo_bufr_srf.py",
"chars": 285,
"preview": "\"\"\"Implementation at https://github.com/akrherz/iem/blob/main/pylib/iemweb/request/wmo_bufr_srf.py\nUser documentation av"
},
{
"path": "cgi-bin/wms/goes/alaska_ir.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/alaska_ir.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/alaska_vis.cgi",
"chars": 86,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/alaska_vis.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/alaska_wv.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/alaska_wv.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/conus_ir.cgi",
"chars": 147,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/goes/conus_ir.map\n"
},
{
"path": "cgi-bin/wms/goes/conus_vis.cgi",
"chars": 148,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/goes/conus_vis.map"
},
{
"path": "cgi-bin/wms/goes/conus_wv.cgi",
"chars": 147,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/goes/conus_wv.map\n"
},
{
"path": "cgi-bin/wms/goes/east_ir.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/east_ir.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/east_vis.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/east_vis.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/east_wv.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/east_wv.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/goes.cgi",
"chars": 81,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/goes.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/hawaii_ir.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/hawaii_ir.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/hawaii_vis.cgi",
"chars": 86,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/hawaii_vis.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/hawaii_wv.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/hawaii_wv.map\nexport MS_MAPFILE\n\nmapserv"
},
{
"path": "cgi-bin/wms/goes/west_ir.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/west_ir.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/west_vis.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/west_vis.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes/west_wv.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes/west_wv.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes_east.cgi",
"chars": 81,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes_east.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/goes_west.cgi",
"chars": 81,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/goes_west.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/hrrr/refd.cgi",
"chars": 149,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/model/hrrr_refd.ma"
},
{
"path": "cgi-bin/wms/hrrr/refp.cgi",
"chars": 149,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/model/hrrr_refp.ma"
},
{
"path": "cgi-bin/wms/idep.cgi",
"chars": 76,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/idep.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/index.php",
"chars": 32,
"preview": "<?php\nHeader(\"Location: /ogc\");\n"
},
{
"path": "cgi-bin/wms/iowa/rainfall.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/iowa/rainfall.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/iowa/roadcond.cgi",
"chars": 85,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/iowa/roadcond.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/daa.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/daa.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/dta.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/dta.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/eet.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/eet.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/n0q-t.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/n0q-t.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/n0r-t.cgi",
"chars": 146,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/n0r-t.map\ne"
},
{
"path": "cgi-bin/wms/nexrad/n1p.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/daa.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/net.cgi",
"chars": 144,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/net.map\nexp"
},
{
"path": "cgi-bin/wms/nexrad/ntp.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/dta.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/nexrad/ridge.cgi",
"chars": 146,
"preview": "#!/bin/sh\n#echo -e \"Content-type: text/plain\\n\\n\"\n#echo -e \"\\n\"\n#exit 0\n\nMS_MAPFILE=/opt/iem/data/wms/nexrad/ridge.map\ne"
},
{
"path": "cgi-bin/wms/q2.cgi",
"chars": 74,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/q2.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/counties.cgi",
"chars": 81,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/political.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/mrms.cgi",
"chars": 79,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/us/mrms.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/mrms_nn.cgi",
"chars": 82,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/us/mrms_nn.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/obs.cgi",
"chars": 78,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/us/obs.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/roadtemps.cgi",
"chars": 84,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/us/roadtemps.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "cgi-bin/wms/us/states.cgi",
"chars": 81,
"preview": "#!/bin/sh\n\nMS_MAPFILE=/opt/iem/data/wms/political.map\nexport MS_MAPFILE\n\nmapserv\n"
},
{
"path": "config/00iem-ssl.conf",
"chars": 732,
"preview": "<VirtualHost *:443>\n # Use a daily deadicated log file, this avoids server reloads every day\n # which are not much fun"
},
{
"path": "config/00iem.conf",
"chars": 284,
"preview": "<VirtualHost *:80>\n # Use a daily deadicated log file, this avoids server reloads every day\n # which are not much fun "
},
{
"path": "config/backend.conf",
"chars": 1032,
"preview": "# It turns out that backending everything with one mapserv.fcgi instance\n# was not ideal as having one slow node would q"
},
{
"path": "config/iem-archive.conf",
"chars": 453,
"preview": "# backend for /archive/data requests from webfarm\n<VirtualHost *:80>\n ServerName iem-archive.agron.iastate.edu\n Server"
},
{
"path": "config/mesonet-longterm-vhost.conf",
"chars": 949,
"preview": "# apache vhost file for mesonet-longterm.agron.iastate.edu\n# This now resides on anticyclone\n\n<VirtualHost 129.186.185.7"
},
{
"path": "config/mesonet.inc",
"chars": 11272,
"preview": "# Apache vhost configuration for IEM\n\n# mod_wsgi is configured from https://github.com/akrherz/iemwebfarm\n# DirectoryInd"
},
{
"path": "config/navbar.json",
"chars": 11390,
"preview": "{\n \"tabs\": [\n {\n \"title\": \"Apps\",\n \"subs\": [\n {\n \"titl"
},
{
"path": "config/settings.inc.php.in",
"chars": 931,
"preview": "<?php\n/**\n * This is a template file for the settings.inc.php file that is used to\n * configure the IEM. You should cop"
},
{
"path": "conftest.py",
"chars": 281,
"preview": "\"\"\"Centralized Testing Stuff.\"\"\"\n\nimport pytest\nfrom pyiem.database import get_dbconnc\n\n\n@pytest.fixture\ndef dbcursor(da"
},
{
"path": "data/gis/avl/iemrainfall.avl",
"chars": 4467,
"preview": "/3.1\r\n(ODB.1\r\n\tFirstRootClassName:\t\"Legend\"\r\n\tRoots:\t2\r\n\tVersion:\t31\r\n)\r\n\r\n(Legend.2\r\n\tSymType:\t0x02\r\n\tLegType:\t0x02\r\n\tC"
},
{
"path": "data/gis/base.sym",
"chars": 555,
"preview": "SYMBOLSET\n\nSYMBOL\n NAME 'circle'\n TYPE ELLIPSE\n Filled TRUE\n POINTS 1 1 END\nEND\n\nSYMBOL\n NAME \"triangle\"\n TYPE vec"
},
{
"path": "data/gis/fonts.list",
"chars": 285,
"preview": "liberation-bold\t/usr/share/fonts/liberation-serif/LiberationSerif-Bold.ttf\nliberation /usr/share/fonts/liberation-s"
},
{
"path": "data/gis/iem.mapinc",
"chars": 11763,
"preview": "#\n# AWIPS Cities\n#\nLAYER\n NAME 'cities'\n METADATA\n \"wms_title\" \"city\"\n END\n PROJECTION\n \"init=epsg:432"
},
{
"path": "data/gis/lsrs.mapinc",
"chars": 3249,
"preview": "LAYER\n CONNECTIONTYPE postgis\n NAME lsrs\n CONNECTION \"user=nobody dbname=postgis host=iemdb-postgis.local\"\n DATA \"ge"
},
{
"path": "data/gis/meta/26914.prj",
"chars": 424,
"preview": "PROJCS[\"NAD_1983_UTM_Zone_14N\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",637813"
},
{
"path": "data/gis/meta/26915.prj",
"chars": 424,
"preview": "PROJCS[\"NAD_1983_UTM_Zone_15N\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_1980\",637813"
},
{
"path": "data/gis/meta/5070.prj",
"chars": 459,
"preview": "PROJCS[\"NAD_1983_Contiguous_USA_Albers\",GEOGCS[\"GCS_North_American_1983\",DATUM[\"D_North_American_1983\",SPHEROID[\"GRS_198"
},
{
"path": "data/gis/meta/current_ww.shp.xml",
"chars": 8584,
"preview": "<?xml version=\"1.0\"?>\r\n<!--<!DOCTYPE metadata SYSTEM \"http://www.esri.com/metadata/esriprof80.dtd\">-->\r\n<metadata xml:la"
},
{
"path": "data/gis/roads.mapinc",
"chars": 6824,
"preview": "LAYER\n CONNECTIONTYPE postgis\n NAME \"roads\"\n CONNECTION \"user=nobody dbname=postgis host=iemdb-postgis.local\"\n DATA "
},
{
"path": "data/gis/stations.sym",
"chars": 2484,
"preview": "SYMBOLSET\n\n SYMBOL\n NAME 'circle'\n TYPE ELLIPSE\n Filled TRUE\n POINTS 1 1 END\n END\n\n\n SYMBOL\n TYPE vector\n PO"
},
{
"path": "data/gis/symbols/stations.sym",
"chars": 2074,
"preview": "SYMBOLSET\n SYMBOL\n NAME 'circle'\n TYPE ELLIPSE\n Filled TRUE\n POINTS 1 1 END\n END\n\n\n SYMBOL\n TYPE vector\n POI"
},
{
"path": "deployment/iem-tilecache.service",
"chars": 560,
"preview": "[Unit]\nDescription=IEM TileCache Gunicorn backend (/c and /cache)\nAfter=network.target\nBefore=httpd.service\n\n[Service]\nT"
},
{
"path": "deployment/start_tc_wsgi.sh",
"chars": 1365,
"preview": "#!/bin/bash\n# Start the dedicated Gunicorn backend for TileCache (/c and /cache).\n#\n# Mirrors the legacy iemwsgi_tc daem"
},
{
"path": "deployment/symlink_manager.py",
"chars": 4166,
"preview": "\"\"\"Attempt to manage the disaster that is IEM symlinking\"\"\"\n\nfrom pathlib import Path\n\nfrom pyiem.util import logger\n\nLO"
},
{
"path": "docs/datasets/afos.md",
"chars": 3043,
"preview": "## <a name=\"afos\"></a> NWS Text Product Archive\n\n### Summary\n\nThis archive consists of raw ASCII text products issued by"
},
{
"path": "docs/datasets/climodat.md",
"chars": 5682,
"preview": "## <a name=\"climodat\"></a> IEM Climodat Reports and Data\n\n### Summary\n\nThis document describes the once daily climate da"
},
{
"path": "docs/datasets/iemre.md",
"chars": 1361,
"preview": "## <a name=\"iemre\"></a> IEM Reanalysis\n\n### Summary\n\nThe IEM Reanalysis dataset is a daily gridded product combining a n"
},
{
"path": "docs/datasets/metar.md",
"chars": 5444,
"preview": "## <a name=\"metar\"></a>ASOS/AWOS Global METAR Archives\n\n### Summary\n\nThe primary format that worldwide airport weather s"
},
{
"path": "docs/datasets/template.md",
"chars": 675,
"preview": "## <a name=\"template\"></a> IEM Template [WIP]\n\n### Summary\n\nThis is...\n\n* __Download Interface__: [IEM On-Demand](https:"
},
{
"path": "docs/datasets/vtec.md",
"chars": 14795,
"preview": "# <a name=\"vtec\"></a> NWS Valid Time Extent Code (VTEC) Archives\n\n## Summary\n\nThe National Weather Service uses a rather"
},
{
"path": "docs/deployment/vendor-static-assets.md",
"chars": 836,
"preview": "# Vendor Static Assets Deployment\n\nThis document explains how assets under /vendor/ are provided to the webroot.\n\n## Why"
},
{
"path": "docs/meetings.md",
"chars": 4335,
"preview": "Assorted Meeting Notes\n=====\n\n14 Jan 2020 Dr Takle, Iowa Climate Assessment\n----\n\n- Seeking to have first Iowa specific "
},
{
"path": "docs/nmp.md",
"chars": 386,
"preview": "National Mesonet Project Meetings\n======\n\n25 Jan 2017 SGT Conference call at AMS Seattle\n----\n\n- Background of SGT, prim"
},
{
"path": "docs/soilmoisture.md",
"chars": 6583,
"preview": "Soil Moisture Network Meeting Notes\n===================================\n\n17 May 2021 :: Planning with new hire Mark\n----"
},
{
"path": "docs/yieldproject.md",
"chars": 3032,
"preview": "FACTs Project Meeting Notes\n========\n\n26 Jun 2019 Archontoulis Angelos\n----\n\n- For next year, the PSIMs domain may expan"
},
{
"path": "environment.yml",
"chars": 1998,
"preview": "dependencies:\n # NB: these are requirements of code in this repo\n # autoplot uses\n - affine\n # pytest\n - beautifuls"
},
{
"path": "eslint.config.js",
"chars": 14468,
"preview": "// Legacy CommonJS ESLint configuration for pre-commit compatibility\nconst js = require(\"@eslint/js\");\nconst globals = r"
},
{
"path": "htdocs/.well-known/ai-plugin.json",
"chars": 622,
"preview": "{\n \"schema_version\": \"v1\",\n \"name_for_human\": \"IEM Plugin\",\n \"name_for_model\": \"iem\",\n \"description_for_huma"
},
{
"path": "htdocs/.well-known/traffic-advice",
"chars": 58,
"preview": "[\n {\"user_agent\": \"prefetch-proxy\", \"disallow\": true}\n]"
},
{
"path": "htdocs/ASOS/current.phtml",
"chars": 10283,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 7);\nrequire_once \"../../include/myview.php\";\nreq"
},
{
"path": "htdocs/ASOS/index.phtml",
"chars": 4957,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 21);\nrequire_once '../../include/myview.php';\n\n$"
},
{
"path": "htdocs/ASOS/precipnote.phtml",
"chars": 4474,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\n$t = new MyView();\n$t->titl"
},
{
"path": "htdocs/ASOS/recent.css",
"chars": 368,
"preview": "/* Ensure the region scrolls nicely if tall */\n.table-responsive { max-height: 70vh; overflow: auto; }\n\n/* Sticky header"
},
{
"path": "htdocs/ASOS/recent.module.js",
"chars": 4418,
"preview": "\nlet report = 'snowdepth';\n\nconst getAllowedReports = (select) => new Set([...select.options].map((opt) => opt.value));\n"
},
{
"path": "htdocs/ASOS/recent.phtml",
"chars": 2964,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 104);\nrequire_once \"../../include/myview.php\";\n$"
},
{
"path": "htdocs/ASOS/reports/mon_prec.css",
"chars": 7634,
"preview": "/* Bootstrap 5 enhancements for Monthly Precipitation Report */\n\n/* Tabulator container styling */\n#tabulator-container "
},
{
"path": "htdocs/ASOS/reports/mon_prec.module.js",
"chars": 9061,
"preview": "// Tabulator-based Monthly Precipitation Report\n// Replaces ExtJS TableGrid implementation with modern Tabulator\nimport "
},
{
"path": "htdocs/ASOS/reports/mon_prec.php",
"chars": 5873,
"preview": "<?php\nrequire_once \"../../../config/settings.inc.php\";\nrequire_once \"../../../include/myview.php\";\nrequire_once \"../../."
},
{
"path": "htdocs/AWOS/current.phtml",
"chars": 47,
"preview": "<?php\nheader(\"Location: /ASOS/current.phtml\");\n"
},
{
"path": "htdocs/AWOS/index.phtml",
"chars": 1561,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 64);\nrequire_once \"../../include/myview.php\";\n$t"
},
{
"path": "htdocs/AWOS/reports/mon_prec.php",
"chars": 54,
"preview": "<?php\nheader(\"Location: /ASOS/reports/mon_prec.php\");\n"
},
{
"path": "htdocs/AWOS/skyc.phtml",
"chars": 2405,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\n$t = new MyView();\n$t->titl"
},
{
"path": "htdocs/COOP/7am-app.js",
"chars": 14766,
"preview": "/* global ol */\nlet renderattr = 'pday';\nlet map = null;\nlet coopLayer = null;\nlet azosLayer = null;\nlet mrmsLayer = nul"
},
{
"path": "htdocs/COOP/7am.css",
"chars": 766,
"preview": ".map {\n height: 400px;\n width: 100%;\n background-color: #FFFFFF;\n}\n\n.popover {\n width: 300px;\n}\n\n/* Custom p"
},
{
"path": "htdocs/COOP/7am.php",
"chars": 4085,
"preview": "<?php\n$OL = \"10.6.1\";\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 86);\nrequire_once \"../../include"
},
{
"path": "htdocs/COOP/cat.module.js",
"chars": 861,
"preview": "let currentmode = true;\n\n/**\n * Toggle visibility of table rows without data\n */\nfunction hiderows() {\n const noDataR"
},
{
"path": "htdocs/COOP/cat.phtml",
"chars": 8285,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 4);\nrequire_once \"../../include/forms.php\";\nrequ"
},
{
"path": "htdocs/COOP/current.phtml",
"chars": 9279,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 41);\nrequire_once \"../../include/network.php\";\nr"
},
{
"path": "htdocs/COOP/dl/normals.phtml",
"chars": 2743,
"preview": "<?php \nrequire_once \"../../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 118);\nrequire_once \"../../../include/myview."
},
{
"path": "htdocs/COOP/extremes.css",
"chars": 13765,
"preview": "/* COOP Extremes App Styles */\n\n/* Loading indicator */\n.spinner-border {\n width: 3rem;\n height: 3rem;\n}\n\n/* Stick"
},
{
"path": "htdocs/COOP/extremes.js",
"chars": 51188,
"preview": "/**\n * COOP Extremes App - Simple function-based implementation\n * Handles data fetching, table rendering, and sorting f"
},
{
"path": "htdocs/COOP/extremes.php",
"chars": 7094,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 2);\nrequire_once \"../../include/myview.php\";\nreq"
},
{
"path": "htdocs/COOP/freezing.php",
"chars": 4426,
"preview": "<?php\ndefine(\"IEM_APPID\", 158);\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/forms.php\";\nre"
},
{
"path": "htdocs/COOP/hpd.php",
"chars": 2914,
"preview": "<?php\n// List out HPD data for a date and station of your choice\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"I"
},
{
"path": "htdocs/COOP/index.css",
"chars": 196,
"preview": "div.tease {\n margin: 5px;\n padding: 5px;\n width: 400px;\n background: #e8cc84;\n float: left;\n}\ndiv.tease img {\n margin-ri"
},
{
"path": "htdocs/COOP/index.phtml",
"chars": 9911,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\nrequire_once \"../../include"
},
{
"path": "htdocs/COOP/map/index.css",
"chars": 879,
"preview": "/* Climap Application Styles */\n\n.map {\n height: 70vh;\n width: 100%;\n border: 1px solid #dee2e6;\n border-rad"
},
{
"path": "htdocs/COOP/map/index.js",
"chars": 12451,
"preview": "/* global ol */\nlet renderattr = 'high';\nlet vectorLayer = null;\nlet map = null;\nlet popup = null;\nlet fontSize = 14;\n\n/"
},
{
"path": "htdocs/COOP/map/index.php",
"chars": 3697,
"preview": "<?php\nrequire_once \"../../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 168);\nrequire_once \"../../../include/myview.p"
},
{
"path": "htdocs/COOP/periods.phtml",
"chars": 4068,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\nrequire_once \"../../include"
},
{
"path": "htdocs/COOP/snowd_duration.phtml",
"chars": 2732,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 42);\nrequire_once \"../../include/myview.php\";\n$t"
},
{
"path": "htdocs/DCP/cat.phtml",
"chars": 4089,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/database.inc.php\";\nrequire_once \"../../i"
},
{
"path": "htdocs/DCP/current.phtml",
"chars": 4944,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 75);\nrequire_once \"../../include/myview.php\";\n$t"
},
{
"path": "htdocs/DCP/index.phtml",
"chars": 2667,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\n$t = new MyView();\n$t->titl"
},
{
"path": "htdocs/DCP/map.css",
"chars": 627,
"preview": ".map {\n height: 400px;\n width: 100%;\n background-color: #D2B48C;\n}\n.popover {\n width: 300px;\n}\n\n/* Custom po"
},
{
"path": "htdocs/DCP/map.js",
"chars": 11287,
"preview": "/* global ol */\nlet physical_code = 'EP';\nlet duration = 'D';\nlet days = 2;\nlet vectorLayer = null;\nlet map = null;\nlet "
},
{
"path": "htdocs/DCP/map.php",
"chars": 22848,
"preview": "<?php \n/**\n * Produce a map of SHEF values\n */\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 119);\nr"
},
{
"path": "htdocs/DCP/plot.module.js",
"chars": 11920,
"preview": "// ES Module for DCP plotting application\n\nimport { escapeHTML, requireSelectElement } from '/js/iemjs/domUtils.js';\nimp"
},
{
"path": "htdocs/DCP/plot.php",
"chars": 1764,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/database.inc.php\";\nrequire_once \"../../i"
},
{
"path": "htdocs/DCP/plot.phtml",
"chars": 2484,
"preview": "<?php \nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\n$t = new MyView();\n\n$t->js"
},
{
"path": "htdocs/DCP/site.css",
"chars": 73,
"preview": "#map {\n width: 100%;\n height: 400px;\n border: 2px solid black;\n}"
},
{
"path": "htdocs/DCP/site.phtml",
"chars": 8455,
"preview": "<?php\n$OL = \"10.6.1\";\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 110);\nrequire_once \"../../includ"
},
{
"path": "htdocs/DCP/tomb.module.js",
"chars": 1964,
"preview": "\n// Vanilla JS table filter for #table1\ndocument.addEventListener('DOMContentLoaded', () => {\n const table = document"
},
{
"path": "htdocs/DCP/tomb.phtml",
"chars": 3306,
"preview": "<?php\nrequire_once \"../../config/settings.inc.php\";\ndefine(\"IEM_APPID\", 99);\nrequire_once \"../../include/myview.php\";\nre"
},
{
"path": "htdocs/GIS/ams_030211.phtml",
"chars": 2170,
"preview": "<?php \nrequire_once \"../../config/settings.inc.php\";\nrequire_once \"../../include/myview.php\";\n$t = new MyView();\n$t->tit"
},
{
"path": "htdocs/GIS/apps/agclimate/chill.php",
"chars": 4622,
"preview": "<?php\nrequire_once \"../../../../config/settings.inc.php\";\nrequire_once \"../../../../include/iemmap.php\";\nrequire_once \"."
},
{
"path": "htdocs/GIS/apps/agclimate/dayplot.phtml",
"chars": 102,
"preview": "<?php\nrequire_once \"../../../../config/settings.inc.php\";\n\nheader(\"Location: /plotting/auto/?q=199\");\n"
},
{
"path": "htdocs/GIS/apps/agclimate/gsplot.css",
"chars": 989,
"preview": "#map {\n width: 100%;\n height: 450px;\n border: 2px solid #ddd;\n border-radius: 4px;\n margin-bottom: 20px;\n"
}
]
// ... and 1613 more files (download for full content)
About this extraction
This page contains the full source code of the akrherz/iem GitHub repository, extracted and formatted as plain text for AI agents and large language models (LLMs). The extraction includes 1813 files (21.0 MB), approximately 5.6M tokens, and a symbol index with 5603 extracted functions, classes, methods, constants, and types. Use this with OpenClaw, Claude, ChatGPT, Cursor, Windsurf, or any other AI tool that accepts text input. You can copy the full output to your clipboard or download it as a .txt file.
Extracted by GitExtract — free GitHub repo to text converter for AI. Built by Nikandr Surkov.