【问题标题】:Update markers from google maps using codeigniter, Ajax, Javascript, Php使用 codeigniter、Ajax、Javascript、Php 从谷歌地图更新标记
【发布时间】:2015-12-11 10:10:17
【问题描述】:

我的网站上有一个用 codeigniter 创建的谷歌地图。现在我想用我的 sql 数据库中的数据移动标记。我的数据库中的数据将被更新。我可以通过 biostall 在地图上绘制标记。现在我想移动它们。

所以我加载所有标记并将它们传递给我的视图以使用 ajax/javascript 脚本绘制它们。我没有错误,但也没有标记。我不是 ajax 和 javascript 的专业人士,所以问题需要存在,但我无法解决它。这是我的代码。地图应每 3 秒更新一次。

我的控制器:

function render_maps() {
    $userid = $this->uri->segment(3);
    $userlevel = $this->user_model->get_user_level($userid);
    if ($userlevel > 2) {
        $this->load->library('googlemaps');
        $this->googlemaps->initialize();

        #$this->marks();

        $config['zoom'] = 'auto';
        $data['map'] = $this->googlemaps->create_map();
        $data['markers'] = json_encode($this->user_model->get_marks());
        $data['userdata'] = $this->session->userdata;
        $this->load->view('header', $data);
        $this->load->view('dashboard_maps', $data);
        $this->load->view('wrapper', $data);
    }
}

我的看法:

<head>
     <?php echo $map['js']; ?>
     <script type="text/javascript">
    function refreshMarkers() {
         $.ajax({
              url: "<?php site_url('User/render_maps/'. $this->session->userdata('user_id')) ?>",
              type: "POST",
              data: ({value: $markers}),
              dataType: "json", //retrieved Markers Lat/lng in Json, thus using this dataType
              success: function(data){
                  //Removing already Added Markers//////////
                 for (var i = 0; i < $markers.length; i++) {
                     $markers[i].setMap(null);
                 }
                 $markers = new Array();
                 //////////////////////////////////////////
                  // Adding New Markers////////////////////

                  for (var i = 0, len = data.length; i < len; ++i) { // Iterating the Json Array
                var d = data[i];

                var lat = parseFloat(d.lat);
                var lng = parseFloat(d.lng);
                var myLatlng = new google.maps.LatLng(lat, lng);

                var marker = {
                    map: map,
                    position: myLatlng // These are the minimal Options, you can add others too
                };
                createMarker(marker);
            }
        }
    }
    );
</script>

【问题讨论】:

    标签: javascript php ajax codeigniter google-maps


    【解决方案1】:

    您的函数refreshMarkers() 缺少一个右括号}。还请包括所有依赖项,例如 jquery 和其他函数。

    您不必成为 ajax 或 javascript 方面的专家即可实现这一目标。确保您使用浏览器的控制台成功检索数据。

    这是一个带有多个标记的 Google Map JS API 的普通示例,用于显示不同的地震位置。尝试运行下面的代码 sn-p。

    <!DOCTYPE html>
    <html>
        <head>
            <script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script>	  
            <style type="text/css">
                html, body { height: 100%; margin: 0; padding: 0; }
                #map { height: 100%; }
            </style>
        </head>
        <body>
            Click Here >> <button id="earthquakes">Show Earthquakes</button>
            <div id="map"></div>
            <script async defer
                    src="https://maps.googleapis.com/maps/api/js?key=AIzaSyDrhmCE5YeH0r9Kkeq-v4ZXBd87UvwCOrw&callback=initMap">
            </script>
            <script>
                var map;
                function initMap() {
                    map = new google.maps.Map(document.getElementById('map'), {
                        center: {lat: 4.8259171, lng: 63.3691405},
                        zoom: 1
                    });
                }
    
                function createMarker(latlng, name) {
                    var marker = new google.maps.Marker({
                        position: latlng,
                        map: map,
                        title: name
                    });  
                }
    
                function displayMarkers() {    
                    console.log('displayMarkers:'+latitd+':'+longtd+'\n');
                    var latlng = new google.maps.LatLng(latitd, longtd);
                    var name = titleName;
                    createMarker(latlng, name);    
                }  
    
                var latitd;
                var longtd;
                var titleName; 
    
                var nowDate = new Date();
                var displayDate = nowDate.toJSON().slice(0,10);
                nowDate.setDate(nowDate.getDate() - 1);
                var yesterDate = nowDate.toJSON().slice(0,10);
    
                $(document).ready(function() {
                    $('#earthquakes').click(function() {    
                        getQuakes();
                    });
    
                    function getQuakes() {
                        console.log('yesterDate:'+yesterDate+', displayDate:'+displayDate+'\n');
                        $.ajax({
                            url: 'http://earthquake.usgs.gov/fdsnws/event/1/query?format=geojson&starttime=' + yesterDate + '&endtime=' + displayDate,
                            dataType : 'json'
                        })
                            .done(function(data) {
                            console.log('data.features:'+data.features);
                            $.each(data.features, function(key, val) {
                                var coord = val.geometry.coordinates;
                                locationD = {
                                    latd: coord[0],
                                    lngd: coord[1]
                                };
                                latitd = locationD.latd;
                                longtd = locationD.lngd;
                                titleName = val.properties.title;
    
                                console.log(latitd, longtd);
                                console.log(titleName); 
    
                                displayMarkers();        
                            });
                        })
                            .fail(function(e){
                            console.log(e);
                        })
                            .always(function(){
                            console.log('ajax executed');
                        });
                    }    
                });		
            </script>
        </body>
    </html>

    【讨论】:

    • 感谢您的回答。你确定缺少 } 吗?我不知道如何改进我的代码.. 但感谢您的帮助
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2018-11-04
    • 2012-02-21
    • 2016-09-10
    • 2017-08-28
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多