mirror of https://github.com/tidwall/tile38.git
fix: point -> circle fallthrough
This commit is contained in:
parent
bc62edb692
commit
6eb1cca78c
|
@ -216,67 +216,6 @@ func (server *Server) cmdSearchArgs(
|
||||||
switch ltyp {
|
switch ltyp {
|
||||||
case "point":
|
case "point":
|
||||||
fallthrough
|
fallthrough
|
||||||
case "sector":
|
|
||||||
if s.clip {
|
|
||||||
err = errInvalidArgument("cannot clip with " + ltyp)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var slat, slon, smeters, sb1, sb2 string
|
|
||||||
if vs, slat, ok = tokenval(vs); !ok || slat == "" {
|
|
||||||
err = errInvalidNumberOfArguments
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if vs, slon, ok = tokenval(vs); !ok || slon == "" {
|
|
||||||
err = errInvalidNumberOfArguments
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if vs, smeters, ok = tokenval(vs); !ok || smeters == "" {
|
|
||||||
err = errInvalidNumberOfArguments
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if vs, sb1, ok = tokenval(vs); !ok || sb1 == "" {
|
|
||||||
err = errInvalidNumberOfArguments
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if vs, sb2, ok = tokenval(vs); !ok || sb2 == "" {
|
|
||||||
err = errInvalidNumberOfArguments
|
|
||||||
return
|
|
||||||
}
|
|
||||||
var lat, lon, meters, b1, b2 float64
|
|
||||||
if lat, err = strconv.ParseFloat(slat, 64); err != nil {
|
|
||||||
err = errInvalidArgument(slat)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if lon, err = strconv.ParseFloat(slon, 64); err != nil {
|
|
||||||
err = errInvalidArgument(slon)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if meters, err = strconv.ParseFloat(smeters, 64); err != nil {
|
|
||||||
err = errInvalidArgument(smeters)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if b1, err = strconv.ParseFloat(sb1, 64); err != nil {
|
|
||||||
err = errInvalidArgument(sb1)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
if b2, err = strconv.ParseFloat(sb2, 64); err != nil {
|
|
||||||
err = errInvalidArgument(sb2)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
if b1 == b2 {
|
|
||||||
err = fmt.Errorf("equal bearings (%s == %s), use CIRCLE instead", sb1, sb2)
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
origin := sectr.Point{Lng: lon, Lat: lat}
|
|
||||||
sector := sectr.NewSector(origin, meters, b1, b2)
|
|
||||||
|
|
||||||
s.obj, err = geojson.Parse(string(sector.JSON()), &server.geomParseOpts)
|
|
||||||
if err != nil {
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
case "circle":
|
case "circle":
|
||||||
if s.clip {
|
if s.clip {
|
||||||
err = errInvalidArgument("cannot clip with " + ltyp)
|
err = errInvalidArgument("cannot clip with " + ltyp)
|
||||||
|
@ -343,6 +282,66 @@ func (server *Server) cmdSearchArgs(
|
||||||
if err != nil {
|
if err != nil {
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
case "sector":
|
||||||
|
if s.clip {
|
||||||
|
err = errInvalidArgument("cannot clip with " + ltyp)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var slat, slon, smeters, sb1, sb2 string
|
||||||
|
if vs, slat, ok = tokenval(vs); !ok || slat == "" {
|
||||||
|
err = errInvalidNumberOfArguments
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if vs, slon, ok = tokenval(vs); !ok || slon == "" {
|
||||||
|
err = errInvalidNumberOfArguments
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if vs, smeters, ok = tokenval(vs); !ok || smeters == "" {
|
||||||
|
err = errInvalidNumberOfArguments
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if vs, sb1, ok = tokenval(vs); !ok || sb1 == "" {
|
||||||
|
err = errInvalidNumberOfArguments
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if vs, sb2, ok = tokenval(vs); !ok || sb2 == "" {
|
||||||
|
err = errInvalidNumberOfArguments
|
||||||
|
return
|
||||||
|
}
|
||||||
|
var lat, lon, meters, b1, b2 float64
|
||||||
|
if lat, err = strconv.ParseFloat(slat, 64); err != nil {
|
||||||
|
err = errInvalidArgument(slat)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if lon, err = strconv.ParseFloat(slon, 64); err != nil {
|
||||||
|
err = errInvalidArgument(slon)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if meters, err = strconv.ParseFloat(smeters, 64); err != nil {
|
||||||
|
err = errInvalidArgument(smeters)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if b1, err = strconv.ParseFloat(sb1, 64); err != nil {
|
||||||
|
err = errInvalidArgument(sb1)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
if b2, err = strconv.ParseFloat(sb2, 64); err != nil {
|
||||||
|
err = errInvalidArgument(sb2)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
if b1 == b2 {
|
||||||
|
err = fmt.Errorf("equal bearings (%s == %s), use CIRCLE instead", sb1, sb2)
|
||||||
|
return
|
||||||
|
}
|
||||||
|
|
||||||
|
origin := sectr.Point{Lng: lon, Lat: lat}
|
||||||
|
sector := sectr.NewSector(origin, meters, b1, b2)
|
||||||
|
|
||||||
|
s.obj, err = geojson.Parse(string(sector.JSON()), &server.geomParseOpts)
|
||||||
|
if err != nil {
|
||||||
|
return
|
||||||
|
}
|
||||||
case "bounds", "hash", "tile", "quadkey":
|
case "bounds", "hash", "tile", "quadkey":
|
||||||
vs, s.obj, err = parseRectArea(ltyp, vs)
|
vs, s.obj, err = parseRectArea(ltyp, vs)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
|
@ -442,8 +441,7 @@ func (server *Server) cmdSearchArgs(
|
||||||
|
|
||||||
var nearbyTypes = []string{"point"}
|
var nearbyTypes = []string{"point"}
|
||||||
var withinOrIntersectsTypes = []string{
|
var withinOrIntersectsTypes = []string{
|
||||||
"geo", "bounds", "hash", "tile", "quadkey", "get", "object", "circle", "sector",
|
"geo", "bounds", "hash", "tile", "quadkey", "get", "object", "circle", "sector"}
|
||||||
}
|
|
||||||
|
|
||||||
func (server *Server) cmdNearby(msg *Message) (res resp.Value, err error) {
|
func (server *Server) cmdNearby(msg *Message) (res resp.Value, err error) {
|
||||||
start := time.Now()
|
start := time.Now()
|
||||||
|
|
|
@ -131,6 +131,7 @@ func keys_WITHIN_test(mc *mockServer) error {
|
||||||
{"SET", "mykey", "point6", "POINT", -5, 5}, {"OK"},
|
{"SET", "mykey", "point6", "POINT", -5, 5}, {"OK"},
|
||||||
{"SET", "mykey", "point7", "POINT", 33, 21}, {"OK"},
|
{"SET", "mykey", "point7", "POINT", 33, 21}, {"OK"},
|
||||||
{"SET", "mykey", "poly8", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
{"SET", "mykey", "poly8", "OBJECT", `{"type":"Polygon","coordinates":[[[-122.4408378,37.7341129],[-122.4408378,37.733],[-122.44,37.733],[-122.44,37.7341129],[-122.4408378,37.7341129]],[[-122.44060993194579,37.73345766902749],[-122.44044363498686,37.73345766902749],[-122.44044363498686,37.73355524732416],[-122.44060993194579,37.73355524732416],[-122.44060993194579,37.73345766902749]],[[-122.44060724973677,37.7336888869566],[-122.4402102828026,37.7336888869566],[-122.4402102828026,37.7339752567853],[-122.44060724973677,37.7339752567853],[-122.44060724973677,37.7336888869566]]]}`}, {"OK"},
|
||||||
|
{"WITHIN", "mykey", "IDS", "SECTOR", "37.72999", "-122.44760", "1000", "0", "90"}, {"[0 [point1 point2 line3 poly4 multipoly5 poly8]]"},
|
||||||
{"WITHIN", "mykey", "IDS", "OBJECT",
|
{"WITHIN", "mykey", "IDS", "OBJECT",
|
||||||
`{
|
`{
|
||||||
"type": "Polygon",
|
"type": "Polygon",
|
||||||
|
|
Loading…
Reference in New Issue