Проблема с полилиниями при высоком уровне масштабирования в элементе управления картой 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).

Q: Есть идеи относительно первопричины проблемы и как ее исправить? Спасибо.

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

1 ответ

Решение

Вероятная проблема связана с отсутствующим метатегом UTF-9 или с типом документа. V6.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 лет назад и скоро будет близок к концу. Документация для v6.3 была переведена в автономный режим более года назад как часть срока действия этой версии.

Другие вопросы по тегам