Repository navigation
DiGi.GIS.WebAPI.UI.Classes
Represents a single antenna sent by the communication 3D view: its world location and the communication functions selected by the user (mapped to DiGi.Communication.Enums.Function).
public class AntennaParameterInheritance System.Object → AntennaParameter
Gets or sets the names of the selected DiGi.Communication.Enums.Function values (e.g. Transmitter, Receiver).
public System.Collections.Generic.List<string>? Functions { get; set; }System.Collections.Generic.List<System.String>
Gets or sets the X coordinate of the antenna in world coordinates.
public double X { get; set; }Gets or sets the Y coordinate of the antenna in world coordinates.
public double Y { get; set; }Gets or sets the absolute elevation (Z coordinate in world coordinates) of the antenna top in meters.
public double Z { get; set; }Represents the payload of a communication calculation request sent by the communication 3D view: the analyzed circular area (used to fetch the buildings on the fly) and the antennas placed by the user.
public class CommunicationCalculationParameterInheritance System.Object → CommunicationCalculationParameter
Gets or sets the antennas placed by the user in the 3D view.
public System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.AntennaParameter>? Antennas { get; set; }System.Collections.Generic.List<AntennaParameter>
Gets or sets the X coordinate of the center of the analyzed circular area.
public double CenterX { get; set; }Gets or sets the Y coordinate of the center of the analyzed circular area.
public double CenterY { get; set; }Gets or sets the default electrical conductivity applied to the scattering object mesh cells [S/m].
public System.Nullable<double> Conductivity { get; set; }System.Nullable<System.Double>
Gets or sets the default simple multipath power delay profile name.
public string? DefaultSimpleMultipathPowerDelayProfile { get; set; }Gets or sets the frequency of the propagating electromagnetic wave [Hz].
The 3D view collects the value in MHz and converts it before sending; when omitted the DiGi.Communication.Classes.AngularPowerDistributionSolverOptions default is used.
public System.Nullable<double> Frequency { get; set; }System.Nullable<System.Double>
Gets or sets the polarization type of the propagating electromagnetic wave (Vertical or Horizontal).
public string? Polarization { get; set; }Gets or sets the radius of the analyzed circular area in meters.
public double Radius { get; set; }Gets or sets the default relative electrical permittivity applied to the scattering object mesh cells [-].
public System.Nullable<double> RelativePermittivity { get; set; }System.Nullable<System.Double>
The building the Orto Data page is to verify: where to find it, the photo years it holds, and the answer already on record.
An instance with no Reference is the page's empty state - nothing left to verify - which is also what the relay answers while the upstream endpoints are not deployed. Serialized to the page script with the framework's web defaults, so the property names reach the browser camelCased (countyId, reference, years, selected).
public class OrtoDataBuildingResponseInheritance System.Object → OrtoDataBuildingResponse
Gets or sets the identifier of the building_2d part the building is filed under, or null when no building was drawn.
public System.Nullable<int> CountyId { get; set; }Gets or sets the reference of the building, or null when no building was drawn.
public string? Reference { get; set; }Gets or sets the answer already recorded for the building, or null when none is.
public DiGi.GIS.WebAPI.UI.Classes.OrtoDataBuildingResponse.Selection? Selected { get; set; }Gets or sets the years that hold a photo of the building - the only years a card is rendered for.
Sorted ascending upstream; the bound answers read their oldest and newest ends.
public System.Collections.Generic.List<short> Years { get; set; }System.Collections.Generic.List<System.Int16>
The year built answer recorded for a building: the year it names, how that year relates to the true construction year, and who recorded it when.
There is at most one user entry per building - the stored year built data is keyed by source - so the page's selection is a single object rather than a list.
public class OrtoDataBuildingResponse.SelectionInheritance System.Object → Selection
Gets or sets when the answer was recorded (UTC), or null for legacy entries written before provenance was kept.
public System.Nullable<System.DateTimeOffset> DateTime { get; set; }System.Nullable<System.DateTimeOffset>
Gets or sets how Year relates to the true construction year, as the integer value of DiGi.GIS.Enums.YearBuiltRelation: 0 exact, 1 at or before, 2 after.
public System.Nullable<int> Relation { get; set; }Gets or sets who recorded the answer, or null for legacy entries written before provenance was kept.
public string? UserName { get; set; }Gets or sets the photo year the answer names, or the bound year for an at-or-before or after answer.
public System.Nullable<short> Year { get; set; }A background solar radiation job: the request it answers, the calculation prepared for it, its state and, once calculated, its results.
Held in memory by a SolarJobQueue and never persisted. Its state changes only through Modify.TryEnqueue, Modify.Cancel and Modify.SolveAsync, under the lock of the queue; read it through Query.SolarJob or Create.SolarJobViewModel.
public class SolarJobInheritance System.Object → SolarJob
SolarJob(Guid, long, Nullable<int>, double, int, BuildingModel, List<BuildingModel>, Func<List<SurfaceSolarRadiationResult>>) Constructor
Initializes a new instance of the SolarJob class in the Queued state.
public SolarJob(System.Guid id, long buildingModelId, System.Nullable<int> countyId, double radius, int receiverCount, DiGi.Analytical.Building.Classes.BuildingModel? buildingModel, System.Collections.Generic.List<DiGi.Analytical.Building.Classes.BuildingModel>? buildingModels_Surrounding, System.Func<System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.SurfaceSolarRadiationResult>?>? calculation);id System.Guid
The unique identifier of the job.
buildingModelId System.Int64
The unique identifier of the building.
countyId System.Nullable<System.Int32>
The optional unique identifier of the county associated with the building.
radius System.Double
The neighbour radius in metres.
receiverCount System.Int32
The number of receiving surfaces (external walls and roofs) of the building.
buildingModel DiGi.Analytical.Building.Classes.BuildingModel
The building, kept to build the coloured scene from the results.
buildingModels_Surrounding System.Collections.Generic.List<DiGi.Analytical.Building.Classes.BuildingModel>
The neighbours, kept to build the coloured scene from the results.
calculation System.Func<System.Collections.Generic.List<SurfaceSolarRadiationResult>>
The calculation, prepared with every input it needs; it is released once it has run.
Gets the building, kept to build the coloured scene from the results; null once the job failed or was cancelled.
public DiGi.Analytical.Building.Classes.BuildingModel? BuildingModel { get; internal set; }DiGi.Analytical.Building.Classes.BuildingModel
Gets the unique identifier of the building.
public long BuildingModelId { get; }Gets the neighbours, kept to build the coloured scene from the results; null once the job failed or was cancelled.
public System.Collections.Generic.List<DiGi.Analytical.Building.Classes.BuildingModel>? BuildingModels_Surrounding { get; internal set; }System.Collections.Generic.List<DiGi.Analytical.Building.Classes.BuildingModel>
Gets the prepared calculation, or null once it has run or the job was cancelled.
public System.Func<System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.SurfaceSolarRadiationResult>?>? Calculation { get; internal set; }System.Func<System.Collections.Generic.List<SurfaceSolarRadiationResult>>
Gets the optional unique identifier of the county associated with the building.
public System.Nullable<int> CountyId { get; }Gets the moment the job was queued.
public System.DateTimeOffset CreatedAt { get; internal set; }Gets the error text of a failed job.
public string? Error { get; internal set; }Gets the moment the job completed, failed or was cancelled.
public System.Nullable<System.DateTimeOffset> FinishedAt { get; internal set; }System.Nullable<System.DateTimeOffset>
Gets the unique identifier of the job.
public System.Guid Id { get; }Gets the order in which the job was queued, from 1.
public long Index { get; internal set; }Gets the neighbour radius in metres.
public double Radius { get; }Gets the number of receiving surfaces (external walls and roofs) of the building.
public int ReceiverCount { get; }Gets the moment the calculation started.
public System.Nullable<System.DateTimeOffset> StartedAt { get; internal set; }System.Nullable<System.DateTimeOffset>
Gets the state of the job.
public DiGi.GIS.WebAPI.UI.Enums.SolarJobStatus Status { get; internal set; }Gets the results of a completed job.
public System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.SurfaceSolarRadiationResult>? SurfaceSolarRadiationResults { get; internal set; }System.Collections.Generic.List<SurfaceSolarRadiationResult>
The background solar radiation jobs of this host: every job by its identifier until it expires, and the channel through which queued jobs reach their single consumer (SolarJobHostedService). Registered as a singleton.
The channel is unbounded and only carries jobs to the consumer: the queue length (SolarJobQueueLengthMax) is counted over the queued jobs under Lock, so that a cancelled job frees its place at once instead of holding a channel slot until the consumer reaches it (DiGi.GIS.WebAPI.UI#60).
public class SolarJobQueueInheritance System.Object → SolarJobQueue
Initializes a new instance of the SolarJobQueue class.
public SolarJobQueue(System.TimeProvider timeProvider);timeProvider System.TimeProvider
The clock that stamps the jobs and expires them.
Gets the channel through which queued jobs reach their consumer.
internal System.Threading.Channels.Channel<DiGi.GIS.WebAPI.UI.Classes.SolarJob> Channel { internal get; }System.Threading.Channels.Channel<SolarJob>
Gets the number of jobs queued so far, the source of Index.
internal long Count { internal get; internal set; }Gets the lock guarding SolarJobs, Count and the state of every job.
internal System.Threading.Lock Lock { internal get; }Gets every job that has not expired, by its identifier.
internal System.Collections.Generic.Dictionary<System.Guid,DiGi.GIS.WebAPI.UI.Classes.SolarJob> SolarJobs { internal get; }System.Collections.Generic.Dictionary<System.Guid,SolarJob>
Gets the clock that stamps the jobs and expires them.
public System.TimeProvider TimeProvider { get; }Represents the annual solar radiation received by one external surface (a wall or a roof) of a building, shaded by the building itself and by its neighbours.
Irradiation values are per square metre of the surface, over one EPW year. The beam component reaches only the unshaded part of the surface. Sky diffuse and ground-reflected radiation (isotropic sky) reach the surface in proportion to the part of its sky and of its ground not blocked by the building itself or by its neighbours (SkyVisibility, GroundVisibility); blocked parts contribute nothing, reflections between buildings are ignored (DiGi-Organization/DiGi.Solar#15).
Instances are plain carriers of already-computed values. Use SurfaceSolarRadiationResults(this ShadingModel, IDictionary<string,Vector3D>, EPWFile, ShadingSolverOptions, Action<string>) to calculate them.
public class SurfaceSolarRadiationResult : DiGi.Core.Classes.SerializableResultInheritance System.Object → DiGi.Core.Classes.Object → DiGi.Core.Classes.SerializableObject → DiGi.Core.Classes.SerializableResult → SurfaceSolarRadiationResult
Initializes a new instance of the SurfaceSolarRadiationResult class by copying an existing instance.
public SurfaceSolarRadiationResult(DiGi.GIS.WebAPI.UI.Classes.SurfaceSolarRadiationResult? surfaceSolarRadiationResult);surfaceSolarRadiationResult SurfaceSolarRadiationResult
The source SurfaceSolarRadiationResult to copy from.
SurfaceSolarRadiationResult(string, double, double, double, double, double, double, double, double, double) Constructor
Initializes a new instance of the SurfaceSolarRadiationResult class.
public SurfaceSolarRadiationResult(string? reference, double area, double irradiation, double beam, double diffuse, double ground, double irradiationUnshaded, double energy, double skyVisibility, double groundVisibility);reference System.String
The DiGi.Core.Classes.GuidReference string of the building component the surface belongs to.
area System.Double
The area of the surface, in m².
irradiation System.Double
The annual irradiation of the surface with shading, in kWh/m² per year.
beam System.Double
The annual beam (direct) irradiation reaching the unshaded part of the surface, in kWh/m² per year of the whole surface.
diffuse System.Double
The annual sky diffuse irradiation reaching the surface past the blocked part of its sky, in kWh/m² per year.
ground System.Double
The annual ground-reflected irradiation reaching the surface past the blocked part of its ground, in kWh/m² per year.
irradiationUnshaded System.Double
The annual irradiation the surface would receive under an open sky, with no shading and nothing blocking its sky or ground, in kWh/m² per year.
energy System.Double
The annual solar energy incident on the whole surface with shading, in kWh per year.
skyVisibility System.Double
The unblocked share of the surface's isotropic sky view factor, from 0 (blocked) to 1 (open).
groundVisibility System.Double
The unblocked share of the surface's isotropic ground view factor, from 0 (blocked) to 1 (open).
Initializes a new instance of the SurfaceSolarRadiationResult class from a JSON object.
public SurfaceSolarRadiationResult(System.Text.Json.Nodes.JsonObject? jsonObject);jsonObject System.Text.Json.Nodes.JsonObject
The System.Text.Json.Nodes.JsonObject containing the result data.
Gets the area of the surface, in m².
public double Area { get; }Gets the annual beam (direct) irradiation reaching the unshaded part of the surface, in kWh/m² per year of the whole surface.
public double Beam { get; }Gets the annual sky diffuse irradiation of the surface, reduced by the blocked part of its sky (SkyVisibility), in kWh/m² per year.
public double Diffuse { get; }Gets the annual solar energy incident on the whole surface with shading, in kWh per year: Irradiation times Area.
public double Energy { get; }Gets the annual ground-reflected irradiation of the surface, reduced by the blocked part of its ground (GroundVisibility), in kWh/m² per year.
public double Ground { get; }Gets the unblocked share of the surface's isotropic ground view factor, from 0 (the building itself or its neighbours block the whole ground in front of it) to 1 (open).
public double GroundVisibility { get; }Gets the annual irradiation of the surface with shading, in kWh/m² per year: the sum of Beam, Diffuse and Ground.
public double Irradiation { get; }Gets the annual irradiation the surface would receive under an open sky, with no shading and nothing blocking its sky or ground, in kWh/m² per year. The difference to Irradiation is the loss to shading and blocked view.
public double IrradiationUnshaded { get; }Gets the DiGi.Core.Classes.GuidReference string of the building component the surface belongs to, the same string the shading model's element carries.
public string? Reference { get; }Gets the unblocked share of the surface's isotropic sky view factor, from 0 (the building itself or its neighbours block the whole sky in front of it) to 1 (open).
public double SkyVisibility { get; }One level of the Typology definition page state: a selected building-data column, its rule type and the rows of the active rule editor.
Name, DataType and IsNumeric describe the column as listed by the deployed GIS Web API; the server fills them from the live column catalog on import and ignores them on export, where the column is identified by UniqueId alone.
public class TypologyDefinitionLevelParameterInheritance System.Object → TypologyDefinitionLevelParameter
Gets or sets the integer DiGi.Core.Enums.DataType value of the column (0 Undefined through 14 String).
public int DataType { get; set; }Gets or sets a value indicating whether the column is numeric and eligible for a range rule.
public bool IsNumeric { get; set; }Gets or sets the display name of the column.
public string? Name { get; set; }Gets or sets the range rows, read when RuleType names a range rule.
public System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.TypologyDefinitionRangeParameter>? Ranges { get; set; }System.Collections.Generic.List<TypologyDefinitionRangeParameter>
Gets or sets the rule class name: VisualIntegerRangeFilterRule, VisualDoubleRangeFilterRule or VisualUniqueValueFilterRule. Null when no rule has been chosen yet.
public string? RuleType { get; set; }Gets or sets the unique identifier (slug) of the column, as addressed by the deployed GIS Web API.
public string? UniqueId { get; set; }Gets or sets the unique-value rows, read when RuleType names the unique-value rule.
public System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.TypologyDefinitionUniqueValueParameter>? UniqueValueColors { get; set; }System.Collections.Generic.List<TypologyDefinitionUniqueValueParameter>
The page state of the Typology definition page: the chain of selected building-data columns, each with its rule type, ranges and colors.
This is the wire contract of POST /typology/definition/export (request) and POST /typology/definition/validate (response), serialized camelCase by the application's default JSON options, exactly as typology.js holds it. The DiGi document (DiGi.Typology.Visual.Classes.VisualColumnTypologyFilter) is composed and parsed on the server only, so the page never spells a _type or a TypologyAppearanceCollection key.
public class TypologyDefinitionParameterInheritance System.Object → TypologyDefinitionParameter
Gets or sets the levels of the chain, root first.
public System.Collections.Generic.List<DiGi.GIS.WebAPI.UI.Classes.TypologyDefinitionLevelParameter>? Levels { get; set; }System.Collections.Generic.List<TypologyDefinitionLevelParameter>
One range row of a Typology definition level: a closed interval and the color of the bucket it maps to.
public class TypologyDefinitionRangeParameterInheritance System.Object → TypologyDefinitionRangeParameter
Gets or sets the bucket color as the color picker holds it, #rrggbb.
public string? Color { get; set; }Gets or sets the inclusive upper bound. Null when the row is still being typed.
public System.Nullable<double> Max { get; set; }System.Nullable<System.Double>
Gets or sets the inclusive lower bound. Null when the row is still being typed.
public System.Nullable<double> Min { get; set; }System.Nullable<System.Double>
One unique-value row of a Typology definition level: a value of the column and the color of the bucket it maps to.
public class TypologyDefinitionUniqueValueParameterInheritance System.Object → TypologyDefinitionUniqueValueParameter
Gets or sets the bucket color as the color picker holds it, #rrggbb.
public string? Color { get; set; }Gets or sets the value, a JSON primitive or null for the NULL bucket. Bound from a request body it arrives as a System.Text.Json.JsonElement; read it through TryConvertValue(object, DataType, object), never by pattern matching on a CLR primitive.
public object? Value { get; set; }The body the histogramsummary relay posts to the upstream gis/BuildingData/histogramsummary endpoint.
The property names are the wire contract: the upstream binds its own HistogramRequestParameter from the body, and Query.PostJsonAsync sends the declared names as-is (JsonSerializerOptions.Default), so nothing relies on the receiver binding names case-insensitively (see Coding - WebAPI Contracts, section 2). The upstream's FilterGroup is deliberately absent — the definition page never filters a histogram (the county-part scope is #38).
public class TypologyHistogramParameterInheritance System.Object → TypologyHistogramParameter
Gets or sets the number of buckets; the relay fixes it to HistogramBucketCount.
public int BucketCount { get; set; }Gets or sets the unique identifier (slug) of the column to histogram, as listed by the columns endpoint.
public string ColumnUniqueId { get; set; }Gets or sets the county part identifier scoping the histogram; null asks for the whole table.
public System.Nullable<int> CountyId { get; set; }Gets or sets the bucketing rule, sent as its integer value; the relay asks for DiGi.PostgreSQL.Table.Enums.HistogramBucketing.EqualCount (issue #37), so every bucket holds the same number of buildings and the Load's quantile bounds follow the buildings rather than the value span. A host without DiGi-Organization/DiGi.GIS.WebAPI#35 ignores the property and answers equal-width buckets.
public DiGi.PostgreSQL.Table.Enums.HistogramBucketing HistogramBucketing { get; set; }DiGi.PostgreSQL.Table.Enums.HistogramBucketing
The request body of POST /typology/buildings: the Typology definition page state to solve, and the administrative area it is solved for.
The Definition is the same page state the definition page exports, resolved server-side against the live column catalog before the solve. The Id, Code and AdministrativeArealType carry the area context the Load modal selected, and are used to resolve the county part identifiers that scope the building data fetch.
AdministrativeArealType is nullable on the wire: the Undefined sentinel is -1 and not 0, so a non-nullable binding would silently keep Country for an omitted parameter (Coding - WebAPI Contracts, section 2). The action rejects null and DiGi.GIS.PostgreSQL.Enums.AdministrativeArealType.Undefined explicitly.
public class TypologySolveParameterInheritance System.Object → TypologySolveParameter
Gets or sets the type of the selected administrative area, bound as nullable so an omitted value is refused rather than read as DiGi.GIS.PostgreSQL.Enums.AdministrativeArealType.Country.
public System.Nullable<DiGi.GIS.PostgreSQL.Enums.AdministrativeArealType> AdministrativeArealType { get; set; }System.Nullable<DiGi.GIS.PostgreSQL.Enums.AdministrativeArealType>
Gets or sets the code of the selected administrative area.
public string? Code { get; set; }Gets or sets the Typology definition page state: the chain of selected building-data columns with rule types, ranges and colors.
public DiGi.GIS.WebAPI.UI.Classes.TypologyDefinitionParameter? Definition { get; set; }Gets or sets the unique identifier of the selected administrative area, as carried by the Load modal.
public int Id { get; set; }The credentials a visitor submits on the sign-in page, relayed to the user authentication service.
These two property names are the wire contract of POST /user/login and must match DiGi.User.Classes.UserLogin. This application reaches that service over HTTP only, so nothing checks them at compile time and a rename on either side fails silently - diff them by hand whenever either moves (Coding - WebAPI Contracts, section 5).
Password is a secret in transit. It is never logged, never echoed back to the browser and never written into a view.
public class UserLoginParameterInheritance System.Object → UserLoginParameter
Gets or sets the email address identifying the account.
public string? Email { get; set; }Gets or sets the password submitted for the account.
public string? Password { get; set; }The year built answer a reviewer submits on the Orto Data page, relayed to the GIS Web API.
These property names are the wire contract of POST gis/yearbuiltdata/setuseryearbuilt and must match the service's own UserYearBuiltParameter. This application reaches that service over HTTP only, so nothing checks them at compile time and a rename on either side fails silently - diff them by hand whenever either moves (Coding - WebAPI Contracts, section 5).
public class UserYearBuiltParameterInheritance System.Object → UserYearBuiltParameter
Gets or sets the identifier of the building_2d part the building is filed under.
Always the part the page received from the random draw or the direct-mode reference resolution, never one re-derived from a county code: a county code can name several parts, and the write is refused when the named part does not hold the reference.
public System.Nullable<int> CountyId { get; set; }Gets or sets the reference of the building the answer is for.
public string? Reference { get; set; }Gets or sets how Year relates to the true construction year, as the integer value of DiGi.GIS.Enums.YearBuiltRelation: 0 exact, 1 at or before, 2 after.
The integer, never the member name: the service binds the value against its own enum spelling, and a renamed member turns a member-name string into a hard 400 while the integer never moves (Coding - WebAPI Contracts, section 2). The service treats null as 0.
public System.Nullable<int> Relation { get; set; }Gets or sets the photo year the answer names: the selected card's year, or the oldest or newest listed year for a bound answer.
public System.Nullable<short> Year { get; set; }The outcome of a single request relayed to a Web API: the status it answered with, and the body it carried.
The other Query helpers of this application collapse every failure into null, so that a page assembled from several independent requests survives one of them coming back empty. Authentication, and a user-initiated value load, are the cases that rule does not cover: there the status is the answer. A refused credential (401) has to stay distinct from a faulting authentication service (500) and from a service that could not be reached at all, because collapsing them reports an outage to the visitor as a wrong password and hides it from everyone else; and an empty column - the page's 204 - has to stay distinct from a faulting data service (502) or an unreachable one (503), because collapsing them reads a service failure as a column with no values (issue #40).
public class WebAPIResponseInheritance System.Object → WebAPIResponse
Initializes a new instance of the WebAPIResponse class.
public WebAPIResponse(int statusCode, string? json=null);statusCode System.Int32
The HTTP status code the Web API answered with.
json System.String
The response body, or null when the response carried none.
Gets the response body, or null when the response carried none.
public string? Json { get; }Gets the HTTP status code the Web API answered with.
public int StatusCode { get; }