1
<!DOCTYPE html>
<head>
    <title>Federation of Master Landscapers</title>
    <link href="style.css" rel="stylesheet" type="text/css" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
    <script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&key=AIzaSyD0X4v7eqMFcWCR-VZAJwEMfb47id9IZao">
    </script>
    <script type="text/javascript">
    var map;
    $(document).ready(function () {

            //draw a map centered at Empire State Building Newyork
            var latlng = new google.maps.LatLng(40.748492, -73.985496);
            var myOptions = {
                zoom: 15,
                center: latlng,
                mapTypeId: google.maps.MapTypeId.ROADMAP
            };
            map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);

            $("#btnSearch").click(function(){
                //Convert Address Into LatLng and Retrieve Address Near by
                convertAddressToLatLng($("#txtAddress").val());
            });
    });               

    function convertAddressToLatLng(address){
        var geocoder = new google.maps.Geocoder();

        geocoder.geocode({ 'address': address }, function (results, status) {
            if (status == google.maps.GeocoderStatus.OK) {
                //Empty div before re-populating
                $("#divStores").html('');
                searchStores(results[0].geometry.location);
            } else {
                $("#divStores").html(getEmbedHTML('No Stores Found','',''));
            }
        });
    }

    function searchStores(location){
        var latlng = new google.maps.LatLng(location.lat(),location.lng());
        var myOptions = {
            zoom: 13,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), myOptions);    

        //Marker at the address typed in
        var image = 'images/townhouse.png'
        var marker = new google.maps.Marker({
                position: latlng,
                map: map,
                icon: image
        });     

        //hard coded the radius to 10 miles, if you get the value from a field if required
        var parameters = 'lat='+ location.lat() + '&lng=' + location.lng() + '&radius=25';  

        $.ajax({  
            type: "POST",  
            dataType: 'json',
            url: "store_locator.php",  
            data: parameters,  
            success: function(msg) {  
                //alert(msg);
                displayStores(msg);
            },
            error:function (xhr, ajaxOptions, thrownError){
                alert(thrownError);
            }    
        });  /* $.ajax({  */
    }

    function displayStores(result){
        if (result.length > 0){
            for (i=0;i<result.length;i++){
                //Append Store Address on Sidebar
                var html = getEmbedHTML(i+1,result[i].name,result[i].address,result[i].distance);
                $("#divStores").append(html);
                //place a marker
                var image = 'images/number_' + parseInt(i+1) + '.png';
                var latlng = new google.maps.LatLng(result[i].lat,result[i].lng);
                var marker = new google.maps.Marker({
                    position: latlng,
                    map: map,
                    icon: image
                }); 

                var msg = 'Location : ' + result[i].name + '<br/> ';
                msg = msg + 'Address : ' + result[i].address + '<br/> ';
                attachMessage(marker, msg);
            }
        } else {
            $("#divStores").html(getEmbedHTML('No Stores Found','',''));
        }
    }

    function attachMessage(marker, msg) {
        var infowindow = new google.maps.InfoWindow({
            content: msg,
            size: new google.maps.Size(120, 150)
        });
        google.maps.event.addListener(marker, 'click', function () {
            infowindow.open(map, marker);
        });
    }

    function getEmbedHTML(seqno,name,address,distance) {
        var strhtml = '<div class="row">';
        strhtml  =  strhtml + '<img src="images/number_' + seqno + '.png" border="0" width="24" height="24" style="padding-right:10px;" /><label>' + name + '</label><br/>'
        strhtml  =  strhtml + '<span>' + address + '</span><br/>'
        strhtml  =  strhtml + '<span> Distance : ' + parseFloat(distance).toFixed(2) + ' miles</span><br/>'
        strhtml  =  strhtml + '</div>';

        return strhtml;
    }
    </script>
</head>
<body>
    <?php include ('./template/header.php'); ?>
    <div id="content">
        <div class="wrapper">
            <div id="news">
                <h2>Landscaper Map Results</h2>
                <div id="map_canvas"></div>
            </div>
            <div id="sidebar">
                <h2>Find a Landscaper</h2>
                <table>
                    <tr>
                        <td>Enter Address:</td>
                        <td><input type="text" id="txtAddress" /></td>
                    </tr>
                    <tr>
                        <td>Distance:</td>
                        <td>
                        <select name="radius" id="radius">
                            <option value="15">15 Miles</option>
                            <option value="25">25 Miles</option>
                            <option value="50">50 Miles</option>
                        </select>
                        </td>
                    </tr>
                    <tr>
                        <td></td>
                        <td><input type="submit" value="Search" id="btnSearch" /></td>
                    </tr>
                </table>
                <br /><br />
                <h2>Landscapers</h2>
                <div id="divStores">
                <!--
                <div class="row">
                    <label>Store 1<label><br/>
                    <span> Address Here<span>
                </div>
                <div class="separator"></div>
                -->         
                </div>
            </div>
        </div>
    </div>
    <?php include ('./template/footer.php'); ?>
</body>

我的代码如上所示。该脚本正在从数据库中获取结果并以列表格式显示。但是在页面加载或提交表单时,地图并未显示。我已经困惑了几个小时,而不是javascript的大师,我现在来这里问这个问题。

谢谢,

利亚姆。

4

0 回答 0