模拟Google地图基于位置的网址

时间:2014-09-26 16:42:08

标签: angularjs google-maps google-maps-api-3 angular-routing

在谷歌地图上,登陆主页后,您会看到一个默认位置(取决于您的位置),网址如下所示:

https://www.google.com/maps/preview

在地图上移动后,网址会发生变化,添加/maps以及一些带LatLng和缩放的参数

https://www.google.com/maps/@38.3206568,-120.9094382,10z

如果您将该链接指定给某人,则会指向该特定位置。

我正在开发的网站在着陆页上显示了一张地图,因此当您转到www.mymapsite.com时,您会看到一张包含默认位置的地图。然后,当你四处走动时,我想添加前面描述的相同行为(但没有/maps)。

https://www.mymapsite.com/@38.3206568,-120.9094382,10z

我在控制器内部使用此功能来使用$location服务更新路径:

$scope.updateMapTrack = function() {
    $rootScope.trackOptions = $scope.trackOptions;
    $location.path('@' + $scope.trackOptions.centerLat + ',' + $scope.trackOptions.centerLng + ',' +$scope.trackOptions.zoomLevel + 'z');
};

问题是,这会通过$urlRouterProvider.otherwise('notfound')并将我踢出地图(显示我们的自定义404错误)。

我的问题是;还有什么我应该在$ urlRouterProvider上修改以允许这种行为?我应该使用不同的东西来改变网址?

如果您提供不同的方法来实现这一点,我也将感谢您。

1 个答案:

答案 0 :(得分:0)

最后我努力了:)(但是从这个问题的低访问量来看,我觉得我不会帮助很多人)

这需要进行很多更改,以防万一有人想在他们的网站上做类似的事情,这里只是需要的简短版本:

  • 更新网址时,您必须使用.replace()

    $location.path(newPath).replace();

  • 要控制路由例程,必须添加$urlRouterProvider.deferIntercept();,如描述here,这样可以处理某些边缘情况。

  • 要重定向到第一个目标上的默认位置:

    $urlRouterProvider.when('/', defaultTrackingOption);//the same for other landing possibilities

  • 与控制器匹配的路由网址必须具有匹配跟踪模式的正则表达式(我的基本功能非常基本,我甚至无法在此处共享)