0

今天我在谷歌地图问题上得到了很大的帮助,当我处理我的代码时,会弹出更多的东西。所以这是我希望得到帮助的另一个问题。

有2个部分

1)我已经调整了我的代码以在同一页面上显示 2 x 谷歌地图。我的谷歌地图是这样工作的

用户搜索地址,结果是

  • 地图显示位置图钉
  • 长和纬度字段用坐标填充
  • 为办公室名称调用的输入字段填充有搜索查询。

当我有 1 张地图时,这一切都有效。但是当我在下面的代码中添加 map2 时,我不确定如何编写代码来拆分 map 和 map2 之间的结果

我的代码尝试如下(头)

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">

<html xmlns="http://www.w3.org/1999/xhtml" xmlns:v="urn:schemas-microsoft-com:vml">
<head>
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<script type="text/javascript"
      src="http://maps.googleapis.com/maps/api/js?sensor=true">
    </script>
<script type="text/javascript">

var geocoder;
var map,map2;

function initialize(condition) {
    geocoder = new google.maps.Geocoder();
    var latlng = new google.maps.LatLng(53.2948557, -6.139267399999994);
    var mapOptions = {
      zoom: 10,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    }
    map = new google.maps.Map(document.getElementById('map_canvas'), mapOptions);

    map2 = new google.maps.Map(document.getElementById('map_canvas2'), mapOptions);  
 }

function codeAddress() {
    var address = document.getElementById('address').value;
    geocoder.geocode( { 'address': address}, function(results, status) {
      if (status == google.maps.GeocoderStatus.OK) {
        map.setCenter(results[0].geometry.location);
        var marker = new google.maps.Marker({
            map: map,
            position: results[0].geometry.location
        });
        document.getElementById("input_15_169").value = marker.getPosition().lat();
        document.getElementById("input_15_167").value = marker.getPosition().lng();
        document.getElementById("input_15_92").value = address;

      } else {
        alert('Geocode was not successful for the following reason: ' + status);
      }
    });
  }

</script>

我的身体看起来像这样

<body onload="initialize()" onunload="GUnload()">
  <p>To Add your Google Map you must first plot your address by searching</p>
  <p>
    <input id="address" type="textbox" value="" placeholder="Search For Your Address">
    <input type="button" value="Plot Your Address" onclick="codeAddress()">
  </p>

  <div id="latlong">
      <p>Office Name: <input size="20" type="text" id="input_15_92" name="ofn" ></p>
      <p>Latitude: <input size="20" type="text" id="input_15_169" name="lat" ></p>
      <p>Longitude: <input size="20" type="text" id="input_15_167" name="lng" ></p>
    </div>

  <div id="map_canvas" style="width: 600px; height: 400px"></div>

  <p>To Add your Google Map you must first plot your address by searching</p>
  <p>
    <input id="address2" type="textbox" value="" placeholder="Search For Your Address">
    <input type="button" value="Plot Your Address" onclick="codeAddress()">
  </p>

  <div id="latlong">
      <p>Office Name: <input size="20" type="text" id="input_16_92" name="ofn" ></p>
      <p>Latitude: <input size="20" type="text" id="input_16_169" name="lat" ></p>
      <p>Longitude: <input size="20" type="text" id="input_16_167" name="lng" ></p>
    </div>

  <div id="map_canvas2" style="width: 600px; height: 400px"></div>

</body>
</html>

我知道在上面我当前的 javascript 中我缺少填充第二张地图的字段的代码,它应该看起来像这样,但我不确定将它们放在哪里

document.getElementById("input_16_169").value = marker.getPosition().lat();
document.getElementById("input_16_167").value = marker.getPosition().lng();
document.getElementById("input_16_92").value = address;

////

2)第二个问题与缩放有关。我看到我可以zoom: 10,在代码的开头设置我的缩放级别,它给出了地图的缩放级别。我想知道是否可以在找到结果时进行不同的缩放,即在用户搜索之后,因为我希望放大一点!

提前致谢

4

1 回答 1

1

我会建议一个不同的标记。

将输入和映射包装成一个表单,如下所示:

  <form style="width:220px;float:left;">
      <input name="address" value="" placeholder="Search For Your Address"/>
      <input type="button" value="Plot Your Address" onclick="codeAddress(this.form)"/>
      <input size="20" type="text"  name="ofn" />
      <input size="20" type="text" name="lat" />
      <input size="20" type="text"  name="lng" />
      <div class="map_canvas" style="width: 200px; height: 200px"></div>
  </form>

好处:

您现在将能够动态加载地图,而无需知道地图的数量。您可以使用 轻松选择它们document.querySelectorAll('form>.map_canvas');,生成的 nodeList 可用于在循环中创建地图:

    var maps=document.querySelectorAll('form>.map_canvas');
    for(var i=0;i<maps.length;++i)
    {
        maps[i].parentNode.map=new google.maps.Map(maps[i], mapOptions);
    }

注意:地图将存储为表单的属性,而不是创建全局地图变量,因此您可以稍后通过使用访问地图formElement.map

还要注意 的调用codeAddress(),它现在有一个参数this.form,它指的是单击的按钮所属的表单。

通过使用此参数,您可以访问所需表单内的输入和映射:

功能代码地址(表格){

var address=form.address.value
geocoder.geocode( { 'address': address}, function(results, status) {
  if (status == google.maps.GeocoderStatus.OK) {

    form.map.setCenter(results[0].geometry.location);
    var marker = new google.maps.Marker({
        map: form.map,
        position: results[0].geometry.location
    });
    form.map.setZoom(18);
    form.lat.value = marker.getPosition().lat();
    form.lng.value = marker.getPosition().lng();
    form.ofn.value = address;

  } else {
    alert('Geocode was not successful for the following reason: ' + status);
  }
});

}

可以使用地图的 setZoom 方法设置缩放(它已经在我的建议中实现)

演示:http: //jsfiddle.net/doktormolle/Tpgdd/

于 2012-10-20T01:26:59.573 回答