Как попробовать геокодирование с помощью Bing map rest APi.Почтовый метод - PullRequest
0 голосов
/ 24 декабря 2018

Я сослался на это: https://docs.microsoft.com/en-us/bingmaps/rest-services/using-the-rest-services-with-net и написал следующий код.

             public void Geocode(string BingMapKey,string addressToBeGeocoded)
             {
                  Uri geocodeRequest = new Uri(string.Format("http://dev.virtualearth.net/REST/v1/Locations?key={0}", BingMapKey));
                            GetPOSTResponse(geocodeRequest,addressToBeGeocoded, (x) =>
                            {
                                if (!(x.ResourceSets[0].Resources.Length > 0))// atleast one matching result has come.0 is the best matching result
                                {
                                    geocodeNotFound=true;
                                }
                            else
                                {

                                    BingMapsRESTService.Common.JSON.Location val = x.ResourceSets[0].Resources[0] as BingMapsRESTService.Common.JSON.Location;
                                    var latitude = val.GeocodePoints[0].Coordinates[0];
                                    var longitude = val.GeocodePoints[0].Coordinates[1];
                                }
                            }
                }

            private void GetPOSTResponse(Uri uri, string data, Action<BingMapsRESTService.Common.JSON.Response> callback)
            {
                        HttpWebRequest request = (HttpWebRequest)HttpWebRequest.Create(uri);

                        request.Method = "POST";
                        request.ContentType = "text/plain;charset=utf-8";

                        System.Text.UTF8Encoding encoding = new System.Text.UTF8Encoding();
                        byte[] bytes = encoding.GetBytes(data);

                        request.ContentLength = bytes.Length;

                        using (Stream requestStream = request.GetRequestStream())
                        {
                            // Send the data.  
                            requestStream.Write(bytes, 0, bytes.Length);
                        }

                        request.BeginGetResponse((x) =>
                        {
                            using (HttpWebResponse response = (HttpWebResponse)request.EndGetResponse(x))
                            {
                                if (callback != null)
                                {
                                    DataContractJsonSerializer ser = new DataContractJsonSerializer(typeof(BingMapsRESTService.Common.JSON.Response));
                                    try
                                    {
                                        callback(ser.ReadObject(response.GetResponseStream()) as BingMapsRESTService.Common.JSON.Response);
                                    }

                                    catch (Exception e)
                                    {
                                        errorCount++;
                                    }
                            }
                            }
                        }, null);
            }

Но это дает мне ошибку: {"The remote server returned an error: (405) Method Not Allowed."}

вместо этого, если я использую вызов GETкак упомянуто в примере ссылки на bing, это работает.Я хочу использовать почтовый звонок.

Я не знаю, как точно должен выглядеть Uri geocodeRequest = new Uri(string.Format("http://dev.virtualearth.net/REST/v1/Locations/key={0}", bingMapKey));.Я думаю, что адрес будет в теле.Я не прав?

1 Ответ

0 голосов
/ 29 декабря 2018

Location API в Bing Maps поддерживает только GET, а не POST.Раньше это документировалось в верхней части каждой страницы документации по сервису, но я больше этого не вижу.Похоже, что команда Bing Maps только что перенесла свою документацию с MSDN на docs.microsoft.com за последние несколько недель.

Вы также можете рассмотреть возможность использования новой корпоративной картографической платформы Microsoft;Azure Maps.Он имеет больше функций, имеет более высокие лимиты бесплатного использования, как правило, дешевле, чем бесплатные, получает обновления данных гораздо чаще, чем Bing Maps, и является облачной службой Azure.Для простых индивидуальных запросов геокодирования он также поддерживает только запросы GET (большинство платформ сопоставления таковы), но для более сложных поисковых запросов есть поддержка запросов POST.Подобные службы поиска в Картах Azure можно найти здесь: https://docs.microsoft.com/en-us/rest/api/maps/search

Вот несколько дополнительных ресурсов на Картах Azure:

...