17

我正在使用 Phonegap 开发一个 Android 应用程序,并且无法弄清楚如何打开本地 Google Maps 应用程序以显示方向。我通过插入 URL 打开地图没有任何问题,但打开应用程序让我很难过。到目前为止,我只能在iOS平台上找到Phonegap相关的开发建议。

我已将 Google 地图添加到白名单权限,在我的脚本标签中包含正确的 Cordova.js 文件和 Google 地图链接,在我的 AndroidManifest.xml 文件中具有正确的权限,在我的构建路径中包含 Cordova.jar 和 Google Map API ,res目录下有Phonegap xml文件夹,我的assets/www目录下有js文件,libs目录下有jar文件。

我要完成的工作:

    1. 点击链接后,打开原生谷歌地图应用程序。如果设备上未安装应用程序,请通知用户未安装 Google 地图,必须安装。
      一种。我已经在检查网络连接并按照应有的方式进行处理。
    2. 谷歌地图打开显示从用户当前位置到点击链接位置的路线。

下面的示例在我的 Android 设备上的工作方式与在 iOS 上的工作方式完全相同,但显然没有打开 Google Maps 应用程序的操作。

<a> href="http://maps.google.com/maps?q=TD Washington DC"><img src="img/ico_pin.png" />White House</a></a>

第二个示例通过包含结束位置添加到第一个示例,尽管我无法弄清楚如何插入当前位置。最重要的是,它仍然没有打开 Google Maps 应用程序。

<a href="javascript:openMaps('daddr=1600+Pennsylvania+Ave+NW+Washington+DC+20500+USA');"><img src="img/ico_pin.png" />White House</a>

function openMaps(querystring) {
    var maproot = '';
    maproot = 'http://maps.google.com/maps?saddr=Current+Location&';
    window.location = maproot + querystring;
}

在下面的第三个示例中,我能够在我的应用程序中显示地图。它确实显示了正确的路线(从 A 点到 B 点的俯视图),但再次没有打开实际的 Google Maps 应用程序。

<a id="whDirections" href="#mm_directions" onclick="getDirections()">
                    <img src="img/ico_pin.png" />White House</a>

<div data-role="content">
    <div class="ui-bar-c ui-corner-all ui-shadow" style="padding: 1em;">
        <div id="mapdirections_canvas" style="height: 300px;"></div>
    </div>
</div>

function getDirections() {
    var directionsService = new google.maps.DirectionsService();
    var map;
    var directionsDisplay = new google.maps.DirectionsRenderer();
    var mapOptions = {
        zoom: 9,
        zoomControl: true,
        mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("mapdirections_canvas"), mapOptions);
    directionsDisplay.setMap(map);

    var myLatLng = new google.maps.LatLng(gmmLat, gmmLong);
    if (document.getElementById("whDirections")) {
        var request = {
            origin: myLatLng,
        destination: new google.maps.LatLng(38.897096, -77.036545), 
            travelMode: google.maps.TravelMode.DRIVING
    };
    directionsService.route(request, function(result, status) {
        if (status == google.maps.DirectionsStatus.OK) {
            directionsDisplay.setDirections(result); 
        }
    });
}

如果有人对此有链接或任何想法,我将非常感谢您的帮助。除了“Hello World”应用程序,这是我的第一个移动应用程序。请让我知道我是否遗漏了任何内容,或者我只是做错了。如果需要任何其他信息,请告诉我。

在此先感谢您的帮助。

4

8 回答 8

61

使用地理:输入 uri。

<a href="geo:38.897096,-77.036545">open map</a>

并且用户可以选择打开他们设备上安装的任何地图应用程序。

于 2013-04-01T15:23:03.583 回答
16

这项工作对我...

var addressLongLat = yourLatitude+','+yourLongitude

对于 Android 地图应用程序:

window.open("geo:"+addressLongLat);

对于 iOS 地图应用程序:

window.open("http://maps.apple.com/?q="+addressLongLat, '_system');

对于应用浏览器中的谷歌地图:

window.open("http://maps.google.com/?q="+addressLongLat, '_system');
于 2015-02-26T05:48:03.107 回答
6

适用于所有版本的 phonegap/cordova 或网络浏览器。它将谷歌地图本地应用程序。

从当前位置导航到 q - window.open("google.navigation:q=23.3728831,85.3372199&mode=d" , '_system');

对于搜索 - window.open("geo:0,0?q=pizza" , '_system');

在这里阅读 - https://developers.google.com/maps/documentation/android/intents

于 2015-07-21T10:40:21.540 回答
2

Launch Navigator Cordova/Phonegap 插件可用于使用本机导航应用程序导航到目的地:-

  1. 安卓:谷歌导航器
  2. iOS:苹果地图/谷歌地图
  3. Windows Phone:必应地图
于 2015-09-01T08:42:19.307 回答
1

如果您只是想通过使用地址而不是经纬度来打开本机地图应用程序,这里有一个适用于 Android 和 iOS 的简单解决方案:

function openNativeMapsApp(address) {

    console.log('Opening the native maps app...');

    var maps_schema;

    // Replace the following "if" line to your own way of identifying the system (android or ios)
    if ( app.device.android ) {
        maps_schema = encodeURI('geo://?q=' + address);
        window.open(maps_schema, "_system");
    } else {
        maps_schema = encodeURI('maps://?q=' + address);
        window.location.href = maps_schema;
    }
}

确保您的 config.xml 文件中有这些行:

<allow-intent href="maps:*" />
<access origin="maps:*" launch-external="yes" />

下面的行是“Android 特定的”。如果不将它们放在<platform name="android>标签内,可能会导致与 iOS 冲突:

<platform name="android">
    <access origin="*" />
    <allow-navigation href="*" />
    ...
</platform>
于 2019-12-18T20:20:47.273 回答
0

这就是我使用的:

function (lat, lon) {
    var latLon = lat + ',' + lon;

    if (device.platform.toUpperCase() === "ANDROID") {
        window.open("geo:" + latLon, "_system");
    } else if (device.platform.toUpperCase() === "IOS") {
        window.open("http://maps.apple.com/?sll=" + latLon + "&z=100&t=k", "_system");
    }
}

注意:打开 Apple 地图时,sll=...andt=k表示我指定了准确的经度和纬度,t=k表示我希望 Apple 地图显示卫星图像。此外,我只为 iOS 和 Android 编写代码,因此如果您使用其他平台,请务必明确检查每个平台!我很确定 Androidgeo:总是按您的预期工作,但我可能是错的。请记住:在真实设备上测试所有内容!

于 2017-02-24T20:13:32.377 回答
0

试试这个,

function openLocation() {
    window.open("https://www.google.com/maps/dir/'" + start_latitude + ',' + start_longitude + "'/'" + end_latitude + ',' + end_longitude + "'", '_system');
}
于 2020-06-08T09:15:50.420 回答
-2

这适用于科尔多瓦 3.4

window.open("http://maps.google.com/?q=" + address, "_system");

使用这种方法,谷歌地图会显示一个标记,并且可以使用文本地址,而不仅仅是经纬度坐标

于 2014-05-28T20:12:06.790 回答