2013-03-06 88 views
2

我有以下的頁面,它通過默認打開集中在法國地圖:谷歌地圖自動縮放

http://www.villasdirect.com/_admin/dev/Country_MapV3.asp

它似乎自動縮放到一定程度,但是當我看到法國或德國(只是幾個例子),這些國家並沒有足夠接近。但是,如果我搜索倫敦,它看起來非常完美 - 就像在倫敦地圖中填充框一樣。

你可以看到不同的結果在這裏:

http://www.villasdirect.com/_admin/dev/Country_MapV3.asp?l=france

什麼,我的目標是什麼是填充的地圖,當選擇......可能是國家,城市或區域,?

幫助一如既往的讚賞!

這裏是我的代碼太:

<%@LANGUAGE="VBSCRIPT" CODEPAGE="65001"%> 
<% 
location = request.QueryString("l") 
if location = "" then location = "France" 
%> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1- strict.dtd"> 
<html> 
    <head> 
    <meta http-equiv="content-type" content="text/html; charset=UTF-8"/> 
<title>Google Maps</title> 
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.8.2/jquery.min.js"></script> 
<script src="http://maps.google.com/maps/api/js?sensor=false" 
     type="text/javascript"></script> 

<div id="map" style="width: 800px; height: 600px"></div> 

<form onsubmit="showAddress(); return false" action="#"> 
    <input id="search" size="60" type="hidden" value="<%=location%>" /> 
</form> 

<div id="message"></div> 

<noscript><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
    However, it seems JavaScript is either disabled or not supported by your browser. 
    To view Google Maps, enable JavaScript by changing your browser options, and then 
    try again. 
</noscript> 

<script type="text/javascript"> 
//<![CDATA[ 


var xmlsource = '<markers><marker Town="Fayence" Region="Provence - Var" type="green" lng="6.694103" lat="43.624076"/><marker Town="La Cadiere d\'Azur" Region="Provence - Var" type="green" lng="5.755173" lat="43.196218"/><marker Town="Villefranche Du Périgord" Region="South West France" type="green" lng="1.080006" lat="44.62966"/><marker Town="Limetz-Villez" Region="Paris" type="green" lng="1.547366" lat="49.029137"/><marker Town="Boulogne-Billancourt" Region="Paris" type="green" lng="2.237803" lat="48.84325"/><marker Town="Saint-Germain-En-Laye" Region="Paris" type="green" lng="2.0934031" lat="48.8955155"/></markers>' 

var myOptions = { 
    zoom: 4, 
    mapTypeId: google.maps.MapTypeId.ROADMAP 
    }; 
    var map = new google.maps.Map(document.getElementById("map"), myOptions); 

    var infoWindow = new google.maps.InfoWindow; 
    $($.parseXML(xmlsource)).find("marker").each(function() { 
    var lng = $(this).attr('lng'); 
    var lat = $(this).attr('lat'); 
    marker = new google.maps.Marker({ 
     map:map, 
     draggable:true, 
     animation: google.maps.Animation.DROP, 
     position: new google.maps.LatLng(59.32522, 18.07002) 
    }); 
    }); 
    google.maps.event.addListener(marker, 'click'); 

    // ====== Create a Client Geocoder ====== 
    var geo = new google.maps.Geocoder(); 
    geo.geocode({'address': document.getElementById("search").value}, function (results, status) { 
    var ne = results[0].geometry.viewport.getNorthEast(); 
    var sw = results[0].geometry.viewport.getSouthWest(); 

    map.fitBounds(results[0].geometry.viewport); 
    placeMarkers();    
    }); 

    function placeMarkers(){ 
    var xmlList = $.parseXML(xmlsource); 
    var markers = $(xmlList).find('marker'); 
    for (var i = 0; i < markers.length; i++) { 
    var latlng = new google.maps.LatLng(parseFloat($(markers[i]).attr("lat")), 
           parseFloat($(markers[i]).attr("lng"))); 
    var type = $(markers[i]).attr("type"); 
    var imgnam = ""; 
    if(type == "green") { 
     imgnam = "http://openmbta.org/images/map/PinDown1Green.png?1306943843"; 
    }else{ 
     imgnam = "http://openmbta.org/images/map/PinDown1.png?1306943843"; 
    }  
    var img = new google.maps.MarkerImage(
     imgnam, 
     new google.maps.Size(30,35), 
     new google.maps.Point(0,0), 
     new google.maps.Point(15,35) 
    ); 
    //add a link to your xml that can be inserted here where I have http://www.google.com 
    var html = "<a href='http://www.google.com'>" + $(markers[i]).attr('Region') + ', ' + $(markers[i]).attr('Town') + "</a>";         
    var marker = new google.maps.Marker({position: latlng, map: map, icon: img, html:html}); 

    var infowindow1 = new google.maps.InfoWindow(); 
    google.maps.event.addListener(marker, 'mouseover', function() { 
     infowindow1.setContent(this.html); 
     infowindow1.open(map, this); 

    }); 
    } 

    } 

</script> 
</body> 

</html> 

回答

0

AFAIK沒有得到信息,用於區域的物理尺寸(是的方式,市/縣/國家)從谷歌。

如果你有一個數據庫你自己的每個城市/州/國家組合的大小,那麼我想你可以通過比較來做到這一點。

否則,你幾乎堅持這一個。

1

這是一個老問題,但我想我有一個答案。取而代之的是:

map.fitBounds(results[0].geometry.viewport); 

試試這個:

map.fitBounds(results[0].geometry.bounds); 

根據谷歌地圖API documentationresults.geometry.bounds可能會返回一個稍微不同的視口。這不完全是一個解決方案,但它是值得一試。

此外,據我所知,谷歌地圖沒有圖像在無限放大水平,當調用fitBounds(),它會自動選擇包含指定的界限在其可用圖像的最高縮放級別。在你的情況下,邊界是法國的邊界,並且視口符合當前縮放級別的法國邊界。如果您進一步只放大一個縮放級別,則法國的邊界將從視口中移出。

您可以更改視口的大小。對於一定大小的視口(我不能確切地說大小),你可能會達到完美的結合。你引用了倫敦的一個例子。我相信,對於某些視口尺寸,倫敦也不完全適合視口。所以,偶然你碰到一個對倫敦來說完美的視口尺寸。

如果您還想要更多縮放,並且無法更改視口大小,建議您嘗試getZoom(),然後將結果增加1和setZoom()。然後,再次將邊框區域渲染出視口。

Cheerio!