4

GPS 座標を Twitter ブートストラップ モーダル内の Google MAP ロードにプロットする MVC4 アプリケーションがあります。私の問題は、下の画像に示すように、IE 10 を使用すると、マップがすべてのタイルをロードする場合がある (場合によってはロードしない) ことです。

ここに画像の説明を入力

Chrome バージョン 27 ではマップがまったく表示されません。

ここに画像の説明を入力

マップの HTML コードは次のとおりです。

<div id="VehicleMovementModal" class="modal hide fade">
<div class="modal-header">
    <button class="close" data-dismiss="modal">×</button>
    <h3>Vehicle movement for the last 24 hours</h3>
</div>
<div class="modal-body">
    <div id="mapCanvas" class="mapCanvas">
    </div>
</div>
<br />
<div id="VehicleMovementLinkContainer" class="VehicleMovementLinkContainer">
    <i class="icon-download-alt"></i> <a href="~/Vehicle/GetGPSCoordinateCSV?vehicleId=@vehicleModel.VehicleData.Id&hours=24">Export GPS coordinates for the last 24 hours</a>
    <br />
    <i class="icon-download-alt"></i> <a href="~/Vehicle/GetGPSCoordinateCSV?vehicleId=@vehicleModel.VehicleData.Id&hours=48">Export GPS coordinates for the last 48 hours</a>
</div>

HTML ページ内から JavaScript を呼び出す方法

<script src="http://maps.googleapis.com/maps/api/js?key=aaaaaaa&sensor=false"></script>
<script type="text/javascript" src="~/Content/js/PlotVehicleMovement.js"></script>
<script type="text/javascript">
    google.maps.event.addDomListener(window, 'load', initialize());
</script> 

そして、マップを描画するために使用しているjavascript

function initialize() {

var gpsCoordinateCollection = $('#gpsCoordinates').val().split(',');

if (gpsCoordinateCollection.length > 0) {

    // The last GPS coordinates received + the date it was received.
    var gpsCoordinatePacket = gpsCoordinateCollection[0].split(';');

    if (gpsCoordinatePacket.length > 0) {

        var mapProp = {
            center: new google.maps.LatLng(gpsCoordinatePacket[0], gpsCoordinatePacket[1]),
            zoom: 15,
            mapTypeId: google.maps.MapTypeId.HYBRID
        };

        var map = new google.maps.Map(document.getElementById("mapCanvas"), mapProp);

        plotVehicleMovement(map, gpsCoordinateCollection);
    }
  }
}

function plotVehicleMovement(map, gpsCoordinateCollection) {

// Define the clickable area of the markers.
var shape = {
    coord: [1, 1, 1, 20, 18, 20, 18, 1],
    type: 'poly'
};

var polyLineLatLongCollection = [];

for (var i = 0; i < gpsCoordinateCollection.length; i++) {

    var gpsCoordinatePacket = gpsCoordinateCollection[i].split(';');

    var latLng = new google.maps.LatLng(gpsCoordinatePacket[0], gpsCoordinatePacket[1]);

    polyLineLatLongCollection.push(latLng);

    var marker = new google.maps.Marker({
        position: latLng,
        map: map,
        icon: {
            path: google.maps.SymbolPath.CIRCLE,
            scale: 4,
            strokeColor: '#F5B71A'
        },
        shape: shape
    });
    marker.setMap(map);
}

var polyLine = new google.maps.Polyline({
    path: polyLineLatLongCollection,
    strokeColor: '#F5B71A',
    strokeOpacity: 1.0,
    strokeWeight: 1
});

polyLine.setMap(map);
}
4

1 に答える 1

4

OK、問題は、リンクがクリックされるまでユーザーから隠されている twitter ブートストラップ モーダル div 内に私のマップが含まれていることでした。私のグーグルマップの高さと幅は、それが含まれている親のものに対するパーセンテージになるように指定されています。したがって、モーダルが表示されたときにマップのサイズが変更されるようにするには、次の JavaScript 関数を含める必要がありました。

function ResizeMap() {
    google.maps.event.trigger(map, "resize");
}

このjquery関数を追加して、サイズ変更をトリガーしました

$("#VehicleMovementModal").on('shown', function () {
    ResizeMap();
});

現在、すべてが期待どおりに機能しています。

于 2013-07-01T15:35:36.767 に答える