Problème de fiabilité avec Azure Maps

Ouellet Francis 1 Point de réputation
2026-04-09T12:30:23.5533333+00:00

Librarie

Azure.Maps.Search 2.0.0-beta.5

Problème

J'ai testé des adresses invalides dans mon service et utilisé Azure Maps pour la géolocalisation. Je rencontre des problèmes avec des adresses incorrectes.:

Exemple :

Query : "Cambodge, Québec Cambodge"

Je m'attendais à une réponse peu fiable, mais Azure Maps m'a donné :

Score: 0.87 //High
Address.StreetName : Rue du Cambodge
Address.Municipality : Marseille
Address.Municipality : Provence-Alpes-Côte d'Azur
Address.Country : France
Position.Longitude : 5.3751318
Position.Latitude : 43.2805184

Attendu

Je m'attendais à un score inférieur à 0,3 (médiocre), mais 0,87 ? À titre de comparaison, j'obtiens une réponse correcte avec Bing Maps.

Image de l’utilisateur

Réponse obtenue par Azure Maps :

{    "summary": {
        "query": "cambodge québec cambodge",
        "queryType": "NON_NEAR",
        "queryTime": 82,
        "numResults": 9,
        "offset": 0,
        "totalResults": 9,
        "fuzzyLevel": 2
    },
    "results": [
        {
            "type": "Street",
            "id": "LAIeuyoP0xgdIq3M27HdYA",
            "score": 0.87963835017856451,
            "matchConfidence": {
                "score": 0.87963835017856451
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipalitySubdivision": "6ème Arrondissement",
                "municipality": "Marseille",
                "countrySecondarySubdivision": "Bouches-du-Rhône",
                "countrySubdivision": "Provence-Alpes-Côte d'Azur",
                "countrySubdivisionName": "Provence-Alpes-Côte d'Azur",
                "countrySubdivisionCode": "PAC",
                "countryCode": "FR",
                "country": "France",
                "countryCodeISO3": "FRA",
                "freeformAddress": "Rue du Cambodge, Marseille",
                "localName": "Marseille"
            },
            "position": {
                "lat": 43.2805184,
                "lon": 5.3751318
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 43.28132,
                    "lon": 5.37465
                },
                "btmRightPoint": {
                    "lat": 43.27945,
                    "lon": 5.37523
                }
            }
        },
        {
            "type": "Street",
            "id": "2Es9hGvd5TS8SuiVGe5UmA",
            "score": 0.87963835017856451,
            "matchConfidence": {
                "score": 0.87963835017856451
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipality": "Grenay",
                "countrySecondarySubdivision": "Pas-de-Calais",
                "countrySubdivision": "Hauts-de-France",
                "countrySubdivisionName": "Hauts-de-France",
                "countrySubdivisionCode": "HDF",
                "postalCode": "62160",
                "countryCode": "FR",
                "country": "France",
                "countryCodeISO3": "FRA",
                "freeformAddress": "Rue du Cambodge, 62160 Grenay",
                "localName": "Grenay"
            },
            "position": {
                "lat": 50.4452649,
                "lon": 2.7542372
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 50.44696,
                    "lon": 2.75136
                },
                "btmRightPoint": {
                    "lat": 50.44386,
                    "lon": 2.75664
                }
            }
        },
        {
            "type": "Street",
            "id": "IkdUUwFzJkTt7wsaxdX_vQ",
            "score": 0.87963835017856451,
            "matchConfidence": {
                "score": 0.87963835017856451
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipalitySubdivision": "20ème Arrondissement",
                "municipality": "Paris",
                "neighbourhood": "Gambetta",
                "countrySecondarySubdivision": "Paris",
                "countrySubdivision": "Île-de-France",
                "countrySubdivisionName": "Île-de-France",
                "countrySubdivisionCode": "IDF",
                "postalCode": "75020",
                "countryCode": "FR",
                "country": "France",
                "countryCodeISO3": "FRA",
                "freeformAddress": "Rue du Cambodge, 75020 Paris",
                "localName": "Paris"
            },
            "position": {
                "lat": 48.8662682,
                "lon": 2.3980079
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 48.8668,
                    "lon": 2.39743
                },
                "btmRightPoint": {
                    "lat": 48.86542,
                    "lon": 2.39892
                }
            }
        },
        {
            "type": "Street",
            "id": "oWc270o08J6chH0SfDnlfA",
            "score": 0.87963835017856451,
            "matchConfidence": {
                "score": 0.87963835017856451
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipality": "Lorient",
                "neighbourhood": "Keroman-Merville-Nouvelle Ville",
                "countrySecondarySubdivision": "Morbihan",
                "countrySubdivision": "Bretagne",
                "countrySubdivisionName": "Bretagne",
                "countrySubdivisionCode": "BRE",
                "postalCode": "56100",
                "countryCode": "FR",
                "country": "France",
                "countryCodeISO3": "FRA",
                "freeformAddress": "Rue du Cambodge, 56100 Lorient",
                "localName": "Lorient"
            },
            "position": {
                "lat": 47.7381565,
                "lon": -3.3761245
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 47.73816,
                    "lon": -3.37613
                },
                "btmRightPoint": {
                    "lat": 47.73733,
                    "lon": -3.37551
                }
            }
        },
        {
            "type": "Street",
            "id": "m8uxBlj9niPvldKFFLrgTQ",
            "score": 0.86047700677302252,
            "matchConfidence": {
                "score": 0.86047700677302252
            },
            "address": {
                "streetName": "Rue Cambodge",
                "municipality": "Oujda",
                "countrySecondarySubdivision": "Oujda Angad",
                "countrySubdivision": "L'Oriental",
                "countrySubdivisionName": "L'Oriental",
                "countrySubdivisionCode": "2",
                "postalCode": "60000",
                "countryCode": "MA",
                "country": "Royaume du Maroc",
                "countryCodeISO3": "MAR",
                "freeformAddress": "Rue Cambodge, 60000 Oujda, L'Oriental",
                "localName": "Oujda"
            },
            "position": {
                "lat": 34.6906908,
                "lon": -1.9124465
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 34.69102,
                    "lon": -1.91324
                },
                "btmRightPoint": {
                    "lat": 34.69031,
                    "lon": -1.91149
                }
            }
        },
        {
            "type": "Street",
            "id": "WLQYXAECXCxlYG_K5-OLLA",
            "score": 0.87963835017856451,
            "matchConfidence": {
                "score": 0.87963835017856451
            },
            "address": {
                "streetName": "Passerelle du Cambodge",
                "municipality": "Gentilly",
                "countrySecondarySubdivision": "Val-de-Marne",
                "countrySubdivision": "Île-de-France",
                "countrySubdivisionName": "Île-de-France",
                "countrySubdivisionCode": "IDF",
                "postalCode": "94250",
                "countryCode": "FR",
                "country": "France",
                "countryCodeISO3": "FRA",
                "freeformAddress": "Passerelle du Cambodge, 94250 Gentilly",
                "localName": "Gentilly"
            },
            "position": {
                "lat": 48.8153604,
                "lon": 2.3362625
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 48.81659,
                    "lon": 2.33552
                },
                "btmRightPoint": {
                    "lat": 48.81435,
                    "lon": 2.33676
                }
            }
        },
        {
            "type": "Street",
            "id": "nsUFlqqLO-jPbUv59CA5hA",
            "score": 0.84853054866128619,
            "matchConfidence": {
                "score": 0.84853054866128619
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipalitySubdivision": "Medenine Sud",
                "municipality": "Medenine",
                "countrySubdivision": "Medenine",
                "countrySubdivisionName": "Medenine",
                "postalCode": "4100",
                "countryCode": "TN",
                "country": "Tunisie",
                "countryCodeISO3": "TUN",
                "freeformAddress": "Rue du Cambodge, Medenine, 4100",
                "localName": "Medenine"
            },
            "position": {
                "lat": 33.332884,
                "lon": 10.4826333
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 33.33298,
                    "lon": 10.48162
                },
                "btmRightPoint": {
                    "lat": 33.33261,
                    "lon": 10.48378
                }
            }
        },
        {
            "type": "Street",
            "id": "QYnC4rjBbpDfbcybsU_MOA",
            "score": 0.84853054866128619,
            "matchConfidence": {
                "score": 0.84853054866128619
            },
            "address": {
                "streetName": "Rue du Cambodge",
                "municipalitySubdivision": "Tunis Ville",
                "municipality": "Tunis",
                "neighbourhood": "Bellevue",
                "countrySubdivision": "Tunis",
                "countrySubdivisionName": "Tunis",
                "postalCode": "1009, 2023",
                "countryCode": "TN",
                "country": "Tunisie",
                "countryCodeISO3": "TUN",
                "freeformAddress": "Rue du Cambodge, Tunis, 1009, 2023",
                "localName": "Tunis"
            },
            "position": {
                "lat": 36.780254,
                "lon": 10.194091
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 36.78073,
                    "lon": 10.19357
                },
                "btmRightPoint": {
                    "lat": 36.77969,
                    "lon": 10.19469
                }
            }
        },
        {
            "type": "Street",
            "id": "044rRXnHqBoKIE7F-_Pt9A",
            "score": 0.78416738092639471,
            "matchConfidence": {
                "score": 0.78416738092639471
            },
            "address": {
                "streetName": "Rue Combodge",
                "municipality": "Nador",
                "countrySecondarySubdivision": "Nador",
                "countrySubdivision": "L'Oriental",
                "countrySubdivisionName": "L'Oriental",
                "countrySubdivisionCode": "2",
                "postalCode": "62000",
                "countryCode": "MA",
                "country": "Royaume du Maroc",
                "countryCodeISO3": "MAR",
                "freeformAddress": "Rue Combodge, 62000 Nador, L'Oriental",
                "localName": "Nador"
            },
            "position": {
                "lat": 35.1691758,
                "lon": -2.9392944
            },
            "viewport": {
                "topLeftPoint": {
                    "lat": 35.16955,
                    "lon": -2.93968
                },
                "btmRightPoint": {
                    "lat": 35.16868,
                    "lon": -2.93902
                }
            }
        }
    ]
}
Azure Maps
Azure Maps

Service Azure qui fournit des API géospatiales pour ajouter des cartes, des solutions d’analyse spatiale et de mobilité aux applications.


3 réponses

  1. SRILAKSHMI C 19,735 Points de réputation Personnel externe Microsoft Modérateur
    2026-04-16T17:01:09.7066667+00:00

    Bonjour, Ouellet Francis,

    Merci pour cette explication détaillée et pour avoir partagé l'exemple de réponse.

    Je comprends tout à fait votre préoccupation à ce sujet. D'après votre exemple, le comportement que vous observez est lié à la manière dont Azure Maps gère la recherche floue (fuzzy search) et l'attribution des scores.

    Dans Azure Maps, le score indique dans quelle mesure une partie de la requête correspond à un lieu connu ; il ne sert pas à valider la cohérence logique de l'intégralité de la saisie. Dans votre cas, bien que la requête elle-même ne soit pas valide, le terme « Cambodia » est mis en correspondance avec « Cambodge », qui constitue un nom de rue valide dans plusieurs localités. Étant donné que cette correspondance partielle est forte, le service renvoie un score élevé (~0,87), même si la requête globale n'a aucun sens.

    Ce comportement diffère de celui de Bing Maps, où des saisies similaires n'auraient peut-être renvoyé aucun résultat. Azure Maps est conçu pour renvoyer systématiquement la correspondance la plus proche possible, plutôt que de rejeter la requête.

    Pour des scénarios tels que le vôtre (validation ou rejet d'adresses incorrectes), se fier uniquement au score peut s'avérer insuffisant. Il peut être nécessaire d'appliquer des vérifications supplémentaires une fois la réponse reçue. Voici quelques approches recommandées :

    Réduire le niveau de correspondance floue : Par défaut, le paramètre fuzzyLevel est défini sur 2 (niveau plus tolérant). Vous pouvez le définir sur 1 ou 0 pour rendre la correspondance plus stricte et réduire le nombre de résultats approximatifs.

    Restreindre le périmètre de recherche : Utilisez des paramètres tels que countrySet=CA (ou le code ISO pertinent) pour limiter les résultats à un pays spécifique. Vous pouvez également utiliser des paramètres de cadre englobant (bounding box) ou de vue (view) pour circonscrire géographiquement les résultats.

    Appliquer votre propre seuil de score : Une fois la réponse reçue, filtrez les résultats en fonction de la valeur matchConfidence.score (par exemple, rejetez les résultats inférieurs à un seuil prédéfini). Il s'agit d'une pratique courante pour les cas d'usage liés à la validation.

    Valider les champs d'adresse renvoyés : Comparez le pays, la région ou la municipalité renvoyés avec les données attendues en entrée (par exemple, si la saisie fait référence au Québec, rejetez les résultats situés en dehors du Canada).

    Utiliser l'API appropriée : Pour les scénarios de géocodage d'adresses complètes, l'API SearchAddress est généralement privilégiée par rapport à des points de terminaison plus flexibles tels que SearchFuzzy.

    Concernant vos remarques sur le SDK .NET, nous comprenons vos préoccupations quant à son statut bêta et à l'absence de mises à jour récentes. En attendant, le recours à une désérialisation personnalisée (par exemple, via JsonDocument) constitue une solution de contournement valide. Si ce n'est pas déjà fait, nous vous recommandons également de signaler ou de soumettre vos problèmes sur le dépôt GitHub du SDK Azure, car il s'agit du canal principal utilisé par l'équipe produit.

    Dans l'ensemble, le comportement que vous observez est conforme aux attentes, compte tenu de la conception actuelle de la fonctionnalité de recherche d'Azure Maps. Toutefois, l'application des contraintes et de la logique de validation mentionnées ci-dessus devrait vous permettre d'obtenir le comportement plus strict que vous recherchez.

    Veuillez consulter la référence suivante.

    Best practices pour Azure Maps Search : https://docs.microsoft.com/azure/azure-maps/how-to-use-best-practices-for-search

    Recherche d’adresse avec countrySet, boundingBox, fuzzyLevel : https://docs.microsoft.com/azure/azure-maps/how-to-search-for-address

    Couverture géographique Azure Maps Search : https://docs.microsoft.com/azure/azure-maps/geocoding-coverage

    Feedback tool (ajout/édition d’adresses et POI) : https://docs.microsoft.com/azure/azure-maps/how-to-use-feedback-tool

    Migration Bing → Azure Maps : https://docs.microsoft.com/azure/azure-maps/migrate-from-bing-maps

    J'espère que cela vous sera utile. N'hésitez pas à me faire savoir si vous avez d'autres questions.

    Merci !

    Cette réponse a-t-elle été utile ?

    1 personne a trouvé cette réponse utile.
    0 commentaires Aucun commentaire

  2. Ouellet Francis 1 Point de réputation
    2026-04-29T19:21:15.0833333+00:00

    À titre d'exemple, voici ce que j'obtiens de l'API de Google Maps:

    {
      "places": [
        {
          "id": "ChIJ_3R9U_qWuEwR6Z_H6X_Z_6U",
          "formattedAddress": "1295 3e Ave, Québec, QC G1L 2X8, Canada",
          "location": {
            "latitude": 46.8285514,
            "longitude": -71.2294101
          },
          "displayName": {
            "text": "Le Cambodge",
            "languageCode": "fr"
          },
          "types": [
            "cambodian_restaurant",
            "asian_restaurant",
            "restaurant",
            "food",
            "point_of_interest",
            "establishment"
          ],
          "rating": 4.6,
          "userRatingCount": 425,
          "priceLevel": "PRICE_LEVEL_MODERATE",
          "nationalPhoneNumber": "(418) 523-2224",
          "websiteUri": "https://facebook.com",
          "openingHours": {
            "openNow": true,
            "periods": [
              {
                "open": { "day": 1, "hour": 11, "minute": 0 },
                "close": { "day": 1, "hour": 21, "minute": 0 }
              }
            ],
            "weekdayDescriptions": [
              "lundi: 11:00 – 21:00",
              "mardi: 11:00 – 21:00",
              "mercredi: Fermé",
              "jeudi: 11:00 – 21:00",
              "vendredi: 11:00 – 22:00",
              "samedi: 11:00 – 22:00",
              "dimanche: 16:00 – 21:00"
            ]
          }
        }
      ]
    }
    
    

    Avec un Rating de 4.6 il est facile pour moi de savoir que c'est une correspondance faible. De plus, il a respecté la contrainte géographique de pays.

    Cette réponse a-t-elle été utile ?

    0 commentaires Aucun commentaire

  3. Ouellet Francis 1 Point de réputation
    2026-04-29T18:58:40.0866667+00:00

    J'ai essayé countrySet=CA, mais rien n'a changé les mêmes résultats avec les mêmes scores

    • Marseille : 0.88
    • Paris : 0.88
    • Bretagne: 0.88
    • Haut-De-France : 0.88
    • Oujda : 0.86
    • Gentilly : 0.88
    • Tunis : 0.84
    • Medenine : 0.85
    • Nador : 0.78

    Ce que je constate à l'utilisation:

    • countrySet n’influence pas le scoring
    • Le moteur sur‑pondère le nom de rue au point d’ignorer pays/province
    • Le score fuzzy est calculé avant filtrage, et jamais recalculé
    • Le moteur retourne des scores élevés pour des résultats hors Canada, même avec countrySet=CA
    • Le service est inutilisable pour valider des adresses canadiennes sans wrapper maison

    Cette réponse a-t-elle été utile ?


Votre réponse

Les réponses peuvent être marquées comme « Acceptées » par l’auteur de la question et « Recommandées » par les modérateurs, ce qui aide les utilisateurs à savoir que la réponse a résolu le problème de l’auteur.