Sim … bom pelo que entendi você quer fazer uma Geolocalização de Multiplos marcadores no mapa com os Estabelecimentos de uma determinada região. Isso é tramquilo. Visto que os endereços já estaram na sua base de dados, existe duas formas: uma você passa os enderecos para o google geolocalizar e outra você manda a latitude e longitude, isso vai depender doque você preferir. (tambem pode enviar o endereco e obter a latitude e longitude ou vice versa)
Vou lhe mandar um exemplo (Neste exemplo eu mando localizar endereco, por enderecos dado um lista, que irá montar um mapa com todos os pontos):
OBS : É nescessário a biblioteca MarkerClusterer.js
<script type="text/javascript" src="http://maps.google.com/maps/api/js?key=<%=conf.Propriedades.get("pct.key.google")%>&sensor=false"></script>
<script type="text/javascript" src="/js/markerclusterer.js"></script>
<script type="text/javascript">
var geocoder = null;
function inicializarMapaGeral(){
var myOptions = {
zoom: 14,
mapTypeId: google.maps.MapTypeId.ROADMAP
};
//DIV onde o mapa será carregado
var map = new google.maps.Map(document.getElementById("mapa"), myOptions);
var clusterOptions = { zoomOnClick: false , gridSize: 50, maxZoom: 15}
var markerClusterer = new MarkerClusterer(map, [], clusterOptions);
adicionarInfoWindowCluster(map, markerClusterer);
geocoder = new google.maps.Geocoder();
if ( geocoder ) {
var toEnderecosLocaliza = new Array();
for (var i = 0; i<toEnderecosLocaliza.length; i++) {
localizarEndereco(toEnderecosLocaliza[i]);
}
}else{
alert("GeoCoder não identificado");
}
}
function localizarEndereco(enderecoLocaliza) {
geocoder.geocode( { 'address': enderecoLocaliza}, function(results, status) {
if (status == google.maps.GeocoderStatus.OK) {
map.setCenter(results[0].geometry.location);
var html= '<div style="border-bottom: 1px dotted #CCCCCC; margin-right:10px;"><b style="color: #0D7040">'+nome+'</b><br/><br/><b style="color: #E55300">'+especialidade+'</b><br/><br/>'+enderecoApresenta.replace("-","<br/>")+'<br/>'+telefone+'<br/><br/></div>';
var marker = new google.maps.Marker({
map: map,
animation: google.maps.Animation.DROP,
icon: icon,
position: results[0].geometry.location,
html: html
});
var infowindow = new google.maps.InfoWindow({
content: html
});
google.maps.event.addListener(marker, 'click', function() {
infowindow.open(map,marker);
});
markerClusterer.addMarker(marker, true);
} else if (status === google.maps.GeocoderStatus.OVER_QUERY_LIMIT) {
setTimeout(function() {
localizarEndereco(enderecoLocaliza;
}, 1);
} else {
alert("Geocode was not successful for the following reason: "+status);
}
});
}
function adicionarInfoWindowCluster(map, markerClusterer){
google.maps.event.addListener(markerClusterer, 'clusterclick', function(cluster) {
var text;
text = '<html>'
for(var i=0; i<cluster.markers_.length; i++){
text += cluster.markers_[i].html + '<br/><br/>';
}
text+='<html/>';
var info = new google.maps.MVCObject;
info.set('position', cluster.center_);
var infowindow = new google.maps.InfoWindow();
infowindow.close();
infowindow.setContent(text);
infowindow.open(map, info);
});
}
function getLocalizacaoInicial(toCidade, geocoder, map){
geocoder.geocode( {'address': toCidade}, function(results, status) {
if(status == ''){
setTimeout(getLocalizacaoInicial(toCidade, geocoder, map),1);
}else{
map.setCenter(results[0].geometry.location);
}
});
}
</script>
Espero que ajude qualquer coisa estamos ai.