必应地图API,我做错了什么

本文关键字:错了 什么 地图 API | 更新日期: 2023-09-27 18:33:21

我正在尝试让我的学校使用必应地图 API 并使用 GeocodeAdress。我构建了这个应用程序:http://msdn.microsoft.com/en-us/library/dd221354.aspx,问题是我每次都收到此错误。

它位于第 62 行:此方法:地理编码服务客户端地理编码服务 = 新的地理编码服务客户端();

!无效操作异常未处理System.ServiceModel 中发生类型为"System.InvalidOperationException"的未处理异常.dll

其他信息:无法加载协定"GeocodeService.IGeocodeService"的端点配置部分,因为找到了该协定的多个端点配置。请按名称指明首选终结点配置部分。

这是代码:

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using BingMapsSample.GeocodeService;
using BingMapsSample.SearchService;
using BingMapsSample.ImageryService;
using BingMapsSample.RouteService;
namespace BingMapsSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }
    private String GeocodeAddress(string address)
    {
        string results = "";
        string key = "Validate Bing Map Education Code";
        GeocodeRequest geocodeRequest = new GeocodeRequest();
        // Set the credentials using a valid Bing Maps key
        geocodeRequest.Credentials = new GeocodeService.Credentials();
        geocodeRequest.Credentials.ApplicationId = key;
        // Set the full address query
        geocodeRequest.Query = address;
        // Set the options to only return high confidence results 
        ConfidenceFilter[] filters = new ConfidenceFilter[1];
        filters[0] = new ConfidenceFilter();
        filters[0].MinimumConfidence = GeocodeService.Confidence.High;
        // Add the filters to the options
        GeocodeOptions geocodeOptions = new GeocodeOptions();
        geocodeOptions.Filters = filters;
        geocodeRequest.Options = geocodeOptions;
        // Make the geocode request
        GeocodeServiceClient geocodeService = new GeocodeServiceClient();
        GeocodeResponse geocodeResponse = geocodeService.Geocode(geocodeRequest);
        if (geocodeResponse.Results.Length > 0)
            results = String.Format("Latitude: {0}'nLongitude: {1}",
              geocodeResponse.Results[0].Locations[0].Latitude,
              geocodeResponse.Results[0].Locations[0].Longitude);
        else
            results = "No Results Found";
        return results;
    }
    private string ReverseGeocodePoint(string locationString)
    {
        string results = "";
        string key = "Validate Bing Map Education Code";
        ReverseGeocodeRequest reverseGeocodeRequest = new ReverseGeocodeRequest();
        // Set the credentials using a valid Bing Maps key
        reverseGeocodeRequest.Credentials = new GeocodeService.Credentials();
        reverseGeocodeRequest.Credentials.ApplicationId = key;
        // Set the point to use to find a matching address
        GeocodeService.Location point = new GeocodeService.Location();
        string[] digits = locationString.Split(',');
        point.Latitude = double.Parse(digits[0].Trim());
        point.Longitude = double.Parse(digits[1].Trim());
        reverseGeocodeRequest.Location = point;
        // Make the reverse geocode request
        GeocodeServiceClient geocodeService = new GeocodeServiceClient();
        GeocodeResponse geocodeResponse = geocodeService.ReverseGeocode(reverseGeocodeRequest);
        if (geocodeResponse.Results.Length > 0)
            results = geocodeResponse.Results[0].DisplayName;
        else
            results = "No Results found";
        return results;
    }
    private string SearchKeywordLocation(string keywordLocation)
    {
        String results = "";
        String key = "Validate Bing Map Education Code";
        SearchRequest searchRequest = new SearchRequest();
        // Set the credentials using a valid Bing Maps key
        searchRequest.Credentials = new SearchService.Credentials();
        searchRequest.Credentials.ApplicationId = 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();
        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;
    }

    private void Geocode_Click(object sender, RoutedEventArgs e)
    {
        labelResults.Content = GeocodeAddress(textInput.Text);
    }
    private void ReverseGeocode_Click(object sender, RoutedEventArgs e)
    {
        labelResults.Content = ReverseGeocodePoint(textInput.Text);
    }
    private void Search_Click(object sender, RoutedEventArgs e)
    {
        labelResults.Content = SearchKeywordLocation(textInput.Text);
    }
}
}

我发现解决方案第 62 行应该是:

var geocodeService = new GeocodeServiceClient("BasicHttpBinding_IGeocodeService");

必应地图API,我做错了什么

打开 web.config 文件或 app.config 文件。在其中,您将看到服务的基本和自定义绑定配置。删除自定义绑定部分。清理并构建您的项目,它应该可以工作。

作为旁注。Bing 地图 SOAP 服务非常陈旧,功能有限。他们大约在 8 年前被释放。大约 4 年前发布了基于 REST 的较新的服务。REST 速度更快,响应包更小,功能更多。您可以在此处找到有关必应地图 REST 服务的更多信息:http://msdn.microsoft.com/en-us/library/ff701713.aspx