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
}
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) {

View File

@ -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 {
// 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 true
})
}
return results, nil

View File

@ -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)
}

View File

@ -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 {
for layer, f := range res {
log.Info().Str("layer", layer).Str("code", f.Properties.MustString("code")).Str("nom", f.Properties.MustString("nom")).Msg("result")
}
}
}