我正在为房地产开发一个网络应用程序,我想在列表页面上显示一个地图,其中多个标记显示同一区域内的多个房屋/属性。我在yii2/php
中这样做。我需要建议如何做到这一点?我已经为每个家庭/财产添加了地图,
答案 0 :(得分:2)
出于类似目的,我使用2amigos/yii2-google-maps-library(在我看来,它不是房屋,而是某种“设施”)。
更新:我将为您提供每个步骤的具体代码示例。首先,您必须了解,要在地图中设置元素,您必须创建LatLang
个对象。您可以创建一个简单指定其纬度和经度坐标(Google地图为您提供正确格式的那些),即:$coord = new LatLng(['lat' => 49.403916, 'lng' => 17.036116])
。
第一步是创建地图,为此必须提供它必须居中的位置。您还可以指定缩放级别,以及您可以在模块的文档中查看的其他一些内容:
$map = new Map([
'center' => $coord,
'zoom' => 4,
'width' => '100%'
]);
一旦你了解地图,你就可以开始添加东西了。就我而言,我添加了工具(Facilty
模型)。我存储它的坐标(纬度,经度),名称,地址等。然后,我循环遍历Facility
ies(foreach $f in $facilities
)的数组并为每一个:
使用其坐标创建LatLang
对象:$coord = new LatLng(['lat' => $f->lat, 'lng' => $f->lng]);
创建新的Marker
:
$marker = new Marker([
'position' => $coord,
'title' => $lab['name_lab'],
'animation' => 'google.maps.Animation.DROP',
'visible'=>'true'
]);
使用工具的信息(名称,地址)创建InfoWindow
并将其附加到Marker
(您可以在其内容中编写html):$marker->attachInfoWindow(new InfoWindow(['content' => $f->address]))
将标记添加到Map
:$map->addOverlay($marker);
最后,在循环之后,我们显示地图:
echo $map->display();
一个完整的例子:
$coord = new LatLng(['lat' => 49.403916, 'lng' => 17.036116]);
$map = new Map([
'center' => $coord,
'zoom' => 4,
'width' => '100%'
]);
foreach ($facilities as $f) {
$coord = new LatLng(['lat' => $f->lat, 'lng' => $f->lng]);
$marker = new Marker([
'position' => $coord,
'title' => $lab['name_lab'],
'animation' => 'google.maps.Animation.DROP',
'visible'=>'true'
]);
$marker->attachInfoWindow(new InfoWindow(['content' => $f->address]));
$map->addOverlay($marker);
}
echo $map->display();
有很多自定义选项,但这应该是让您入门的目标。请检查模块的文档以及Google地图。