मानदंड SpatialRestrictions.IsWithinDistance NHibernate.Spatial


95

क्या किसी ने इसे लागू किया है, या पता है कि क्या इसे लागू करना मुश्किल होगा / इसका कोई संकेत है?

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

NHibernate.Spatial.Criterion.SpatialRestrictions से

मैं "जहां NHSP.Distance (PROPERTY,: बिंदु)" का उपयोग कर सकता हूं। लेकिन इस क्वेरी को मेरी मौजूदा मानदंड क्वेरी के साथ जोड़ना चाहते हैं।

फिलहाल मैं एक मोटा बहुभुज बना रहा हूं, और उपयोग कर रहा हूं

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

EDIT को SpatialRelationCriterion पर कंस्ट्रक्शन ओवरलोडिंग द्वारा काम करने वाला एक प्रोटोटाइप मिल गया, जो नए SpatialRelation.Distance को जोड़ रहा है।

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

SpatialRelationCriterion में एक नया फ़ील्ड जोड़ा गया

private readonly double? distance;

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

संपादित 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));
                }

ओवरलोडेड ISpatialDialect.GetSpatialRelationString

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();
        }

निश्चित नहीं है कि AddParameter क्यों इस्तेमाल नहीं किया जा रहा है?


3
मेरे पास एक ही समस्या है, और अभी तक कोई भी पूर्ण पैच / फिक्स / जो कुछ भी नहीं मिला है। क्या आपने इसे हल किया था, या आप HQL संस्करण के साथ गए थे?
Liedman

1
सोचो ऊपर दृष्टिकोण के साथ चला गया, और काम के लिए dll recompilled, लेकिन अभी भी प्रयोगात्मक कोड था।
इयान

2
@ आप प्रस्तावित ओपी द्वारा दिए गए समाधान से संतुष्ट नहीं हैं?
Eranga

इसे काम करने के लिए DLL को पुनःप्राप्त करें।
काउबॉय 911 11

Microsoft के रिच लैंडर के अनुसार , आपको एक बेहतर मौका मिल सकता है, जिसे आपको NHibernate मंचों पर इस मुद्दे को उठाना चाहिए ।
एनी

जवाबों:


1

हम इस मुद्दे पर GitHub में देख रहे हैं। महान अंतर्दृष्टि और एक संभावित समाधान प्रदान करने के लिए धन्यवाद। यहाँ इस मुद्दे की एक कड़ी है: https://github.com/nhibernate/NHibernate.Spatial/issues/61

जैसे ही यह तय होगा मैं नए न्यूगेट पैकेज प्रकाशित करूंगा।


यह एसओ प्रश्न भी एक अलग समाधान stackoverflow.com/questions/1833879/… के
सूर्य प्रताप

0

हाँ, मुझे लगता है कि RecLile DLL अब के लिए सबसे अच्छा समाधान है।

हमारी साइट का प्रयोग करके, आप स्वीकार करते हैं कि आपने हमारी Cookie Policy और निजता नीति को पढ़ और समझा लिया है।
Licensed under cc by-sa 3.0 with attribution required.