94 votes

Critères SpatialRestrictions.IsWithinDistance NHibernate.Spatial

Quelqu'un a mis en œuvre cette, ou de savoir si elle serait difficile à mettre en œuvre ce/ont les pointeurs?

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
{
    // TODO: Implement
    throw new NotImplementedException();
}

de NHibernate.Spatiales.Le critère.SpatialRestrictions

Je peux utiliser "où PNHA.Distance(PROPRIÉTÉ, :point)" dans les requêtes hql. Mais souhaitez combiner cette requête avec mes Critères de requête.

pour le moment, je suis en création d'un accidenté de polygone, et à l'aide de

criteria.Add(SpatialRestrictions.Intersects("PROPERTY", myPolygon));

MODIFIER A obtenu un prototype de travail par la surcharge de constructeur, sur SpatialRelationCriterion, l'ajout de nouvelles SpatialRelation.Distance

public static SpatialRelationCriterion IsWithinDistance(string propertyName, object anotherGeometry, double distance)
        {
            return new SpatialRelationCriterion(propertyName, SpatialRelation.Distance, anotherGeometry, distance);
        }

ajout d'un nouveau champ de SpatialRelationCriterion

private readonly double? distance;

public SpatialRelationCriterion(string propertyName, SpatialRelation relation, object anotherGeometry, double distance)
            : this(propertyName, relation, anotherGeometry)
        {
            this.distance = distance;
        }

Édité ToSqlString

object secondGeometry = Parameter.Placeholder;
                if (!(this.anotherGeometry is IGeometry))
                {
                    secondGeometry = columns2[i];
                }

                if (distance.HasValue)
                {
                    builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, distance.Value, true));
                }
                else
                {
                    builder.Add(spatialDialect.GetSpatialRelationString(columns1[i], this.relation, secondGeometry, true));
                }

surchargé ISpatialDialect.GetSpatialRelationString

mise en œuvre de la surcharge en MsSql2008SpatialDialect

public SqlString GetSpatialRelationString(object geometry, SpatialRelation relation, object anotherGeometry, double distance, bool criterion)
        {
            var x = new SqlStringBuilder(8)
                           .AddObject(geometry)
                           .Add(".ST")
                           .Add(relation.ToString())
                           .Add("(")
                           .AddObject(anotherGeometry)
                           .Add(")");

            if (criterion)
            {
                x.Add(" < ");
                x.AddObject(distance.ToString());
            }

            return x.ToSqlString();
        }

Je ne sais pas pourquoi AddParameter pas être utilisé?

0voto

ilce Points 63

Oui, je pense que la recompilation de la DLL est la meilleure solution pour l’instant.

Prograide.com

Prograide est une communauté de développeurs qui cherche à élargir la connaissance de la programmation au-delà de l'anglais.
Pour cela nous avons les plus grands doutes résolus en français et vous pouvez aussi poser vos propres questions ou résoudre celles des autres.

Powered by:

X