• MARS Website
  • Core API
  • SmartOpenHamburg API
  • Model Components API
  • Common API
Show / Hide Table of Contents
  • Mars.Components
    • DependencyRegistrationModelling
  • Mars.Components.Agents
    • AbstractAgent
    • AbstractEntity
    • Agent
  • Mars.Components.Environments
    • AbstractEnvironment
    • AbstractGraphElement
    • AlwaysPassingNodeGuard
    • EntityLane<TEntity>
    • GeoEnvironment
    • GeoHashEnvironment<T>
    • IEnvironmentMediator
    • IModalChoiceResolver
    • PathHeuristics
    • SpatialEdge
    • SpatialGraphEntityExtensions
    • SpatialGraphEnvironment
    • SpatialGraphHelper
    • SpatialHashEnvironment<TEntity>
    • SpatialLane
    • SpatialNode
    • WorldIndexExtensions
  • Mars.Components.Environments.Cartesian
    • CartesianEnvironment<TEntity>
    • CollisionEnvironment<TCharacter, TObstacle>
    • CollisionKind
    • ConeExplorationView
    • ExplorationView
    • GeometryFactory
    • ICartesianEnvironment<TEntity>
    • ICharacter
    • ICollidable
    • ICollisionEnvironment<TCharacter, TObstacle>
    • IObstacle
    • IVisible
    • RayExplorationView
    • TrapezoidExploration
    • VisibilityKind
  • Mars.Components.Environments.Cartesian.Routing
    • CartesianRoutingService<TObstacle>
    • GeometryCoordinatesRoutingPointsGenerator
    • HomogenousRoutingPointsGenerator
    • IRoutingPointsGenerator
    • RandomRoutingPointsGenerator
    • SectionalRandomRoutingPointsGenerator
  • Mars.Components.Layers
    • AbstractActiveLayer
    • AbstractEnvelopedLayer
    • AbstractLayer
    • AbstractVectorFeature
    • AgentSchedulerLayer<TAgent, TLayer>
    • QuerySourceLoader
    • RasterLayer
    • SchedulerEntry
    • SchedulerLayer
    • VectorFeature
    • VectorLayer
    • VectorLayer<T>
    • VectorLayerHelper
  • Mars.Components.Layers.Temporal
    • IQueryFieldProvider
    • ITemporalObjectCatalog
    • ITemporalObjectIterator
    • TemporalCatalogFeature<TKey>
    • TemporalFeatureKind
    • TemporalMetadataLoader
  • Mars.Components.Services
    • AgentManager
  • Mars.Components.Services.Explorations
    • BoltzmannExploration
    • EpsilonGreedyExploration
    • IExplorationPolicy
    • RouletteWheelExploration
    • TabuSearchExploration
  • Mars.Components.Services.Learning
    • InfiniteQLearning
    • QLearning
    • Sarsa
  • Mars.Components.Services.Planning
    • ActionPlanResult
    • GoapAction
    • GoapAgentStates
    • GoapGoal
    • GoapPlanner
    • GoapStateKey<T>
    • GoapStateProperty
    • GoapStateProperty<TElement>
    • IGoapAction
    • IGoapAgentStates
    • IGoapGoal
    • IGoapPlanner
    • IGoapStateKey
    • StatesCommons
  • Mars.Components.Services.Planning.ActionCommons
    • AllGoalsSatisfiedAction
    • NoGoalReachableAction
  • Mars.Components.Starter
    • Command
    • CommandArgumentContainer
    • CommandParser
    • CommandSet
    • HelpCommand
    • Option
    • OptionContext
    • OptionException
    • OptionSet
    • OptionValueCollection
    • OptionValueType
    • SimulationStarter
  • Mars.Components.Starter.Exceptions
    • SimulationStartupException
  • Mars.Interfaces
    • IModelObject
    • ISimulationContainer
    • ISimulationContext
    • ISimulationModule
    • ISimulationState
    • IStepExecutionContext
    • SimulationContext
    • SimulationContext.WorkflowStateType
    • StepExecutionContext
  • Mars.Interfaces.Agents
    • IAgent
    • IAgent<TLayer>
    • IEntity
    • IMarsDslAgent
    • IModalCapabilitiesAgent
    • ISpatialGraphEntity
    • ITickClient
  • Mars.Interfaces.Annotations
    • ActiveConstructor
    • PropertyDescription
  • Mars.Interfaces.Data
    • AbstractDomainData
    • GeometryData
    • IDomainData
    • IGeometryData
    • IIdentifiableData
    • IMarsFeature
    • IRasterBandData
    • ISource
    • IStringData
    • IStringStructuredData
    • IStructuredData
    • IStructuredDataGeometry
    • IValueData
    • LayerInitData
    • RasterBandData
    • StringDataDto
    • StructuredData
    • VectorStructuredData
  • Mars.Interfaces.Environments
    • BoundingBox
    • DirectionType
    • EdgeExploreResult
    • EdgeStop
    • ExploreDirection
    • GeoPositionExtension
    • HighwayType
    • IEdge<TEdge, TNode>
    • IEntityLane<TEntity>
    • IEnvironment
    • IEnvironment<TEntity>
    • IGeoGridEnvironment<T>
    • IGraphEntity
    • IGraphEnvironment<TEdge, TNode>
    • INode<TEdge, TNode>
    • INodeGuard
    • IPositionable
    • IRoutePlanner
    • ISpatialEdge
    • ISpatialGraphEnvironment
    • ISpatialLane
    • ISpatialNode
    • LaneExploreResult
    • ModalChoice
    • MultimodalRoute
    • NodeIntegrationKind
    • Position
    • Route
    • RouteStop
    • Size
    • SpatialGraphExploreResult
    • SpatialModalityType
    • TrafficLightPhase
  • Mars.Interfaces.Layers
    • FinallySimulationStep
    • IChangingLayer
    • IDataContainer
    • IDataLayer
    • IDataSet
    • IEnvelopDataLayer
    • ILayer
    • IMarsDslLayer
    • IModalChoiceConsumer
    • InitSimulationStep
    • INotifyChangedSource<T>
    • IRaster<TValue>
    • IRasterLayer
    • ISteppedActiveLayer
    • IVectorFeature
    • IVectorLayer
    • IVectorLayer<T>
    • IVectorNode<TEntity>
    • RegisterAgent
    • UnregisterAgent
  • Mars.Interfaces.Model
    • ActiveTypeMapping
    • AgentMapping
    • AgentType
    • ConstructorType
    • ContainsOperator
    • DataContainer
    • DataType
    • EntityMapping
    • EntityType
    • Execution
    • FeatureType
    • Globals
    • IdentifiableElement
    • IndividualMapping
    • Input
    • InputConfiguration
    • LayerMapping
    • LayerType
    • ModelDescription
    • ModelElement
    • ObjectType
    • Output
    • OutputConfiguration
    • OutputFilter
    • OutputKind
    • OutputTargetType
    • ParameterMapping
    • Processing
    • ProcessingConfiguration
    • ProcessingTargetType
    • PropertyType
    • SimulationConfig
    • TimeSpanUnit
    • TimeSpanUnitExtensions
    • TypeElement
    • TypeMapping
  • Mars.Interfaces.Model.Converters
    • CultureConverter
    • SerializationTypeConverter
    • TimeSpanUnitConverter
  • Mars.Interfaces.Model.Exceptions
    • InvalidTypeException
    • MissingTypeException
  • Mars.Interfaces.Model.Options
    • AbstractEndpointOptions
    • AbstractFileOptions
    • AbstractOptions
    • AscOptions
    • CsvOptions
    • GeoJsonOptions
    • MongoOptions
    • MqttOptions
    • PostgresSqlOptions
    • RedisOptions
    • RelationalEndpointOptions
    • SerializationType
    • SocketOutputOptions
    • SpatialGraphOptions
    • SqLiteOptions
    • TripsOptions

Class BoundingBox

Represents a bounding box with lower-left and upper-right coordinate.
Inheritance
System.Object
BoundingBox
Implements
System.IComparable<BoundingBox>
NetTopologySuite.Geometries.IIntersectable<BoundingBox>
NetTopologySuite.Geometries.IExpandable<BoundingBox>
System.IEquatable<BoundingBox>
Inherited Members
System.Object.Equals(System.Object, System.Object)
System.Object.GetType()
System.Object.MemberwiseClone()
System.Object.ReferenceEquals(System.Object, System.Object)
Namespace: Mars.Interfaces.Environments
Assembly: Mars.Interfaces.dll
Syntax
[MessagePackObject(false)]
public class BoundingBox : IComparable<BoundingBox>, IIntersectable<BoundingBox>, IExpandable<BoundingBox>, IEquatable<BoundingBox>

Constructors

| Improve this Doc View Source

BoundingBox()

Creates a null Envelope.
Declaration
public BoundingBox()
| Improve this Doc View Source

BoundingBox(BoundingBox)

Create an Envelope from an existing bounding box.
Declaration
public BoundingBox(BoundingBox env)
Parameters
Type Name Description
BoundingBox env The Envelope to initialize from.
| Improve this Doc View Source

BoundingBox(Position, Position)

Creates a new BoundingBox with the lower left and upper right corner to span out the box.
Declaration
public BoundingBox(Position lowerLeft, Position upperRight)
Parameters
Type Name Description
Position lowerLeft The lower left corner of the box (minX/Lon, minY/Lat).
Position upperRight The upper right corner of the box (maxX/Lon, maxY/Lat).
| Improve this Doc View Source

BoundingBox(Position)

Creates an Envelope for a region defined by a single Coordinate.
Declaration
public BoundingBox(Position p)
Parameters
Type Name Description
Position p The Coordinate.
| Improve this Doc View Source

BoundingBox(Envelope)

Create an Envelope from an existing NetTopologySuite.Geometries.Envelope.
Declaration
public BoundingBox(Envelope env)
Parameters
Type Name Description
NetTopologySuite.Geometries.Envelope env The Envelope to initialize from.
| Improve this Doc View Source

BoundingBox(Double, Double, Double, Double)

Creates an Envelope for a region defined by maximum and minimum values.
Declaration
[SerializationConstructor]
public BoundingBox(double minX, double minY, double maxX, double maxY)
Parameters
Type Name Description
System.Double minX The first x-value.
System.Double minY The first y-value.
System.Double maxX The second x-value.
System.Double maxY The second y-value.
| Improve this Doc View Source

BoundingBox(Double, Double, Double)

Creates an Envelope for a region defined by a single coordinate and expand it to the given distance.
Declaration
public BoundingBox(double x, double y, double distance)
Parameters
Type Name Description
System.Double x The x coordinate component.
System.Double y The y coordinate component.
System.Double distance The distance to expand to.
| Improve this Doc View Source

BoundingBox(Double, Double)

Creates an Envelope for a region defined by a single Coordinate.
Declaration
public BoundingBox(double x, double y)
Parameters
Type Name Description
System.Double x The x coordinate component.
System.Double y The y coordinate component.

Properties

| Improve this Doc View Source

Area

Gets the area of this envelope.
Declaration
[IgnoreMember]
[JsonIgnore]
public double Area { get; }
Property Value
Type Description
System.Double The area of the envelope, or 0.0 if envelope is null
| Improve this Doc View Source

Centre

Computes the coordinate of the centre of this envelope (as long as it is non-null).
Declaration
[IgnoreMember]
[JsonIgnore]
public Position Centre { get; }
Property Value
Type Description
Position The centre coordinate of this envelope, or null if the envelope is null.
| Improve this Doc View Source

Diameter

Gets the length of the diameter (diagonal) of the envelope.
Declaration
[IgnoreMember]
[JsonIgnore]
public double Diameter { get; }
Property Value
Type Description
System.Double The diameter length
| Improve this Doc View Source

Height

Returns the difference between the maximum and minimum y values.
Declaration
[IgnoreMember]
[JsonIgnore]
public double Height { get; }
Property Value
Type Description
System.Double max y - min y, or 0 if this is a null Envelope.
| Improve this Doc View Source

IsNull

Returns true if this Envelope is a "null" envelope.
Declaration
[IgnoreMember]
[JsonIgnore]
public bool IsNull { get; }
Property Value
Type Description
System.Boolean true if this Envelope is uninitialized or is the envelope of the empty point.
| Improve this Doc View Source

LowerLeft

Gets the lower right corner coordinate of this box.
Declaration
[IgnoreMember]
[JsonIgnore]
public Position LowerLeft { get; }
Property Value
Type Description
Position
| Improve this Doc View Source

LowerRight

Gets the lower right corner coordinate of this box.
Declaration
[IgnoreMember]
[JsonIgnore]
public Position LowerRight { get; }
Property Value
Type Description
Position
| Improve this Doc View Source

MaxX

Returns the Envelopes maximum x-value. min x > max x indicates that this is a null Envelope.
Declaration
[Key(2)]
[JsonProperty("maxX")]
public double MaxX { get; set; }
Property Value
Type Description
System.Double The maximum x-coordinate.
| Improve this Doc View Source

MaxY

Returns the Envelopes maximum y-value. min y > max y indicates that this is a null Envelope.
Declaration
[Key(3)]
[JsonProperty("maxY")]
public double MaxY { get; set; }
Property Value
Type Description
System.Double The maximum y-coordinate.
| Improve this Doc View Source

Midpoint

Gets the central coordinate of this box.
Declaration
[IgnoreMember]
[JsonIgnore]
public Position Midpoint { get; }
Property Value
Type Description
Position
| Improve this Doc View Source

MinX

Returns the Envelopes minimum x-value. min x > max x indicates that this is a null Envelope.
Declaration
[Key(0)]
[JsonProperty("minX")]
public double MinX { get; set; }
Property Value
Type Description
System.Double The minimum x-coordinate.
| Improve this Doc View Source

MinY

Returns the Envelopes minimum y-value. min y > max y indicates that this is a null Envelope.
Declaration
[Key(1)]
[JsonProperty("minY")]
public double MinY { get; set; }
Property Value
Type Description
System.Double The minimum y-coordinate.
| Improve this Doc View Source

UpperLeft

Gets the upper left corner coordinate of this box.
Declaration
[IgnoreMember]
[JsonIgnore]
public Position UpperLeft { get; }
Property Value
Type Description
Position
| Improve this Doc View Source

UpperRight

Gets the upper right corner coordinate of this box.
Declaration
[IgnoreMember]
[JsonIgnore]
public Position UpperRight { get; }
Property Value
Type Description
Position
| Improve this Doc View Source

Width

Returns the difference between the maximum and minimum x values.
Declaration
[IgnoreMember]
[JsonIgnore]
public double Width { get; }
Property Value
Type Description
System.Double max x - min x, or 0 if this is a null Envelope.

Methods

| Improve this Doc View Source

CompareTo(BoundingBox)

Compares two bounding boxes using lexicographic ordering. The ordering comparison is based on the usual numerical comparison between the sequence of ordinates. Null envelopes are less than all non-null envelopes.
Declaration
public int CompareTo(BoundingBox env)
Parameters
Type Name Description
BoundingBox env An envelope
Returns
Type Description
System.Int32
| Improve this Doc View Source

Contains(BoundingBox)

Tests if the Envelope other lies completely inside this bounding box (inclusive of the boundary).
Declaration
public bool Contains(BoundingBox other)
Parameters
Type Name Description
BoundingBox other
Returns
Type Description
System.Boolean true if other is contained in this Envelope
Remarks
Note that this is not the same definition as the SFS contains, which would exclude the envelope boundary.
| Improve this Doc View Source

Contains(Coordinate)

Tests if the given point lies in or on the envelope.
Declaration
public bool Contains(Coordinate p)
Parameters
Type Name Description
NetTopologySuite.Geometries.Coordinate p the point which this Envelope is being checked for containing
Returns
Type Description
System.Boolean true if the point lies in the interior or on the boundary of this Envelope.
Remarks
Note that this is not the same definition as the SFS contains, which would exclude the envelope boundary.
| Improve this Doc View Source

Contains(Double, Double)

Tests if the given point lies in or on the envelope.
Declaration
public bool Contains(double x, double y)
Parameters
Type Name Description
System.Double x the x-coordinate of the point which this Envelope is being checked for containing
System.Double y the y-coordinate of the point which this Envelope is being checked for containing
Returns
Type Description
System.Boolean true if (x, y) lies in the interior or on the boundary of this Envelope.
Remarks
Note that this is not the same definition as the SFS contains, which would exclude the envelope boundary.
| Improve this Doc View Source

Copy()

Creates a deep copy of the current envelope.
Declaration
public BoundingBox Copy()
Returns
Type Description
BoundingBox
| Improve this Doc View Source

CreateGeoBoundingBox(Double, Double, Double, Double)

Represents a bounding box with lower-left and upper-right coordinate.
Declaration
public static BoundingBox CreateGeoBoundingBox(double longitude, double latitude, double distanceLongitude, double distanceLatitude)
Parameters
Type Name Description
System.Double longitude
System.Double latitude
System.Double distanceLongitude
System.Double distanceLatitude
Returns
Type Description
BoundingBox
| Improve this Doc View Source

Disjoint(BoundingBox)

Tests if the region defined by other is disjoint from the region of this Envelope.
Declaration
public bool Disjoint(BoundingBox other)
Parameters
Type Name Description
BoundingBox other The Envelope being checked for disjointness
Returns
Type Description
System.Boolean true if the Envelopes are disjoint
See Also
Intersects(BoundingBox)
| Improve this Doc View Source

Distance(BoundingBox)

Computes the distance between this and another Envelope. The distance between overlapping Envelopes is 0. Otherwise, the distance is the Euclidean distance between the closest points.
Declaration
public double Distance(BoundingBox env)
Parameters
Type Name Description
BoundingBox env
Returns
Type Description
System.Double The distance between this and another BoundingBox.
| Improve this Doc View Source

Equals(BoundingBox)

Represents a bounding box with lower-left and upper-right coordinate.
Declaration
public bool Equals(BoundingBox other)
Parameters
Type Name Description
BoundingBox other
Returns
Type Description
System.Boolean
| Improve this Doc View Source

Equals(Object)

Represents a bounding box with lower-left and upper-right coordinate.
Declaration
public override bool Equals(object o)
Parameters
Type Name Description
System.Object o
Returns
Type Description
System.Boolean
Overrides
System.Object.Equals(System.Object)
| Improve this Doc View Source

ExpandBy(Double, Double)

Expands this envelope by a given distance in all directions. Both positive and negative distances are supported.
Declaration
public BoundingBox ExpandBy(double deltaX, double deltaY)
Parameters
Type Name Description
System.Double deltaX The distance to expand the envelope along the the X axis.
System.Double deltaY The distance to expand the envelope along the the Y axis.
Returns
Type Description
BoundingBox
| Improve this Doc View Source

ExpandBy(Double)

Expands this envelope by a given distance in all directions. Both positive and negative distances are supported.
Declaration
public void ExpandBy(double distance)
Parameters
Type Name Description
System.Double distance The distance to expand the envelope.
| Improve this Doc View Source

ExpandedBy(BoundingBox)

Enlarges this Envelope so that it contains the other Envelope. Has no effect if other is wholly on or within the envelope.
Declaration
public BoundingBox ExpandedBy(BoundingBox other)
Parameters
Type Name Description
BoundingBox other the Envelope to expand to include.
Returns
Type Description
BoundingBox
| Improve this Doc View Source

ExpandToInclude(BoundingBox)

Enlarges this Envelope so that it contains the other Envelope. Has no effect if other is wholly on or within the envelope.
Declaration
public void ExpandToInclude(BoundingBox other)
Parameters
Type Name Description
BoundingBox other the Envelope to expand to include.
| Improve this Doc View Source

ExpandToInclude(Envelope)

Represents a bounding box with lower-left and upper-right coordinate.
Declaration
public void ExpandToInclude(Envelope envelope)
Parameters
Type Name Description
NetTopologySuite.Geometries.Envelope envelope
| Improve this Doc View Source

ExpandToInclude(Double, Double)

Enlarges this Envelope so that it contains the given NetTopologySuite.Geometries.Coordinate.
Declaration
public void ExpandToInclude(double x, double y)
Parameters
Type Name Description
System.Double x The value to lower the minimum x to or to raise the maximum x to.
System.Double y The value to lower the minimum y to or to raise the maximum y to.
Remarks
Has no effect if the point is already on or within the envelope.
| Improve this Doc View Source

GetHashCode()

Represents a bounding box with lower-left and upper-right coordinate.
Declaration
public override int GetHashCode()
Returns
Type Description
System.Int32
Overrides
System.Object.GetHashCode()
| Improve this Doc View Source

Init()

Initialize to a null Envelope.
Declaration
public void Init()
| Improve this Doc View Source

Intersection(BoundingBox)

Computes the intersection of two BoundingBoxs.
Declaration
public BoundingBox Intersection(BoundingBox env)
Parameters
Type Name Description
BoundingBox env The envelope to intersect with
Returns
Type Description
BoundingBox A new Envelope representing the intersection of the envelopes (this will be the null envelope if either argument is null, or they do not intersect
| Improve this Doc View Source

Intersects(BoundingBox)

Check if the region defined by other intersects the region of this Envelope.
Declaration
public bool Intersects(BoundingBox other)
Parameters
Type Name Description
BoundingBox other The Envelope which this Envelope is being checked for intersecting.
Returns
Type Description
System.Boolean true if the Envelopes intersect.
| Improve this Doc View Source

Intersects(Position, Position)

Tests if the extent defined by two extremal points intersects the extent of this Envelope.
Declaration
public bool Intersects(Position a, Position b)
Parameters
Type Name Description
Position a A point
Position b Another point
Returns
Type Description
System.Boolean true if the extents intersect
| Improve this Doc View Source

Intersects(Position)

Check if the position (x, y) overlaps (lies inside) the region of this BoundingBox.
Declaration
public bool Intersects(Position position)
Parameters
Type Name Description
Position position that may or may not lie within the bounding box.
Returns
Type Description
System.Boolean true if the position intersects this BoundingBox.
| Improve this Doc View Source

Intersects(Double, Double)

Check if the point (x, y) overlaps (lies inside) the region of this Envelope.
Declaration
public bool Intersects(double x, double y)
Parameters
Type Name Description
System.Double x the x-ordinate of the point.
System.Double y the y-ordinate of the point.
Returns
Type Description
System.Boolean true if the point overlaps this Envelope.
| Improve this Doc View Source

Overlaps(BoundingBox)

Tests if the Envelope other lies wholely inside this Envelope (inclusive of the boundary).
Declaration
public bool Overlaps(BoundingBox other)
Parameters
Type Name Description
BoundingBox other the Envelope to check
Returns
Type Description
System.Boolean true if this Envelope covers the other
| Improve this Doc View Source

Overlaps(Double, Double)

Tests if the given point lies in or on the envelope.
Declaration
public bool Overlaps(double x, double y)
Parameters
Type Name Description
System.Double x the x-coordinate of the point which this Envelope is being checked for containing
System.Double y the y-coordinate of the point which this Envelope is being checked for containing
Returns
Type Description
System.Boolean true if (x, y) lies in the interior or on the boundary of this Envelope.
| Improve this Doc View Source

Parse(String)

Method to parse an envelope from its ToString() value
Declaration
public static BoundingBox Parse(string envelope)
Parameters
Type Name Description
System.String envelope The envelope string
Returns
Type Description
BoundingBox The envelope
| Improve this Doc View Source

ToEnvelope()

Transforms the bounding box to a NetTopologySuite.Geometries.Envelope
Declaration
public Envelope ToEnvelope()
Returns
Type Description
NetTopologySuite.Geometries.Envelope An envelope with the same spatial extent.
| Improve this Doc View Source

ToString()

Function to get a textual representation of this envelope
Declaration
public override string ToString()
Returns
Type Description
System.String A textual representation of this envelope
Overrides
System.Object.ToString()
| Improve this Doc View Source

Translate(Double, Double)

Translates this envelope by given amounts in the X and Y direction.
Declaration
public void Translate(double transX, double transY)
Parameters
Type Name Description
System.Double transX The amount to translate along the X axis.
System.Double transY The amount to translate along the Y axis.

Implements

System.IComparable<T>
NetTopologySuite.Geometries.IIntersectable<T>
NetTopologySuite.Geometries.IExpandable<T>
System.IEquatable<T>

Extension Methods

Serializer.Save<T>(T, out Byte[], SerializerCompression)
Serializer.Save<T>(T, Stream, SerializerCompression)
Serializer.Save<T>(T, BinaryFormatter, Stream, SerializerCompression)
Serializer.Save<T>(T, String, SerializerCompression)
Serializer.Save<T>(T, String)
PositionHelper.RandomPositionFromGeometry(BoundingBox)
Matrix.Concatenate<T>(T, T[])
Matrix.Replace<T>(T, Object, Object)
DomainDataImporter.Import(Object, InputConfiguration)
ObjectSerialize.Serialize(Object)
Matrix.IsEqual(Object, Object, Decimal, Decimal)
  • Improve this Doc
  • View Source
In This Article
Back to top Copyright © MARS GROUP. HAW Hamburg