在Rails 3中使用mapstraction升级google maps api
我正在尝试将应用程序升级到Rails 3.该应用程序需要一个可以编辑的地图,并且它一直在使用谷歌地图和地图绘制。 当我升级到rails 3时,地图停止显示,我认为这是因为它需要从谷歌地图api v2更新到v3。
我一直在尝试使用本教程升级它,但由于应用程序正在使用mapstraction,我一直难以让它工作。
最初,这是在HTML中:
<script src="http://maps.google.com/maps?file=api&v=2&key=" type="text/javascript">
maps.js如下:
var Map = function() { this.init() } $.extend(Map.prototype, { m : false, init: function() { this.m = new mxn.Mapstraction('mapdiv', 'googlev3') this.m.addControls({pan: true, zoom: 'large', map_type: false}) // this.m.enableScrollWheelZoom() this.m.setMapType(3) return this.m }, addPoint: function(lat, lng, html) { var myPoint = new mxn.LatLonPoint(lat, lng); var marker = new mxn.Marker(myPoint); marker.setInfoBubble(html); this.m.addMarker(marker); }, setCenterAndZoom: function(center, zoom) { this.m.setCenterAndZoom(center, zoom) }, boundingBox: function(lat1, lon1, lat2, lon2) { var zoom = this.m.getZoomLevelForBoundingBox(new mxn.BoundingBox(lat1, lon1, lat2, lon2)) var centerlng = (lon1 + lon2) / 2 var centerlat = (lat1 + lat2) / 2 var myPoint = new mxn.LatLonPoint(centerlat, centerlng); this.m.setCenterAndZoom(myPoint, zoom) }, addPointToLine: function(lat, lng, line, html, length) { var point = new mxn.LatLonPoint(lat, lng) line.points.push(point); var i = line.points.length var num = 100 if (i == 1) { m.addPoint(lat, lng, html) } }, addUser: function(lat, lng, avatar, html) { var marker = new mxn.Marker(new mxn.LatLonPoint(lat, lng)); marker.setInfoBubble(html); marker.setIcon(avatar); marker.setIconSize([30,30]) mmaddMarker(marker); } });
我尝试将html更改为此(基于升级教程和mapstraction教程):
但是当这没有什么区别时,我试图删除mapstraction并将maps.js更改为以下内容:
var Map = function() { this.init() } $.extend(Map.prototype, { m : false, init: function() { this.m = new google.maps.Map(document.getElementById('mapdiv'), {zoom: 13, mapTypeId: google.maps.MapTypeId.HYBRID}); // this.m.addControls({pan: true, zoom: 'large', map_type: false}) // this.m.enableScrollWheelZoom() // this.m.setMapType(3) return this.m }, addPoint: function(lat, lng, html) { var myPoint = new google.maps.LatLng(lat, lng); var marker = new google.maps.Marker(myPoint); marker.setInfoBubble(html); this.m.addMarker(marker); }, setCenterAndZoom: function(center, zoom) { this.m.setCenterAndZoom(center, zoom) }, boundingBox: function(lat1, lon1, lat2, lon2) { var zoom = this.m.getZoomLevelForBoundingBox(new google.maps.LatLonAltBox(lat1, lon1, lat2, lon2)) var centerlng = (lon1 + lon2) / 2 var centerlat = (lat1 + lat2) / 2 var myPoint = new google.maps.LatLng(centerlat, centerlng); this.m.setCenterAndZoom(myPoint, zoom) }, addPointToLine: function(lat, lng, line, html, length) { var point = new google.maps.LatLng(lat, lng) line.points.push(point); var i = line.points.length var num = 100 if (i == 1) { m.addPoint(lat, lng, html) } }, addUser: function(lat, lng, avatar, html) { var marker = new google.maps.Marker(new google.maps.LatLng(lat, lng)); marker.setInfoBubble(html); marker.setIcon(avatar); marker.setIconSize([30,30]) mmaddMarker(marker); } });
但仍然没有…有没有人知道如何让地图显示?
谢谢
- 因为看起来你的代码使用jQuery(
$.extend
),你是否包含了jQuery? - 您定义的所有方法都是
Map
方法,但是您尝试为Map.m
调用这些方法(这是一个google.map.Map
-instance并且没有这样的方法) - 我没有看到你在哪里创建
Map
-instance(我的意思是你的“类”,而不是google.maps.Map
) -
google.maps.Map
需要一个不存在的center
属性(至少在Map.init()
创建google.maps.Map
-instance时不会出现)