teneleven/geolocator-bundle

使您的模型在谷歌地图上可进行地理搜索

安装: 209

依赖项: 0

建议者: 0

安全: 0

星标: 7

关注者: 7

分支: 3

开放问题: 6

类型:symfony-bundle

3.1 2018-12-12 19:04 UTC

This package is not auto-updated.

Last update: 2024-09-28 15:56:45 UTC


README

此包扩展了模型进行地理搜索并在地图上显示的能力。例如使用包括商店定位器、公寓搜索、最近的公交车站等。任何您能想到的地理搜索场景。

Example

默认情况下,此包与Doctrine ORM一起工作,但支持其他持久层也很简单。

为了保持包的精简,尽可能利用其他优秀的包,例如

自动添加敏感默认值,但鼓励直接使用每个包的配置。

安装 & 设置

通过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 仓库中提交工单。