2015-07-31 2 views
0

J'ai créé une application WPF pour trouver des localisations à partir du mot-clé entré. Pour cela, j'ai utilisé le service de cartes bing api mon code estRecherche d'adresses suggérées à partir d'un mot-clé dans le service de recherche bing

private object SearchKeywordLocation(string keywordLocation) 
    { 
     String results = ""; 
     SearchRequest searchRequest = new SearchRequest(); 

     // Set the credentials using a valid Bing Maps key 
     searchRequest.Credentials = new SearchService.Credentials(); 
     searchRequest.Credentials.ApplicationId = "my key"; 

     //Create the search query 
     StructuredSearchQuery ssQuery = new StructuredSearchQuery(); 
     string[] parts = keywordLocation.Split(';'); 
     ssQuery.Keyword = parts[0]; 
     ssQuery.Location = parts[1]; 
     searchRequest.StructuredQuery = ssQuery; 

     //Define options on the search 
     searchRequest.SearchOptions = new SearchOptions(); 
     searchRequest.SearchOptions.Filters = 
      new FilterExpression() 
      { 
       PropertyId = 3, 
       CompareOperator = CompareOperator.GreaterThanOrEquals, 
       FilterValue = 8.16 
      }; 

     //Make the search request 
     SearchServiceClient searchService = new SearchServiceClient("BasicHttpBinding_ISearchService"); 
     SearchResponse searchResponse = searchService.Search(searchRequest); 

     //Parse and format results 
     if (searchResponse.ResultSets[0].Results.Length > 0) 
     { 
      StringBuilder resultList = new StringBuilder(""); 
      for (int i = 0; i < searchResponse.ResultSets[0].Results.Length; i++) 
      { 
       resultList.Append(String.Format("{0}. {1}\n", i + 1, 
        searchResponse.ResultSets[0].Results[i].Name)); 
      } 

      results = resultList.ToString(); 
     } 
     else 
      results = "No results found"; 

     return results; 
    } 
} 

pour cette application. Je reçois des résultats quand j'appelle SearchKeywordLocation("sushi; Arvada, CO"); mais mon exigence est d'obtenir des résultats quand j'appelle SearchKeywordLocation("new"); Je devrais obtenir des résultats liés à New York. cette mise en forme de chaîne spécifique doit être évitée. Qu'est-ce que je fais mal ici?

Répondre

0

Le service de recherche est pour les points d'intérêt et non pour les adresses. New York tombe dans la catégorie d'une adresse et est quelque chose qui devrait être passé par le service de géocodage. Cela dit, le fait de passer en "Nouveau" dans l'un des services ne donnerait pas le résultat escompté car il y a des millions de résultats possibles qui ont le mot "nouveau" dans leur nom. Compte tenu de cela, le géocodeur identifiera probablement qu'il s'agit d'une mauvaise requête formée et limitera les résultats possibles à quelques-uns seulement (en testant "nouveau" je vois 5 résultats, New York n'en faisait pas partie). Cela dit, vous devriez également éviter d'utiliser les anciens services SOAP existants. Ils approchent de la fin de la vie et la documentation a été mise hors ligne il y a quelques années. En fait, nous avons cessé de recommander les services SOAP il y a environ 5 ans et nous ne les avons gardés que pour les clients qui utilisent de vieilles applications. Ces services ont été remplacés par les services Bing Maps il y a 5 ans, qui ont beaucoup plus de fonctionnalités et de fonctionnalités, sont beaucoup plus rapides, ont des objets de réponse plus petits et ont tendance à renvoyer des résultats plus précis. Vous pouvez trouver de la documentation sur l'utilisation des services REST ici: https://msdn.microsoft.com/en-us/library/ff701713.aspx

Voici la documentation sur les utiliser dans .NET: https://msdn.microsoft.com/en-us/library/jj819168.aspxI

J'ai aussi travaillé sur la création d'une belle bibliothèque .NET qui enveloppe les services les rendre plus faciles à utiliser dans ces types d'applications. Si vous souhaitez le tester, envoyez-moi un email à ricky_brundritt sur Hotmail.com et je vous enverrai une copie de la bibliothèque.