如何在Codeigniter中使用相同坐标在Google地图上显示多个结果

时间:2016-02-29 13:09:45

标签: codeigniter google-maps

我坚持在谷歌地图上显示多个结果。如果我的搜索结果在同一位置包含多个标记,则只有一个可访问。 我正在使用google maps v3 api library

这是我的代码:

$n = 0;
        foreach ($firm as $f) {
            if ($f->active == 1 && in_array($f->skd_n, $dejavnost) && $f->lat != 0) {
                $lat_f = $f->lat;
                $lng_f = $f->lng;
                $distance = (($this->distance($lat, $lng, $lat_f, $lng_f)) * 1000);
                if ($distance <= $rad && $n <= 199) {
                    $marker = array();
                    $marker['position'] = "$lat_f, $lng_f";
                    if ($f->phone != 0) {
                        $marker['infowindow_content'] = '<div class="info_window">' . "$f->title" . '<br/>' .
                            '<div class="pin_icon"></div>' .
                            "$f->address" . '<br/>' .
                            '<div class="phone_icon"></div>' .
                            "$f->phone" . '<br/>' . '<hr>' .
                            '<div class="directions_icon"><a href="'.site_url()."domov/direction"."?lat=".$lat."&lng=".$lng."&lat_f=".$lat_f."&lng_f=".$lng_f.'" onClick="return popup(this)">Pokaži pot</a></div>' .
                            '<div class="street_view_icon"><a href="'.site_url()."domov/street_view"."?lat_f=".$lat_f."&lng_f=".$lng_f.'" onClick="return popup(this)">Street view</a></div>' .
                            '</div><br/>';

                    } else {
                        $marker['infowindow_content'] = '<div class="info_window">' . "$f->title" . '<br/>' .
                            '<div class="pin_icon"></div>' .
                            "$f->address" . '<br/>' . '<hr>' .
                            '<div class="directions_icon"><a href="'.site_url()."domov/direction"."?lat=".$lat."&lng=".$lng."&lat_f=".$lat_f."&lng_f=".$lng_f.'" onClick="return popup(this)">Pokaži pot</a></div>' .
                            '<div class="street_view_icon"><a href="'.site_url()."domov/street_view"."?lat_f=".$lat_f."&lng_f=".$lng_f.'" onClick="return popup(this)">Street view</a></div>' .
                            '</div>';
                    }
                    $marker['animation'] = 'DROP';
                    $marker['zIndex'] = '0';
                    $marker['icon'] = '../images/pin-map-red.png';
                    $this->googlemaps->add_marker($marker);
                    $n++;

                }
            }

        }

尝试使用location&#34; ljubljana&#34;,&#34; radij&#34; - 10000并选择&#34; restavracije&#34;。更强的标记阴影意味着在同一位置有多个结果,这里我想显示所有这些结果。我该怎么办? 以下是my page来测试我的问题

我正在考虑为我的数据库中的坐标设置新值。例如,如果我将经度改为0.000014,我会得到我想要的结果。你可以帮我查询改变所有重复的坐标(纬度和经度)并设置它们像#34;如果lat / lng有重复的值,为每一行设置lng + 0.000014&#34;。 谢谢!

2 个答案:

答案 0 :(得分:1)

我决定更改代码以显示多个结果。我不知道如何在&#39; infowindow_content&#39;中使用相同的$ lat_f和$ lng_f显示所有结果标题。值。 有什么建议吗?

$n = 0;
        foreach ($firm as $f) {
            if ($f->active == 1 && in_array($f->skd_n, $dejavnost) && $f->lat != 0) {
                $lat_f = $f->lat;
                $lng_f = $f->lng;
                $distance = (($this->distance($lat, $lng, $lat_f, $lng_f)) * 1000);
                if ($distance <= $rad && $n <= 199) {
                    $marker = array();
                    $marker['position'] = "$lat_f, $lng_f";
                    $marker['infowindow_content'] = "$f->title";
                    $marker['animation'] = 'DROP';
                    $marker['zIndex'] = '0';
                    $marker['icon'] = '../images/pin-map-red.png';
                    $this->googlemaps->add_marker($marker);
                    $n++;
                }
            }
        }

答案 1 :(得分:0)

由于我不知道您的表结构如何,您可以使用此查询过滤掉数据库中的重复值

Select t1.id, t1.ColumnA, t1.ColumnB
From Table t1 
inner join Table t2 
on (t1.id <> i2.id AND t1.columnA = t2.columnA AND t1.columnB = t2.columnB)

或者这种查询

SELECT t1.ID, t1.COLUMN_A, t1.COLUMN_B
FROM mytable AS t1
INNER JOIN (
   SELECT COLUMN_A, COLUMN_B
   FROM mytable
   GROUP BY COLUMN_A, COLUMN_B
   HAVING COUNT(*) > 1
) AS t2 ON t1.COLUMN_A = t2.COLUMN_A AND t1.COLUMN_B = t2.COLUMN_B 

一旦你有了行,就可以在数据库中手动更改它们,或者如果数据太多,你应该编写带有一些foreach循环的php脚本,并在所需的字段上添加所需的值(0.000014)

解决问题的另一种方法应该是检查一个标记是否可以有多个描述。如果是这样,我建议你这样做,而且你不必制作所有那些mysql和phpscript的恶作剧。