2013-03-06 90 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!