谷歌地图地址而不是LatLng GeoCode

时间:2012-11-12 19:20:02

标签: javascript google-maps-api-3 asp-classic latitude-longitude

我花了几个小时看这个,但找不到我想要的解决方案。我知道我错过了一些东西,但可以提供一些帮助。

本质上我有一个经典的ASP页面,其中包含一个记录集保存地址。 我想将这些地址拉到页面中(带有重复区域)。完成那一点,并使用正确的信息获得Google期望的字符串。

<script>var map_locations = [{"lat":52.954145,"lng":-4.101083,"title":"Nice House in Wales","street":"Prenteg, Porthmadog, LL49 9SR","price":"55,500"}]</script>

但是,我想用以下内容替换“lat”等:

<script>var map_locations = [{"address":"<%=(rsLocations.Fields.Item("locPostCode").Value)%>","title":"Nice house in Wales","street":"Prenteg, Porthmadog, LL49 9SR","price":"55,500"}]</script>

以下是Google根据上述链接建议我做的事情。 Google GeoCoding

var geocoder;
var map;
function initialize() {
geocoder = new google.maps.Geocoder();
var latlng = new google.maps.LatLng(-34.397, 150.644);
var mapOptions = {
  zoom: 8,
  center: latlng,
  mapTypeId: google.maps.MapTypeId.ROADMAP
}
map = new google.maps.Map(document.getElementById("map_canvas"), 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
    });
  } else {
    alert("Geocode was not successful for the following reason: " + status);
  }
});
}

<body onload="initialize()">
<div id="map_canvas" style="width: 320px; height: 480px;"></div>
<div>
<input id="address" type="textbox" value="Sydney, NSW">
<input type="button" value="Encode" onclick="codeAddress()">
</div>
</body>

现在,Google的文档使用输入变量“address”,因此您可以使用以下内容:

var address = document.getElementById("address").value;

我的问题是,如何将记录集绑定作为地址? ASP和JS文件混合不好,不确定如何将其放入地址以使地理编码正常工作。

我的JS文件(global.js)包含以下内容,如果我通过Lat / Lngs发送它,它提供了很好的样式标记和信息框供用户进行交互。

处理撰写Google Map内容的JS文件

var map;
function initializePropertiesMap() {
if($('#map_canvas').length == 0)
    return;
var myLatlng = new google.maps.LatLng(52.954145,-4.101083);
var myOptions = {
    zoom: 8,
    center: myLatlng,
    mapTypeId: google.maps.MapTypeId.ROADMAP
}
var infowindow = new google.maps.InfoWindow();
var map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
$.each(map_locations, function(key, value) { 
    var marker = new google.maps.Marker({
        position: new google.maps.LatLng(value['lat'], value['lng']),
        map: map,
        icon: 'css/images/marker.png',
        scrollwheel: false,
        streetViewControl:true,
        title: value['title']
    });

    var link = "link";
    google.maps.event.addListener( marker, 'click', function() {
        // Setting the content of the InfoWindow
        var content = '<div id="info" class="span5"><div class="row">' + '<div     class="span2"><img src="css/images/houses/house_'+(key+1)+'.jpg" class="thumbnail" style="width:135px"/></div>' + '<div class="span3"><h3>' + value['title'] + '</h3><h6>' + value['street'] + '</h6>' + '<strong>&pound;' + value['price'] + '</strong>' + '<p><a href="listing-detail.asp">Read More >></a></p>' + '</div></div></div>';
        infowindow.setContent(content );
        infowindow.open(map, marker);
    });

});


}

调整了这个,我无法让它工作,并想知道是否有人对我有任何建议?

由于 尼克

更新

想到我提到我试过这个:

var address = <%=rsLocations.Fields.Item("locPostcode").value%>;

这显然不会起到JS文件错误的作用。

1 个答案:

答案 0 :(得分:-2)

关于从XML对地址进行地理编码的类似问题answer可能有所帮助。

  

您遇到地理编码器的异步性质问题,如果添加许多地址,您将遇到地理编码器配额/速率限制的问题(特别是因为您的代码没有查看地理编码器的返回状态)

     

最简单的解决方案是使用函数闭包将对地理编码器的调用与返回的结果

相关联

如果您拥有积分的纬度和经度,请将其存储在数据库中并使用它来显示积分。虽然您可以使用(异步)地理编码器在页面加载时对地址进行地理编码,但如果您有大约10个地址,则会遇到地理编码器配额/速率限制。 This article on geocoding strategies可能有助于实现这一目标。