`

使用google map显示地图,并标注InfoWindow

阅读更多
首先导入google map JS(需要VPN):
<script src="http://maps.google.com/maps/api/js?v=3.5&sensor=false&libraries=places"></script>

然后定义一个地图显示区域:
<div id="content_map"></div>

最后添加JS:
///////////////////////////////////////////////////////////////////////////////
//map start
//var geocoder;
var MY_POSITION="You are here";
var map;
var markersArray = [];
var latlng=null;
function initializeMap(position) {
	$("#content_map").width($(window).width()).height($(window).height()-40);
//	geocoder = new google.maps.Geocoder();
	if (typeof google === 'undefined') {
		log("================google is undefined================");
		return ;
	}
	if(position==null){
		latlng = new google.maps.LatLng(38.54,77.02);//华盛顿经纬度
	}else{
		latlng = new google.maps.LatLng(position.coords.latitude, position.coords.longitude);
	}
	var myOptions = {
		zoom: 15,
		center: latlng,
		mapTypeId: google.maps.MapTypeId.ROADMAP
	}
	map = new google.maps.Map(document.getElementById("content_map"), myOptions);
}

function resizeMap(){
	if (!isNull(map)) {
		google.maps.event.trigger(map, 'resize');
		map.setCenter(latlng);
	}
}

function addMarker(location, item) {
	if (item === MY_POSITION) {
		var marker = new google.maps.Marker({
			position : location,
			title : MY_POSITION,
			map : map
		});
		markersArray.push(marker);
		
		var contentString = '<div style="color:black;text-align:center;">' +MY_POSITION+'</div>';
		var win = new google.maps.InfoWindow({
		   	content: contentString
		});
		google.maps.event.addListener(marker, 'click', function() {
			win.open(map, marker);
		});
	} else {
		var marker = new google.maps.Marker({
			position : location,
			title : item.storeName,
			// icon:"img/icon.png",
			map : map
		});
		markersArray.push(marker);
		
		var contentString = '<div style="color:black;text-align:center;">' +item.storeName+'<br />' +item.storeAddress+'</div>';
        
		var infowindow = new google.maps.InfoWindow({
		   	content: contentString
		});
		google.maps.event.addListener(marker, 'click', function() {
			// map.setZoom(15);
			// map.setCenter(marker.getPosition());
			infowindow.open(map, marker);
		});

		google.maps.event.addListener(marker, 'dblclick', function() {
			onStoreClick(item);
		});

	}
}

// Removes the overlays from the map, but keeps them in the array
function clearOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
  }
}

// Shows any overlays currently in the array
function showOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(map);
    }
  }
}

// Deletes all markers in the array by removing references to them
function deleteOverlays() {
  if (markersArray) {
    for (i in markersArray) {
      markersArray[i].setMap(null);
    }
    markersArray.length = 0;
  }
}

/*
function codeAddress() {
	var address = document.getElementById("address").value;
	if (geocoder) {
		geocoder.geocode( { 'address': address}, function(results, status) {
		if (status == google.maps.GeocoderStatus.OK) {
			map.setCenter(results[0].geometry.location);
			showAlert(results[0].geometry.location);
			var marker = new google.maps.Marker({
				map: map, 
				position: results[0].geometry.location
			});
		} else {
			showAlert("Geocode was not successful for the following reason: " + status);
		}
		});
	}
}
*/

//onSuccess Geolocation
function onGeoSuccess(position) {
	curPosition=position;
	doCommandFindStoreList(appConfig,user);
}

// onError Callback receives a PositionError object
function onGeoError(error) {
	onGeoSuccess(null);
}

var curPosition=null;//
function doCommandFindStoreList(appConfig,user){
	var senddata = {};
	senddata.sid = user.sid;
	senddata.companyId = appConfig.companyId;
	senddata.brandId = appConfig.brandId;
	if(curPosition!=null){
		senddata.latitude=curPosition.coords.latitude;
		senddata.longitude=curPosition.coords.longitude;
	}
	var require=$("#homepage #search").val().trim();
	if(require.length>0){
		senddata.require = require;
	}
	ajax(COMMAND_FIND_STORE_LIST,STORE_LIST_URL,senddata);
};

//map end
///////////////////////////////////////////////////////////////////////////////



使用cordova获取你当前的位置,成功的话执行onGeoSuccess,在该函数中查询门店位置信息:

if(navigator.geolocation){
var options = {
	enableHighAccuracy: true,
	maximumAge: 30000,
	timeout: 8000
};
					navigator.geolocation.getCurrentPosition(onGeoSuccess , onGeoError , options);
}else{//Geolocation is not supported by this browser.
	onGeoSuccess(null);
}


获取到所有经纬度信息之后再初始化map,并在map上添加marker:
case COMMAND_FIND_STORE_LIST:

		initializeMap(curPosition);

		$("#homepage #content_store_list").empty();
		$.each(data.listStroe,function(i,item){
			item.opening=isStoreOpen(item);
			var openStatus="<span style='font-size:12px;color:red;font-weight:normal;margin-left:10px;'>[OPEN]</span>";
			if(item.opening!=0){
				openStatus="<span style='font-size:12px;color:#666;font-weight:normal;margin-left:10px;'>"+getStoreOpenRemainingTime(item)+"</span>";
			}
			var distance="";
			if(curPosition!=null){
				if(item.latitude==null||item.longitude==null){
					
				}else{
					distance=GetDistance(item.latitude,item.longitude,curPosition.coords.latitude,curPosition.coords.longitude);//
				}
			}
			var display="inline";
			if(isNull(item.customerId)||item.customerId==0){
				display="none";
			}else{
				display="inline";
			}
			var itemStr=JSON.stringify(item);
			$("#homepage #content_store_list").append("<li class='li_item' onclick='onStoreClick("+itemStr+");'><div style='font-size:16px;font-weight:bold;margin-bottom:5px;'><span>"+item.storeName+"</span>"+openStatus+"<span style='float:right'><img style='display:"+display+"' src='img/my_favorite.png'/></span></div><div><span style='font-size:14px;'>"+item.storeAddress+"</span><div><span style='font-size:14px;'>"+item.city+","+item.provinceShrtNm+" "+item.zip+"</span><span style='font-size:14px;float:right;'>"+distance+"</span></div></div></li>");
			
			if(!isNull(map)){
				if(curPosition!=null){
					addMarker(map.getCenter(),MY_POSITION);
				}
	
				if(item.latitude!=null){
					var location = new google.maps.LatLng(item.latitude,item.longitude);
					addMarker(location,item);
				}
			}

		});

		break;


第一次地图显示的时候最好resize一下,使你的位置位于屏幕中心,refreshMap用于控制是否resizeMap,这样每次返回map_page的时候不至于总是resizeMap:
var refreshMap=true;
$(document).delegate('#map_page', 'pageshow', function () {
	curPage="map_page";
	if(refreshMap){
		refreshMap=false;		
		resizeMap();
	}
});


工具,计算2点间距离,返回的是mile英里数
function GetDistance(lat1,lng1,lat2,lng2){
   var radLat1 = Rad(lat1);
   var radLat2 = Rad(lat2);
   var a = radLat1 - radLat2;
   var  b = Rad(lng1) - Rad(lng2);
   var s = 2 * Math.asin(Math.sqrt(Math.pow(Math.sin(a/2),2) +
   Math.cos(radLat1)*Math.cos(radLat2)*Math.pow(Math.sin(b/2),2)));
   s = s *6378.137 ;// EARTH_RADIUS;
   s = 0.62*Math.round(s * 10000) / 10000;
   s=s.toFixed(0);
   return s+"mi";
}


最后显示的效果如下:



  • 大小: 152.7 KB
分享到:
评论

相关推荐

    google-map.rar_谷歌地图

    本教程将深入讲解如何使用谷歌地图API来实现地图标注。 首先,我们需要在Google Developers Console中创建一个新的项目,并启用“Google Maps JavaScript API”。这一步骤将为我们生成一个API密钥,它是连接我们...

    调用googleMap的一个小小应用

    4. **添加标记和信息窗口**:如果应用需要在地图上标注特定位置,可以使用`google.maps.Marker()`创建标记,并用`google.maps.InfoWindow()`显示相关信息。 5. **处理用户交互**:可以监听地图事件,如点击、拖动等...

    google地图在地图上标记点

    总结起来,使用Google Maps API在地图上标记点涉及创建Map实例、Marker对象,以及可能的InfoWindow对象。通过结合JavaScript编程和API提供的方法,可以实现交互式的地图应用,满足各种展示和交互需求。在实际开发...

    google地图标注

    总之,通过HTML和Google Maps API,我们可以轻松地在网页上展示地图并标注特定地点。这个过程涉及到HTML结构的构建、API的引入、JavaScript代码的编写以及与地图对象的交互。在压缩包中的“地图”文件可能包含了示例...

    GoogleMap 中文API + 示例

    在中文环境下,GoogleMap API同样提供了丰富的功能,便于中国用户在地图应用中使用中文标注和搜索。 **1. 获取API密钥** 使用GoogleMap中文API首先需要获取API密钥。开发者需要在Google Cloud Console中创建项目,...

    google map研究要点.doc

    信息窗口会自动添加到地图并与一个GInfoWindow对象关联。 通过以上知识点,开发者可以创建各种复杂的地图应用,如标注地点、绘制路径、显示区域信息等。Google Map API提供了丰富的功能和灵活性,使地图集成成为...

    地图接口调用示例

    地图接口调用是Web开发中常见的一种功能,用于在网页上展示地图并进行交互操作。在本示例中,我们将探讨如何通过调用地图接口来实现地图的展示、标注的添加以及鼠标悬停时的标注备注显示。我们将重点关注Google Maps...

    js GOOGLE API地图源码

    然后,创建一个div元素作为地图容器,并通过`google.maps.Map`对象初始化地图: ```javascript var map = new google.maps.Map(document.getElementById('map'), { center: {lat: -34.397, lng: 150.644}, zoom: 8...

    googlemap 编程实例

    要使用API,我们需要在Google Cloud Console中创建一个项目,启用Google Maps JavaScript API,并获取API密钥。 接着,我们来看看如何在网页中引入Google Maps API。这通常通过在HTML文件中添加以下脚本标签完成: ...

    google-Map-API.rar_javascript

    8. **信息窗口**:使用`new google.maps.InfoWindow()`创建信息窗口,可以展示标注点或地图上其他元素的详细信息。通过`infoWindow.open(map, marker)`来显示信息窗口。 9. **地图样式**:通过`styledMapType`可以...

    android地图的使用

    本文将详细讲解如何在Android应用中集成和使用地图,以实现地图的显示、定位、标注和路线规划等功能。 首先,我们要了解Android地图主要依赖于Google Maps Android API,它提供了丰富的地图功能,包括地图视图、...

    VS2008 WinForm类型的GoogleMap二次开发

    总之,VS2008 WinForm类型的Google Map二次开发涉及的关键技术有:使用WebBrowser控件加载和交互地图,通过JavaScript初始化地图,以及C#调用JavaScript代码添加文本标注。通过这些技术,开发者可以创建具有自定义...

    安卓开发-高德地图标注 路线规划.zip.zip

    高德地图API提供了多种方式实现标注,如Marker、InfoWindow等。创建一个Marker实例,设置其位置、图标和点击事件: ```java LatLng latLng = new LatLng(39.908, 116.407); // 坐标点 MarkerOptions markerOptions ...

    谷歌地图-iOS

    本项目是一个关于在iOS上使用谷歌地图的示例,涵盖了定位、地图上的标注(气泡)显示以及自定义气泡和点击事件处理,最终实现地图导航功能。 首先,要使用谷歌地图SDK,你需要在Google Developers Console注册并...

    Cordova 3.x 实用插件(1) -- Google地图Maps

    例如,通过`Marker`对象可以在地图上添加标注: ```javascript var marker = new google.maps.Marker({ position: myLatlng, map: map, title: 'Hello World!' }); ``` 信息窗口则可以通过`InfoWindow`对象来...

    jquery与google联合制作局部地图

    4. 初始化地图:使用Google Maps API的`new google.maps.Map()`方法创建地图对象,并设置地图的中心点、缩放级别等属性。 5. 添加标记:利用`new google.maps.Marker()`创建标记,并设置标记的位置和图标。 6. 添加...

    Google地图API教程

    以下是一个简单的示例,展示如何在网页上加载并显示一张地图。 ```html &lt;!DOCTYPE html&gt; ;charset=utf-8"/&gt; &lt;title&gt;Google Maps JavaScript API Example &lt;script src="http://ditu.google....

    Google地图小示例框架

    文件列表中的"googleMap"可能是示例代码的文件夹,其中可能包含HTML、CSS和JavaScript文件,展示了如何在实际项目中引用和使用Google Maps API。如果你有这些文件,通过查看和运行它们,你将能更好地理解如何将...

    谷歌地图api2015-8-04日web-js版

    - 标记与信息窗口:可以在地图上添加标记(Marker)表示特定地点,并为标记添加信息窗口(InfoWindow)显示详细信息。 - 路线规划:支持计算驾车、步行或公共交通路线,显示多步骤的导航指示。 - 地图覆盖物:...

Global site tag (gtag.js) - Google Analytics