github.com/altipla-consulting/ravendb-go-client@v0.1.3/spatial_criteria.go (about)

     1  package ravendb
     2  
     3  type SpatialCriteria interface {
     4  	GetShapeToken(addQueryParameter func(interface{}) string) *shapeToken
     5  	ToQueryToken(fieldName string, addQueryParameter func(interface{}) string) queryToken
     6  }
     7  
     8  type SpatialCriteriaCommon struct {
     9  	_relation         SpatialRelation
    10  	_distanceErrorPct float64
    11  }
    12  
    13  func NewSpatialCriteria(relation SpatialRelation, distanceErrorPct float64) SpatialCriteriaCommon {
    14  	return SpatialCriteriaCommon{
    15  		_relation:         relation,
    16  		_distanceErrorPct: distanceErrorPct,
    17  	}
    18  }
    19  
    20  // Note: hacky way to emulate Java's inheritance
    21  func (c *SpatialCriteriaCommon) toQueryTokenCommon(sc SpatialCriteria, fieldName string, addQueryParameter func(interface{}) string) queryToken {
    22  	shapeToken := sc.GetShapeToken(addQueryParameter)
    23  
    24  	var whereOperator whereOperator
    25  
    26  	switch c._relation {
    27  	case SpatialRelationWithin:
    28  		whereOperator = whereOperatorSpatialWithin
    29  	case SpatialRelationContains:
    30  		whereOperator = whereOperatorSpatialContains
    31  	case SpatialRelationDisjoin:
    32  		whereOperator = whereOperatorSpatialDisjoint
    33  	case SpatialRelationIntersects:
    34  		whereOperator = whereOperatorSpatialIntersects
    35  	default:
    36  		//throw new IllegalArgumentError();
    37  		panicIf(true, "Unknown relation '%s'", c._relation)
    38  	}
    39  
    40  	opts := newWhereOptionsWithTokenAndDistance(shapeToken, c._distanceErrorPct)
    41  	return createWhereTokenWithOptions(whereOperator, fieldName, "", opts)
    42  }