Javascript 放大谷歌地图标记
我正在使用GoogleMapsAPI来显示一个帐户位置,并且有一个函数可以显示附近的帐户位置。问题是我希望在调用getNearbyAccounts函数时放大显示标记。在当前缩放级别,您无法看到所有标记。它看起来就像一堆乱七八糟的标记 这是我的页面代码:Javascript 放大谷歌地图标记,javascript,jquery,google-maps-api-3,Javascript,Jquery,Google Maps Api 3,我正在使用GoogleMapsAPI来显示一个帐户位置,并且有一个函数可以显示附近的帐户位置。问题是我希望在调用getNearbyAccounts函数时放大显示标记。在当前缩放级别,您无法看到所有标记。它看起来就像一堆乱七八糟的标记 这是我的页面代码: <apex:page standardController="Account" extensions="AccountMapControllerExtension" doctype="html-5.0" > <apex:sect
<apex:page standardController="Account" extensions="AccountMapControllerExtension" doctype="html-5.0" >
<apex:sectionHeader title="Account Mapping Tool"/>
<title>Account Map</title>
<head>
<!-- STYLE SHEETS -->
<apex:stylesheet value="{!URLFOR ($Resource.jQueryUI, '/css/ui-lightness/jquery-ui-1.9.0.custom.css')}" />
</head>
<style>
.urlLinks {
color: blue;
text-decoration:underline
}
#map {
font-family: Arial;
font-size:12px;
line-height:normal !important;
height:400px;
padding: 20px;
}
.roundCornerCss{
/* outer shadows (note the rgba is red, green, blue, alpha) */
-webkit-box-shadow: 0px 0px 12px rgba(0, 0, 0, 0.4);
-moz-box-shadow: 0px 1px 6px rgba(23, 69, 88, .5);
/* rounded corners */
-webkit-border-radius: 12px;
-moz-border-radius: 7px;
border-radius: 7px;
/* gradients */
background: -webkit-gradient(linear, left top, left bottom,
color-stop(0%, white), color-stop(15%, white), color-stop(100%, #D7E9F5));
background: -moz-linear-gradient(top, white 0%, white 55%, #D5E4F3 130%);
}
#loadingScreen {
background: url({!URLFOR($Resource.Markers, 'Markers/ajax-loader.gif')}) no-repeat 5px 8px;
padding-left: 50px;
}
/* hide the close x on the loading screen */
.loadingScreenWindow .ui-dialog-titlebar-close {
display: none;
}
</style>
<body>
<apex:includeScript value="{!URLFOR($Resource.jQueryUI, '/js/jquery-1.8.2.min.js')}"/>
<apex:includeScript value="{!URLFOR($Resource.jQueryUI, '/js/jquery-1.8.2.js')}"/>
<apex:includeScript value="{!URLFOR($Resource.jQueryUI, '/js/jquery-ui-1.9.0.custom.js')}"/>
<script type="text/javascript"
src="https://maps.google.com/maps/api/js?sensor=false">
</script>
<script type="text/javascript">
// Global Variables
var geocoder;
var map;
var infowindow = new google.maps.InfoWindow();
var places = [];
var title_content = new Array();
var popup_content = new Array();
var address = new Array();
var address_position = 0;
var timeout = 600;
var pendingCalls = {};
var markersArray = [];
$j = $.noConflict(); // No Conflict Custom $j
// Initialize
$j(document).ready(function(){
var acctId = document.getElementById("hdnAccountId").value;
if(acctId == "") {
$j("#inputDiv").css("display","none");
}
regDialogs();
});
// Load Google Map
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(42.3583, -71.0603); // Boston, MA as Center
var myOptions = {
zoom: 3,
center: latlng,
mapTypeId: 'roadmap'
}
map = new google.maps.Map(document.getElementById("map"), myOptions);
}
function regDialogs(){
$j( "#pendDiv" ).dialog({
autoOpen: false,
title: 'Pending Call Reports'
});
$j("#loadingScreen").dialog({
autoOpen: false, // set this to false so we can manually open it
dialogClass: "loadingScreenWindow",
closeOnEscape: false,
draggable: false,
width: 460,
minHeight: 50,
modal: true,
buttons: {},
resizable: false,
open: function() {
// scrollbar fix for IE
$j('body').css('overflow','hidden');
},
close: function() {
// reset overflow
$j('body').css('overflow','auto');
}
}); // end of dialog
}
// Waiting Dialog on Loading
function waitingDialog() {
$j("#loadingScreen").html('<p>Please Wait ...</p>');
$j("#loadingScreen").dialog('option', 'title', 'Loading');
$j("#loadingScreen").dialog('open');
}
// Close Waiting Dialog
function closeWaitingDialog() {
$j("#loadingScreen").dialog('close');
}
function getCurrentAccountMap() {
var billingStreet = '{!account.BillingStreet}';
var billingCity = '{!account.BillingCity}';
var billingState = '{!account.BillingState}';
var billingCountry = '{!account.BillingCountry}';
var billingPostalCode = '{!account.BillingPostalCode}';
address_position = 0;
$j("#messages").empty();
clearOverlay(); // Remove existing markers if any
var addr = billingStreet + ',' + billingCity + ',' +
billingState + ',' + billingCountry + ',' +
billingPostalCode;
address.push(addr);
addMarker(address_position);
}
function getAccountsNearbyMap(){
waitingDialog(); // Start Loading
var lat = '{!account.Geolocation__Latitude__s}';
var lng = '{!account.Geolocation__Longitude__s}';
var distance = '';
lat = parseFloat(lat);
lng = parseFloat(lng);
if($j("select option:selected").text() == 'within 10 miles'){
distance = $j("select option:selected").val()
}
if($j("select option:selected").text() == 'within 25 miles'){
distance = $j("select option:selected").val()
}
if($j("select option:selected").text() == 'within 50 miles'){
distance = $j("select option:selected").val()
}
if($j("select option:selected").text() == 'within 100 miles'){
distance = $j("select option:selected").val()
}
if($j("select option:selected").text() == 'within 250 miles'){
distance = $j("select option:selected").val()
}
if($j("select option:selected").text() == 'within 500 miles'){
distance = $j("select option:selected").val()
}
AccountMapControllerExtension.getNearbyAccounts(lat,lng,distance,function(result,event){
$j("#messages").empty();
clearOverlay(); // Remove existing markers if any
if(event.type == 'exception'){
alert('Error ' + event.message);
}else {
address = new Array();
address_position = 0;
var completeDate = '';
var pendClick = '';
var hasCallRecords = false;
$j.each(result,function(rec){
var addr = result[rec].BillingStreet + ',' + result[rec].BillingCity + ',' +
result[rec].BillingState + ',' + result[rec].BillingCountry + ',' +
result[rec].BillingPostalCode;
address.push(addr);
});
if(address.length > 1){
addMarker(address_position);
}else{
addMarker(address_position);
$j("#messages").append('<h3 style="color:red;">There are no nearby accounts found within the range specified</h3><br/>');
closeWaitingDialog();
return false;
}
}
});
}
function addMarker(position){
geocoder.geocode({'address': address[position]}, function(results, status){
if (status == google.maps.GeocoderStatus.OK) {
places[position] = results[0].geometry.location;
var marker = new google.maps.Marker({
position: places[position],
title:title_content[position],
icon: getMapIconUrl(position),
map: map
});
map.setCenter(marker.getPosition());
map.setZoom(map.getZoom()+2);
markersArray.push(marker);
google.maps.event.addListener(marker, 'click', function() {
if (!infowindow) {
infowindow = new google.maps.InfoWindow({maxWidth: 200});
}
infowindow.setContent(popup_content[position]);
infowindow.open(map, marker);
});
}
else{
if (status == google.maps.GeocoderStatus.OVER_QUERY_LIMIT){
setTimeout(function() { addMarker(position); }, (timeout * 3));
}
}
address_position++;
if (address_position < address.length){
setTimeout(function() { addMarker(address_position); }, (timeout));
}
closeWaitingDialog();
});
}
function clearOverlay(){
for (var i = 0; i < markersArray.length; i++ ) {
markersArray[i].setMap(null);
}
}
/*
Sets the Marker Type/Color
*/
function getMapIconUrl(markerNumber){
var mapIconUrl = "{!URLFOR($Resource.Markers, 'Markers/PinkPin.png')}";
return mapIconUrl;
}
window.onload = function() {
getCurrentAccountMap();
};
</script>
<!-- HTML Content -->
<input type="hidden" value="{!account.Id}" id="hdnAccountId" />
<div id="inputDiv">
Search Nearby Accounts
<select id="selectOption">
<option value="10">within 10 miles</option>
<option value="25">within 25 miles</option>
<option value="50">within 50 miles</option>
<option value="100">within 100 miles</option>
<option value="250">within 250 miles</option>
<option value="500">within 500 miles</option>
</select><br/>
<div id="rangeDiv"></div><br/>
<input type="button" onclick="getAccountsNearbyMap();" class="btn" value="Get Accounts Nearby"/>
</div><br/><br/>
<div id="messages"></div><br/>
<div id="map" class="roundCornerCss"></div>
<script>
initialize();
</script>
<div id="canvas_div"></div>
<div id="pendDiv"></div>
<div id="loadingScreen"></div>
</body>
</apex:page>
帐户地图
.urlLinks{
颜色:蓝色;
文本装饰:下划线
}
#地图{
字体系列:Arial;
字体大小:12px;
线高:正常!重要;
高度:400px;
填充:20px;
}
.css{
/*外部阴影(注意rgba为红色、绿色、蓝色和alpha)*/
-webkit盒阴影:0px 0px 12px rgba(0,0,0,0.4);
-moz盒阴影:0px 1px 6px rgba(23,69,88,5);
/*圆角*/
-webkit边界半径:12px;
-moz边界半径:7px;
边界半径:7px;
/*梯度*/
背景:-webkit渐变(线性、左上、左下、,
颜色停止(0%,白色),颜色停止(15%,白色),颜色停止(100%,#D7E9F5));
背景:-莫兹线性梯度(顶部,白色0%,白色55%,#D5E4F3 130%);
}
#加载屏幕{
背景:url({!URLFOR($Resource.Markers,'Markers/ajax loader.gif'))不重复5px 8px;
左侧填充:50px;
}
/*在加载屏幕上隐藏关闭x*/
.loadingScreenWindow.ui对话框标题栏关闭{
显示:无;
}
//全局变量
var地理编码器;
var映射;
var infowindow=new google.maps.infowindow();
var位置=[];
var title_content=新数组();
var popup_content=新数组();
var address=新数组();
变量地址\位置=0;
var超时=600;
var pendingCalls={};
var-markersArray=[];
$j=$.noConflict();//无冲突自定义$j
//初始化
$j(文档).ready(函数(){
var acctId=document.getElementById(“hdnAccountId”).value;
如果(acctId==“”){
$j(“#inputDiv”).css(“显示”、“无”);
}
regDialogs();
});
//加载谷歌地图
函数初始化(){
geocoder=新的google.maps.geocoder();
var latlng=new google.maps.latlng(42.3583,-71.0603);//以马萨诸塞州波士顿为中心
变量myOptions={
缩放:3,
中心:拉特林,
mapTypeId:“路线图”
}
map=新的google.maps.map(document.getElementById(“map”),myOptions);
}
函数regDialogs(){
$j(“#pendDiv”)。对话框({
自动打开:错误,
标题:“挂起的呼叫报告”
});
$j(“加载屏幕”)。对话框({
autoOpen:false,//将其设置为false,以便手动打开它
dialogClass:“loadingScreenWindow”,
closeOnEscape:错误,
可拖动:错误,
宽度:460,
身高:50,
莫代尔:是的,
按钮:{},
可调整大小:false,
打开:函数(){
//IE的滚动条修复
$j('body').css('overflow','hidden');
},
关闭:函数(){
//重置溢出
$j('body').css('overflow','auto');
}
});//对话框结束
}
//加载时的等待对话框
函数waitingDialog(){
$j(“#加载屏幕”).html(“请稍候…””;
$j(“加载屏幕”)。对话框(“选项”、“标题”、“加载”);
$j(“加载屏幕”)。对话框(“打开”);
}
//关闭等待对话框
函数closeWaitingDialog(){
$j(“加载屏幕”)。对话框(“关闭”);
}
函数getCurrentAccountMap(){
var billingStreet='{!account.billingStreet}';
var billingCity='{!account.billingCity}';
var billingState='{!account.billingState}';
var billingCountry='{!account.billingCountry}';
var billingPostalCode='{!account.billingPostalCode}';
地址\位置=0;
$j(“#消息”).empty();
clearOverlay();//删除现有标记(如果有)
var addr=billingStreet+','+billingCity+','+
billingState+'、'+billingCountry+'、'+
billingPostalCode;
地址推送(addr);
addMarker(地址\位置);
}
函数getAccountsNearbyMap(){
waitingDialog();//开始加载
var lat='{!account.Geolocation_______s}';
var lng='{!account.Geolocation__Longitude__s}';
var距离='';
lat=浮动(lat);
lng=浮球(lng);
如果($j(“选择选项:已选定”).text()=“10英里以内”){
距离=$j(“选择选项:选定”).val()
}
如果($j(“选择选项:已选定”).text()=“25英里以内”){
距离=$j(“选择选项:选定”).val()
}
如果($j(“选择选项:已选定”).text()=“50英里以内”){
距离=$j(“选择选项:选定”).val()
}
如果($j(“选择选项:已选定”).text()=“100英里以内”){
距离=$j(“选择选项:选定”).val()
}
如果($j(“选择选项:已选定”).text()=“250英里以内”){
距离=$j(“选择选项:选定”).val()
}
如果($j(“选择选项:已选定”).text()=“500英里以内”){
距离=$j(“选择选项:选定”).val()
}
AccountMapControllerExtension.getNearbyAccounts(lat、lng、距离、函数(结果、事件){
$j(“#消息”).empty();
clearOverlay();//删除现有标记(如果有)
如果(event.type=='exception'){
警报(“错误”+事件消息);
}否则{
地址=新数组();
地址\位置=0;
变量completeDate='';
var pendClick='';
var hasCallRecords=false;
$j.每个(结果、功能(rec){
var addr=result[rec].BillingStreet+','+result[rec].BillingCity+','+
结果[rec].BillingState+','+结果[rec].BillingCountry+','+
结果[rec]。BillingPostalC
map.setZoom(map.getZoom()+2)