fix no admin issue
This commit is contained in:
parent
06d78317f9
commit
0285c94946
|
@ -117,7 +117,7 @@ func (b *AdminBleveIndex) Store(layer string, feature *geojson.Feature) error {
|
|||
return nil
|
||||
}
|
||||
|
||||
func (b *AdminBleveIndex) GeoSearch(f *geojson.Feature) (map[string][]*geojson.Feature, error) {
|
||||
func (b *AdminBleveIndex) GeoSearch(f *geojson.Feature) (map[string]*geojson.Feature, error) {
|
||||
coordinates := []float64{f.Point().Lon(), f.Point().Lat()}
|
||||
query, err := bleve.NewGeoShapeQuery(
|
||||
[][][][]float64{{{coordinates}}},
|
||||
|
@ -140,7 +140,7 @@ func (b *AdminBleveIndex) GeoSearch(f *geojson.Feature) (map[string][]*geojson.F
|
|||
log.Debug().Any("region", b.Data[r.ID].Properties.MustString("nom")).Str("type", b.Data[r.ID].Geometry.GeoJSONType()).Msg("hit")
|
||||
}
|
||||
|
||||
return map[string][]*geojson.Feature{}, nil
|
||||
return map[string]*geojson.Feature{}, nil
|
||||
}
|
||||
|
||||
func (s *AdminBleveIndex) Find(layer, id string) (*geojson.Feature, error) {
|
||||
|
|
|
@ -27,10 +27,18 @@ func NewAdminMemoryRTreeIndex(cfg *viper.Viper) (*AdminMemoryRTreeIndex, error)
|
|||
}
|
||||
|
||||
layers := cfg.GetStringMapString("data.layers")
|
||||
|
||||
// var wg sync.WaitGroup
|
||||
for layer, url := range layers {
|
||||
storage.IndexLayer(layer, url)
|
||||
// wg.Add(1)
|
||||
go func() {
|
||||
// defer wg.Done()
|
||||
storage.IndexLayer(layer, url)
|
||||
}()
|
||||
}
|
||||
|
||||
// wg.Wait()
|
||||
|
||||
return storage, nil
|
||||
}
|
||||
|
||||
|
@ -62,32 +70,33 @@ func (s *AdminMemoryRTreeIndex) IndexLayer(layer, url string) error {
|
|||
s.Indexes[layer].Insert(bound.Min, bound.Max, id)
|
||||
s.Documents[layer][id] = feature
|
||||
}
|
||||
log.Info().Str("layer", layer).Msg("finished indexing")
|
||||
return nil
|
||||
}
|
||||
|
||||
func (s *AdminMemoryRTreeIndex) GeoSearch(feature *geojson.Feature) (map[string][]*geojson.Feature, error) {
|
||||
results := map[string][]*geojson.Feature{}
|
||||
func (s *AdminMemoryRTreeIndex) GeoSearch(feature *geojson.Feature) (map[string]*geojson.Feature, error) {
|
||||
results := map[string]*geojson.Feature{}
|
||||
point := feature.Point()
|
||||
for _, layer := range s.Layers {
|
||||
results[layer] = []*geojson.Feature{}
|
||||
rt := s.Indexes[layer]
|
||||
rt.Search([2]float64{point.Lon(), point.Lat()}, [2]float64{point.Lon(), point.Lat()}, func(min, max [2]float64, id any) bool {
|
||||
resp, found := s.Documents[layer][id.(string)]
|
||||
if !found {
|
||||
return false
|
||||
log.Error().Msg("document not found")
|
||||
return true
|
||||
}
|
||||
if poly, ok := resp.Geometry.(orb.Polygon); ok {
|
||||
if planar.PolygonContains(poly, point) {
|
||||
results[layer] = append(results[layer], resp)
|
||||
return true
|
||||
results[layer] = resp
|
||||
return false
|
||||
}
|
||||
} else if multipoly, ok := resp.Geometry.(orb.MultiPolygon); ok {
|
||||
if planar.MultiPolygonContains(multipoly, point) {
|
||||
results[layer] = append(results[layer], resp)
|
||||
return true
|
||||
results[layer] = resp
|
||||
return false
|
||||
}
|
||||
}
|
||||
return false
|
||||
return true
|
||||
})
|
||||
}
|
||||
return results, nil
|
||||
|
|
|
@ -8,7 +8,7 @@ import (
|
|||
)
|
||||
|
||||
type AdminIndex interface {
|
||||
GeoSearch(*geojson.Feature) (map[string][]*geojson.Feature, error)
|
||||
GeoSearch(*geojson.Feature) (map[string]*geojson.Feature, error)
|
||||
Find(layer, id string) (*geojson.Feature, error)
|
||||
}
|
||||
|
||||
|
|
6
main.go
6
main.go
|
@ -31,9 +31,7 @@ func main() {
|
|||
geo := geojson.NewFeature(orb.Point{7.11667, 43.583328})
|
||||
res, err := adminIdx.GeoSearch(geo)
|
||||
|
||||
for layer, features := range res {
|
||||
for _, f := range features {
|
||||
log.Info().Str("layer", layer).Str("code", f.Properties.MustString("code")).Str("nom", f.Properties.MustString("nom")).Msg("result")
|
||||
}
|
||||
for layer, f := range res {
|
||||
log.Info().Str("layer", layer).Str("code", f.Properties.MustString("code")).Str("nom", f.Properties.MustString("nom")).Msg("result")
|
||||
}
|
||||
}
|
||||
|
|
Loading…
Reference in New Issue