fix no admin issue

This commit is contained in:
Arnaud Delcasse 2025-06-16 18:03:04 +02:00
parent 06d78317f9
commit 0285c94946
4 changed files with 24 additions and 17 deletions

View File

@ -117,7 +117,7 @@ func (b *AdminBleveIndex) Store(layer string, feature *geojson.Feature) error {
return nil 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()} coordinates := []float64{f.Point().Lon(), f.Point().Lat()}
query, err := bleve.NewGeoShapeQuery( query, err := bleve.NewGeoShapeQuery(
[][][][]float64{{{coordinates}}}, [][][][]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") 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) { func (s *AdminBleveIndex) Find(layer, id string) (*geojson.Feature, error) {

View File

@ -27,10 +27,18 @@ func NewAdminMemoryRTreeIndex(cfg *viper.Viper) (*AdminMemoryRTreeIndex, error)
} }
layers := cfg.GetStringMapString("data.layers") layers := cfg.GetStringMapString("data.layers")
// var wg sync.WaitGroup
for layer, url := range layers { for layer, url := range layers {
// wg.Add(1)
go func() {
// defer wg.Done()
storage.IndexLayer(layer, url) storage.IndexLayer(layer, url)
}()
} }
// wg.Wait()
return storage, nil 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.Indexes[layer].Insert(bound.Min, bound.Max, id)
s.Documents[layer][id] = feature s.Documents[layer][id] = feature
} }
log.Info().Str("layer", layer).Msg("finished indexing")
return nil return nil
} }
func (s *AdminMemoryRTreeIndex) GeoSearch(feature *geojson.Feature) (map[string][]*geojson.Feature, error) { func (s *AdminMemoryRTreeIndex) GeoSearch(feature *geojson.Feature) (map[string]*geojson.Feature, error) {
results := map[string][]*geojson.Feature{} results := map[string]*geojson.Feature{}
point := feature.Point() point := feature.Point()
for _, layer := range s.Layers { for _, layer := range s.Layers {
results[layer] = []*geojson.Feature{}
rt := s.Indexes[layer] 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 { 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)] resp, found := s.Documents[layer][id.(string)]
if !found { if !found {
return false log.Error().Msg("document not found")
return true
} }
if poly, ok := resp.Geometry.(orb.Polygon); ok { if poly, ok := resp.Geometry.(orb.Polygon); ok {
if planar.PolygonContains(poly, point) { if planar.PolygonContains(poly, point) {
results[layer] = append(results[layer], resp) results[layer] = resp
return true return false
} }
} else if multipoly, ok := resp.Geometry.(orb.MultiPolygon); ok { } else if multipoly, ok := resp.Geometry.(orb.MultiPolygon); ok {
if planar.MultiPolygonContains(multipoly, point) { if planar.MultiPolygonContains(multipoly, point) {
results[layer] = append(results[layer], resp) results[layer] = resp
return true
}
}
return false return false
}
}
return true
}) })
} }
return results, nil return results, nil

View File

@ -8,7 +8,7 @@ import (
) )
type AdminIndex interface { 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) Find(layer, id string) (*geojson.Feature, error)
} }

View File

@ -31,9 +31,7 @@ func main() {
geo := geojson.NewFeature(orb.Point{7.11667, 43.583328}) geo := geojson.NewFeature(orb.Point{7.11667, 43.583328})
res, err := adminIdx.GeoSearch(geo) res, err := adminIdx.GeoSearch(geo)
for layer, features := range res { for layer, f := 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") log.Info().Str("layer", layer).Str("code", f.Properties.MustString("code")).Str("nom", f.Properties.MustString("nom")).Msg("result")
} }
}
} }