Google maps api 3 Windows应用商店应用程序(C#/XAML)上的谷歌地图-无收缩缩放

Google maps api 3 Windows应用商店应用程序(C#/XAML)上的谷歌地图-无收缩缩放,google-maps-api-3,windows-store-apps,winrt-xaml,Google Maps Api 3,Windows Store Apps,Winrt Xaml,是否有人能够成功地在Windows 8.1的Windows应用商店应用程序(C#/XAML)中包含某种类型的Google地图视图?由于Bing地图许可证的成本,我们选择了Google地图(这会更容易,因为Bing地图有一个本地Metro控件) 我能够跟踪并在WebView控件中包含html页面。我还可以与我的C#类进行通信(使用ScriptNotify和window.external.notify) 但是,夹点缩放手势无法识别,因为它不会在地图上执行缩放。 这是我的网络视图 <Grid B

是否有人能够成功地在Windows 8.1的Windows应用商店应用程序(C#/XAML)中包含某种类型的Google地图视图?由于Bing地图许可证的成本,我们选择了Google地图(这会更容易,因为Bing地图有一个本地Metro控件)

我能够跟踪并在WebView控件中包含html页面。我还可以与我的C#类进行通信(使用ScriptNotifywindow.external.notify

但是,夹点缩放手势无法识别,因为它不会在地图上执行缩放。

这是我的网络视图

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <Grid x:Name="GridOut">
        <WebView x:Name="MapWebView" ScrollViewer.HorizontalScrollMode="Disabled" ScrollViewer.VerticalScrollMode="Disabled" ManipulationMode="All" />
    </Grid>
</Grid>

以及带有地图的html页面:

<html lang="en" xmlns="http://www.w3.org/1999/xhtml"><head>
<meta charset="utf-8" />
    <meta http-equiv="X-UA-Compatible" content="IE=10" /> <!-- To get double tap for zoom to work-->
    <!– Google Maps API reference –>
    <script src="https://maps.googleapis.com/maps/api/js?sensor=false&libraries=visualization"></script>
    <script type="text/javascript" src="libs/richmarker.js"></script>
    <script type="text/javascript" src="CountryInfo.js"></script>
    <script type="text/javascript" src="libs/infobox.js"></script>
    <!– map references –>
    <link href="map.css" rel="stylesheet" />
<script src="map.js"></script>
</head>
<body>
    <div id="mapdisplay" />
</body>
</html>

但是,如果我在IE中打开我的HTML页面(甚至在VisualStudio模拟器中使用IE),收缩到缩放的手势就在那里并且工作顺利,因此我假设问题出在WebView上。另一方面,如果我将我的WebView导航到这个位置,收缩缩放将起作用,因此这确实让我感到困惑

我也尝试过:

1) 在额外的HTML页面中使用IFrame,但它没有改变任何东西

2) 实现我自己的用于缩放的JavaScript手势识别器(带有MSGestureChange),但结果远非理想,我感觉自己在“重新发明一个非常糟糕的轮子”

有人知道这个问题吗


提前感谢。

这就是我的工作,但它与实际的谷歌地图缩放相去甚远,因为:

1) Google Maps的“收缩到缩放”功能不仅仅是跳到缩放级别,它还可以缩放平铺以实现平滑的动画/过渡

2) 根据用户在屏幕上应用缩放的位置,它也会倾向于平移到该区域(假设您以LatLong 0,0为中心,缩放级别为2。如果用户挤压北极,则缩放级别应增加,并在您继续放大时逐渐平移到北极)

var-mGesture=new-mspirture();
函数InitGestureHandler()
{
var mapDiv=document.getElementById('mapdisplay');
mGesture.target=mapDiv;
//您需要首先注册到MSPointerDown才能
//可以访问更复杂的手势事件
mapDiv.addEventListener(“pointerdown”,pointerdown,false);
mapDiv.addEventListener(“MSGestureChange”,操纵元素,false);
}
函数操纵元素(e){
//还可以在此处添加时间戳,以允许代码仅每隔10毫秒运行一次
如果(e.刻度>1.05){
map.setZoom(currentZoomLevel+1);
}
否则如果(e.刻度<0.95){
map.setZoom(currentZoomLevel-1);
}
}

要尝试的一件事可能是添加到地图脚本中。您好,Nate。谢谢你的建议。我为文档主体和实际的Map div应用了CSS,但我没有注意到任何差异。没有缩放。我不明白为什么在普通浏览器上“收缩缩放”效果很好。不幸的是,你可能运气不好。WebView不是全浏览器,它仅以文档模式呈现页面。您可能需要按照建议添加手势识别器。但是,您可以在C#/Xaml中执行此操作,然后使用ScriptNotify指示JavaScript执行什么操作。这也会使调试/测试变得更容易。再次感谢你,Nate。实际上,我直接在JavaScript上处理了挤压手势,以避免重新实现所有其他手势(拖动以进行平移、双击等)。我在下面发布了我的解决方案,但奇怪的是,多点触摸可以在实际的网络视图中捕捉到,这让我相信这可能与谷歌地图v3 api有关。谷歌知道Windows 8.1上的缩放问题,但他们还没有解决。您可能希望对以下问题进行投票:
var mGesture = new MSGesture();

function InitGestureHandler()
{

    var mapDiv = document.getElementById('mapdisplay');
    mGesture.target = mapDiv;

    // You need to first register to MSPointerDown to be able to
    // have access to more complex Gesture events
    mapDiv.addEventListener("pointerdown", pointerdown, false);
    mapDiv.addEventListener("MSGestureChange", manipulateElement, false);

}

function manipulateElement(e) {

    //Can also add timestamps here to allow the code to run only every so milliseconds
    if (e.scale > 1.05) {
        map.setZoom(currentZoomLevel + 1);
    }
    else if (e.scale < 0.95) {
        map.setZoom(currentZoomLevel - 1);
    }
}