teneleven / geolocator-bundle
使您的模型在谷歌地图上可进行地理搜索
Requires
This package is not auto-updated.
Last update: 2024-09-28 15:56:45 UTC
README
此包扩展了模型进行地理搜索并在地图上显示的能力。例如使用包括商店定位器、公寓搜索、最近的公交车站等。任何您能想到的地理搜索场景。
默认情况下,此包与Doctrine ORM一起工作,但支持其他持久层也很简单。
为了保持包的精简,尽可能利用其他优秀的包,例如
- BazingaGeocoderBundle 用于实际的地理编码
- IvoryGoogleMapBundle 用于优雅的谷歌地图处理
- CraueGeoBundle 用于Doctrine地理距离计算
自动添加敏感默认值,但鼓励直接使用每个包的配置。
安装 & 设置
通过composer下载包
在您的composer.json文件中要求包
{ "require": { "teneleven/geolocator-bundle": "3.*" } }
如果您使用的是Symfony 2,您可能更喜欢锁定到v2版本
{ "require": { "teneleven/geolocator-bundle": "2.*" } }
或运行
php composer.phar require teneleven/geolocator-bundle:*
在shell中。
启用包
// in app/AppKernel.php public function registerBundles() { $bundles = array( // ... new Teneleven\Bundle\GeolocatorBundle\TenelevenGeolocatorBundle(), ); // ... }
配置模型
您想要支持的每种模型类型都需要在唯一别名下有一个配置条目。此别名用于路由配置和命令参数。
# in app/config/config.yml teneleven_geolocator: locatables: dealer: #this is the alias for your model - name this anything you like repository: teneleven_sandbox.repository.dealer #this is the service ID of the repository for this model radius: 300 #(optional) default limit for search area (in miles) limit: 50 #(optional) limit the number of results address_properties: [street, city, state, zip] #these are properties of your model which together make up a geo-coder-friendly address #other models configs...
配置路由
以下是对上面配置的模型的示例路由。它利用了包附带默认控制器,并且没有指定自定义模板。
teneleven_sandbox_dealers: path: /dealers defaults: { _controller: teneleven.geolocator.controller:locate, entity: dealer, template: ~ }
此路由配置允许您在不同的URL上公开配置不同的定位器,每个定位器都有一个自定义的位置提供者和自定义模板(如果需要)。
地理编码模型
为了通过此包定位,您的模型类必须实现 Teneleven\Bundle\GeolocatorBundle\Model\GeolocatableInterface
。
根据上述配置,您现在可以运行
php app/console teneleven:geolocator:geocode your-model-alias1 your-model-alias2...
以将地理坐标应用于每个模型实例。默认情况下,此包使用Geocoder Google Maps适配器,但您可以按任何方式配置Geocoder Bundle。your-model-alias
参数是可选的。如果您省略它,则所有配置了此包的模型都将被地理编码。
完成
您的模型现在可以进行地理搜索,并应在结果页面上显示。进行搜索并享受您的劳动成果!你知道吗 - 点击结果将突出显示相关的标记,点击标记将突出显示相关的结果。多么酷啊!
自定义此包
此包设计得非常灵活,使自定义变得容易。如果您遇到这里未描述的使用场景,请提交工单。
自定义结果模板
此包中的默认模板包括几个块,可以轻松自定义以下区域
- 结果列表 & 单个结果条目
- 与地图标记相关联的弹出窗口内容
- 搜索表单
- 地图上方的区域内容
只需在您的项目中扩展此模板,覆盖所需的块,并在路由配置(见上面)中指定新的模板。您的模板还可以指定一个布局,通过在模板中设置teneleven_geolocator_layout
变量来实现。
自定义位置提供者
位置提供者包含查询逻辑并处理搜索表单。如果您的模型搜索包括自定义参数(除了搜索位置之外),您需要扩展默认逻辑并指定自定义搜索表单。一个示例用例是一个公寓寻找器,它可以按照租金水平进行筛选和排序,除了地理距离。
自定义控制器
目前控制器是地图构建的地方。如果您需要出于某种原因自定义此功能,您可以提供自己的控制器实现并在路由配置中指定它。
命令与地址提取器
该包包括一个命令 teneleven:geolocator:geocode
,用于将地理坐标应用于您的模型。默认情况下,只有纬度/经度为空的模型被处理,但您可以通过提供自己的位置提供者实现来自定义它。例如,您可能希望刷新最近更新的模型的地理坐标,或者那些一段时间没有更新的模型。由您决定。
在内部,地理坐标由伟大的 Geocoder 库提供,该库需要一个字符串形式的地址输入,所以我们提供了一个基于 PropertyAccess 组件的默认实现 AddressExtractorInterface
。如果您的地址提取逻辑超出了简单地拼接模型属性,您可以自由提供自己的实现。
技巧与技巧
- Geocoder节流 - 为了遵守地理编码服务的条款,您可能需要使用启用节流插件的 Guzzle 适配器
- 地图默认设置可通过 IvoryGoogleMapBundle 配置 进行配置。例如,您可以设置一个很好的默认中心/缩放,以便指向您的办公室
ivory_google_map: map: center: latitude: 32.726104 longitude: -117.226081 no_wrap: true zoom: 8
贡献
我们欢迎想法、错误报告和拉取请求。请在 GitHub 仓库中提交工单。