Google Maps Platform拒绝了您的请求。无效的“ pb”参数

时间:2019-01-30 16:04:40

标签: android google-maps android-webview google-maps-embed

我正在尝试在网络视图中显示Google地图,但这是在说

  

Google Maps Platform拒绝了您的请求。非法请求。无效的“ pb”参数。

但是当我在网络浏览器上渲染相同的iframe时,它运行良好

这是我要在网络视图中呈现的内容,这是存储在变量 iframeData

中的字符串
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
        <iframe src="https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928" width="340.0" height="250" frameborder="0" style="border:0" allowfullscreen></iframe>
    </body>
</html>

这是我的Android代码,用于将此iframe呈现到webview

String iframeData = //look above

WebView webViewMap = (WebView) rootView.findViewById(R.id.webViewMap);
WebSettings settings = webViewMap.getSettings();
settings.setJavaScriptEnabled(true);
settings.setBuiltInZoomControls(true);
settings.setSupportZoom(false);
settings.setUseWideViewPort(false);
if (Build.VERSION.SDK_INT >= Build.VERSION_CODES.JELLY_BEAN) {
    settings.setAllowUniversalAccessFromFileURLs(true);
}
settings.setLayoutAlgorithm(WebSettings.LayoutAlgorithm.SINGLE_COLUMN);
webViewMap.loadData(iframeData, "text/html", null);

Screenshot

3 个答案:

答案 0 :(得分:1)

示例中iframe内的URL看起来像是从Google Maps网站上的共享位置获得的链接。通常,不应将该网址视为Google Maps Platform产品。但是,由于某种原因,Google在WebView组件中将其视为Google Maps Platform。

我认为这是Google的错误。

解决方法是使用Google Maps Embed API中的URL替换共享URL。在这种情况下,您将拥有正确的Google Maps Platform链接,它应该可以正常工作。请注意,您需要有效的API密钥才能使用Google Maps Embed API。

代码段为:

<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.0 Transitional//EN" "http://www.w3.org/TR/REC-html40/loose.dtd">
<html>
    <body>
      <iframe width="600" height="450" frameborder="0" style="border:0"
src="https://www.google.com/maps/embed/v1/place?q=The+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius&key=AIzaSyDztlrk_3CnzGHo7CFvLFqE_2bUKEq1JEU" allowfullscreen></iframe>
    </body>
</html>

您应该用我的API密钥替换。

我希望这会有所帮助!

答案 1 :(得分:0)

对此的无缝方法是:

  1. Google Maps

    上搜索您想要包含在 iframe 中的位置
  2. 点击分享按钮share button

  3. 当模态打开时,点击嵌入地图选项卡 copy html button

  4. 复制您想要的地图尺寸的 HTML 代码,并将其粘贴到您的 iframe 中。

答案 2 :(得分:-2)

正确答案:

使用URLEncoder.encode(...)对URL进行编码以转义字符并解决问题。

String googleMapLink = "https://www.google.com/maps/embed?pb=!1m14!1m8!1m3!1d14988.154038971099!2d57.510438!3d-20.090677!3m2!1i1024!2i768!4f13.1!3m3!1m2!1s0x0%3A0xc479c0ed4774c8e7!2sThe+Westin+Turtle+Bay+Resort+%26+Spa%2C+Mauritius!5e0!3m2!1sen!2smu!4v1513055435928";
String encodedUrl = null;
try {
    encodedUrl = URLEncoder.encode(googleMapLink,"UTF-8");
} catch (UnsupportedEncodingException e) {
    e.printStackTrace();
}

String iframe = "<iframe src=\""+ encodedUrl +"\" width=\"100%\" height=\"100%\" frameborder=\"0\" style=\"border:0\" allowfullscreen></iframe>";

googlemap_webView.getSettings().setJavaScriptEnabled(true);
googlemap_webView.loadData(iframe, "text/html", "utf-8");