2

次のページがあります。デフォルトでは、フランスを中心としたマップが開きます。

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

ある程度自動ズームするように見えますが、フランスやドイツ (ほんの 2、3 例) を見ると、国が十分に拡大されていません。しかし、ロンドンを検索すると、ボックスにロンドンの地図を入れるのと同じように、ほぼ完璧に見えます。

ここでさまざまな結果を確認できます。

http://www.villasdirect.com/_admin/dev/Country_MapV3.asp?l=フランス

私が目指しているのは、選択されたときに国、町、または地域で地図を埋めることです...可能ですか?

いつものように助けてください!

これも私のコードです:

<%@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> 
4

2 に答える 2

1

古い質問ですが、答えがあると思います。これの代わりに:

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

これを試して:

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

Google Maps APIドキュメント によるとresults.geometry.bounds、わずかに異なるビューポートが返される場合があります。正確な解決策ではありませんが、試してみる価値はあります。

さらに、私が理解しているように、Google マップには無限のズーム レベルの画像がなく、呼び出されると、指定された境界含み、画像が利用可能なfitBounds()最高のズーム レベルが自動的に選択されます。あなたの場合、境界はフランスの国境であり、ビューポートは現在のズーム レベルでフランスの国境に適合します。さらにズーム レベルを 1 つ上げると、フランスの境界線がビューポートからはみ出してしまいます。

ビューポートのサイズを変更できます。ビューポートの特定のサイズ (正確なサイズはわかりません) では、完璧にフィットする可能性があります。あなたはロンドンの例を挙げました。特定のビューポート サイズでは、ロンドンもビューポートに完全に適合しないと確信しています。ですから、ロンドンにぴったりのビューポート サイズを見つけたのは偶然です。

さらにズームが必要で、ビューポートのサイズを変更できない場合getZoom()は、結果を 1 とsetZoom(). 次に、境界領域がビューポートの外にレンダリングされます。

チェリオ!

于 2013-08-08T00:56:18.353 に答える
0

Afaik は、Google からエリア (都市/郡/国) の物理的な寸法に関する情報を取得する方法はありません。

すべての都市/州/国の組み合わせのサイズを含むデータベースを自分で持っている場合は、比較してそれを行うことができると思います。

そうでなければ、あなたはこれでほとんど立ち往生しています。

于 2013-03-06T11:26:06.613 に答える