Проблема с полилинией при высоком уровне масштабирования в управлении картой Virtual Earth V6.3 (Bing)

У меня есть приложение с управлением Virtual Earth V6.3, использующее чистый javascript для добавления ломаной линии, как показано в следующем примере фрагмента кода, встроенного в одну веб-страницу HTML5:

<!DOCTYPE html>
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
    <title>VE Map with Polyline</title>
    <script type="text/javascript" src="http://ecn.dev.virtualearth.net/mapcontrol/mapcontrol.ashx?v=6.3"></script>
    <script type="text/javascript">
        function MapLoad() {
            // load map
            var _map = new VEMap('Map');
            _map.LoadMap();

            // center point in NY City
            var _center = new VELatLong(40.75, -73.99);

            // zoom level
            _map.SetCenterAndZoom(_center, 14);

            // set Map style
            _map.SetMapStyle(VEMapStyle.Shaded);

            // polyline layer
            var _layerPolyline = new VEShapeLayer();

            // sample polyline array of coordinates
            var _arrPoints = [];
            _arrPoints.push(new VELatLong(40.78, -73.984));
            _arrPoints.push(new VELatLong(40.76, -73.989));
            _arrPoints.push(new VELatLong(40.75, -73.99));
            _arrPoints.push(new VELatLong(40.74, -73.991));
            _arrPoints.push(new VELatLong(40.73, -73.992));
            _arrPoints.push(new VELatLong(40.72, -73.993));
            _arrPoints.push(new VELatLong(40.72, -73.994));
            _arrPoints.push(new VELatLong(40.73, -73.995));
            _arrPoints.push(new VELatLong(40.73, -73.996));
            _arrPoints.push(new VELatLong(40.74, -73.997));

            // polyline object properties
            var _polyLine= new VEShape(VEShapeType.Polyline, _arrPoints);
            _polyLine.HideIcon();
            _polyLine.SetLineColor(new VEColor(0, 0, 255, 1));
            _polyLine.SetFillColor(new VEColor(0, 0, 255, 0));
            _polyLine.SetLineWidth(4);

            // add polyline to layer
            _layerPolyline.AddShape(_polyLine);

            // add layer to map
            _map.AddShapeLayer(_layerPolyline);
        }
    </script>
</head>
<body onload="MapLoad();">
    <div id="Map" style="position:absolute; height:98%; width:98%;"></div>
</body>
</html>

Он отлично работает на любом уровне масштабирования. Однако, по сути, тот же самый код дает странные результаты в реальном приложении при использовании веб-форм ASP.NET 4.5, а именно: ломаная линия исчезает при высоком уровне масштабирования (примерно выше 15).

Вопрос. Есть идеи относительно основной причины проблемы и способов ее устранения? Спасибо.

ОБНОВЛЕНИЕ: Проблема решена путем обновления до Bing Maps AJAX Control, версия 7.0 (работает: DEMO: полилиния маршрута автобуса видна при любом уровне масштабирования). Спасибо Рики Брандритт (@rbrundritt).


person Alexander Bell    schedule 23.04.2015    source источник


Ответы (1)


Вероятная проблема связана либо с отсутствующим метатегом UTF-9, либо с типом документа. Версия 6.3 действительно устарела и требует указания следующего метатега и типа документа:

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">

<meta http-equiv="Content-Type" content="text/html; charset=utf-8"/>

Другая возможная проблема заключается в том, что вы указали какие-либо учетные данные при загрузке карты. Это является нарушением условий использования Bing Maps.

_map = new VEMap('MapNYC');
_map.SetCredentials("YOUR_BING_MAPS_KEY");
_map.LoadMap();

Вы можете найти документацию о том, как создать учетную запись Bing Maps и ключ здесь:

https://msdn.microsoft.com/en-us/library/gg650598.aspx

https://msdn.microsoft.com/en-us/library/ff428642.aspx

Я рекомендую создать «базовый» ключ для «Общедоступных веб-сайтов». Это позволит вам совершать 125 000 бесплатных транзакций в год.

Все это говорит о том, что вы не должны использовать v6.3. Он был заменен на V7 более 5 лет назад, и скоро его срок службы подходит к концу. Документация для версии 6.3 была отключена более года назад в связи с окончанием срока службы этой версии.

person rbrundritt    schedule 23.04.2015
comment
Большое спасибо за ваш ответ (принят) и довольно проницательные комментарии. Кажется, что VE 6.3 не подходит для любого дальновидного разработчика приложений, но я удивлен, что он требует ключ/учетные данные для веб-приложений (предыдущие версии, насколько мне известно, этого не требовали). У меня есть ключ для приложения Desktop Win, которое я использую для своего разработчика WPF, но не для веб-приложений. Еще более запутанно: если я помещу этот ключ в свой javascript в виде простого текста (как в вашем примере), то он будет виден всему миру. Не могли бы вы прокомментировать этот вопрос? Спасибо и с уважением, Алекс Белл - person Alexander Bell; 26.04.2015
comment
Карты Bing представили метод аутентификации примерно в версии 5. Этот метод аутентификации был изменен с метода идентификатора/пароля на метод ключа с выпуском v6. Управление картой работает без аутентификации, но противоречит условиям использования. Неиспользование ключа представляет собой юридический риск. Другой риск заключается в том, что, поскольку вы не аутентифицируете карту, команда Bing Maps не знает, что вы используете версию 6.3, поэтому вы не получали никаких уведомлений об окончании срока ее службы. Любой может создать ключ, и он будет виден в виде простого текста. Обратите внимание, что даже в WPF легко извлечь ключ. - person rbrundritt; 27.04.2015
comment
Спасибо @rbrundritt, я понял вашу точку зрения. На самом деле, у меня есть все 3 ключа для моей учетной записи Bing, включая тот, который вы упомянули, поэтому я собираюсь использовать его для своего веб-приложения. Помимо этой проблемы с ключом/учетными данными, кажется, что V6.3 действительно старая и своего рода ошибочная технология, поэтому я рассматриваю либо обновление до V7, либо переход на Google Map. В любом случае, спасибо за ваше время и внимание. С наилучшими пожеланиями, Алекс Б. - person Alexander Bell; 27.04.2015