Php 如何使谷歌地图代码在加载城市、州下无需先加载LatLong?

Php 如何使谷歌地图代码在加载城市、州下无需先加载LatLong?,php,javascript,Php,Javascript,下面的代码将显示用户从网站上一页选择的城市、州。然而,map首先加载LatLong位置,然后打开city、state。如何消除LatLong变量,使其不加载?只是想展示城市、州 <html> <head> <meta name="viewport" content="initial-scale=1.0, user-scalable=no" /> <style type="text/css"> html { heigh

下面的代码将显示用户从网站上一页选择的城市、州。然而,map首先加载LatLong位置,然后打开city、state。如何消除LatLong变量,使其不加载?只是想展示城市、州

<html>
<head>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        html { height: 100% }
        body { height: 100%; margin: 0; padding: 0 }
        #map_canvas { height: 100% }
    </style>
    <script type="text/javascript" src="https://ajax.googleapis.com/ajax/libs/jquery/1.9.0/jquery.min.js"></script>
    <script type="text/javascript" src="https://maps.googleapis.com/maps/api/js?key=YOUR_KEY&sensor=false"></script>
    <script type="text/javascript">
        var geocoder;
        var map;
        var marker;

        function initialize() {
            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);
            geocoder = new google.maps.Geocoder();
            marker = new google.maps.Marker({
                map: map,
                draggable: true
            });

            showAddress('"<?php echo $_SESSION['city_name']; ?>"');
        }

        function showAddress(address) {
            geocoder.geocode({'address': address}, function(results, status) {
                if (status != google.maps.GeocoderStatus.OK) {
                    return;
                }
                if (results.length > 1) {
                    alert('Multiple addresses found; showing first one ...');
                }
                $.each(results, function(i, item) {
                    var location = new google.maps.LatLng(item.geometry.location.lat(), item.geometry.location.lng());
                    marker.setPosition(location);
                    map.setCenter(location);
                    return false;
                });
            });
        }
    </script>
</head>
<body onload="initialize()">
    <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>

html{高度:100%}
正文{高度:100%;边距:0;填充:0}
#地图画布{高度:100%}
var地理编码器;
var映射;
var标记;
函数初始化(){
var latlng=新的google.maps.latlng(-34.397150.644);
变量映射选项={
缩放:8,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
geocoder=新的google.maps.geocoder();
marker=新的google.maps.marker({
地图:地图,
德拉格布尔:是的
});
showAddress(““””);
}
函数showAddress(地址){
geocoder.geocode({'address':address},函数(结果,状态){
if(status!=google.maps.GeocoderStatus.OK){
返回;
}
如果(results.length>1){
警报('找到多个地址;显示第一个…');
}
$。每个(结果、功能(i、项目){
var location=new google.maps.LatLng(item.geometry.location.lat(),item.geometry.location.lng());
标记器。设置位置(位置);
地图设置中心(位置);
返回false;
});
});
}

你知道,你总能找到你要寻找的特定城市的lat长度,并将其放大到合适的高度,使该区域适合你的视野。我就是这么用的

或者,您可以使用地理编码器结果向latlang发送值 因此,在初始化地图之前,需要调用geocoder.geocode()

使用代码中已有的行:

var location = new google.maps.LatLng(item.geometry.location.lat(), item.geometry.location.lng());
然后将其放在以下位置之后:

var latlng = location;
然后使用latlng初始化映射 因此,您的代码应该如下所示:

<script type="text/javascript">
    var geocoder;
    var map;
    var marker;

    function initialize() {

        /*Go through the following to understand what I'm trying to get at.*/
        var address = "<?php echo $_SESSION['city_name']; ?>";
        geocoder = new google.maps.Geocoder(); // This was removed from below. Compare with your code.
        geocoder.geocode( { 'address': address}, function(results, status) {

            if (status == google.maps.GeocoderStatus.OK) {
            var latlang = results[0].geometry.location; } 

            else { alert("The location cannot be mapped"); }
        });

        /* Up until here. */

        var mapOptions = {
            zoom: 8,
            center: latlng,
            mapTypeId: google.maps.MapTypeId.ROADMAP
        };
        map = new google.maps.Map(document.getElementById("map_canvas"), mapOptions);
        marker = new google.maps.Marker({
            map: map,
            draggable: true
        });

        showAddress('"<?php echo $_SESSION['city_name']; ?>"');
    }

    function showAddress(address) {
        geocoder.geocode({'address': address}, function(results, status) {
            if (status != google.maps.GeocoderStatus.OK) {
                return;
            }
            if (results.length > 1) {
                alert('Multiple addresses found; showing first one ...');
            }
            $.each(results, function(i, item) {
                var location = new google.maps.LatLng(item.geometry.location.lat(), item.geometry.location.lng());
                marker.setPosition(location);
                map.setCenter(location);
                return false;
            });
        });
    }
</script>

var地理编码器;
var映射;
var标记;
函数初始化(){
/*通过以下步骤来理解我想要表达的意思*/
var地址=”;
geocoder=new google.maps.geocoder();//这已从下面删除。请与您的代码进行比较。
geocoder.geocode({'address':address},函数(结果,状态){
if(status==google.maps.GeocoderStatus.OK){
var latlang=results[0]。geometry.location;}
else{alert(“无法映射位置”);}
});
/*直到这里*/
变量映射选项={
缩放:8,
中心:拉特林,
mapTypeId:google.maps.mapTypeId.ROADMAP
};
map=new google.maps.map(document.getElementById(“map_canvas”),mapOptions);
marker=新的google.maps.marker({
地图:地图,
德拉格布尔:是的
});
showAddress(““””);
}
函数showAddress(地址){
geocoder.geocode({'address':address},函数(结果,状态){
if(status!=google.maps.GeocoderStatus.OK){
返回;
}
如果(results.length>1){
警报('找到多个地址;显示第一个…');
}
$。每个(结果、功能(i、项目){
var location=new google.maps.LatLng(item.geometry.location.lat(),item.geometry.location.lng());
标记器。设置位置(位置);
地图设置中心(位置);
返回false;
});
});
}

这应该行得通

在“变量位置=…”之后插入“变量位置=…”。得到相同的结果:latlng坐标图首先显示城市,然后打开州。然后使用latlng进行初始化?怎么做?清楚我想做什么吗?用户从上一页选择城市、州。他们的选择在上面代码的下一页上发布。位置显示在地图上。除了代码中的latlng坐标短暂显示,然后显示用户选择的城市外,此操作有效。只想城市出现而已。怎么做?我已经更新了答案。基本上,我在初始化地图之前调用geocoder.geocode。这样我就可以在地图初始化之前得到城市的坐标。然后,对于map center属性,我使用已保存到latlang变量的geocoder信息。在geocoder.geocode行之后获取“uncaughtreferenceerror:address is not defined”。我错过了什么?谢谢。@jhar来自您的代码:
showAddress(““””)该php行基本上将地址发送到showAddress函数。因此,在
geocoder.geocode({'address':address})之前,函数(结果、状态)
添加以下内容:
var address=“”;