dynamic/silverstripe-geocoder

SilverStripe 的地理编码包装器

安装次数: 36,497

依赖者: 3

建议者: 0

安全: 0

星标: 2

关注者: 6

分支: 7

公开问题: 3

类型:silverstripe-vendormodule

3.0.1 2024-09-06 17:30 UTC

README

SilverStripe 包装器用于 Geocoder

CI codecov

Latest Stable Version Total Downloads Latest Unstable Version License

要求

  • Silverstripe ^5
  • dynamic/silverstripe-country-dropdown-field ^2
  • geocoder-php/google-maps-provider ^4.7
  • guzzlehttp/guzzle ^7.4
  • php-http/guzzle7-adapter ^1.0
  • php-http/message ^1.13

安装

composer require dynamic/silverstripe-geocoder

许可证

许可证

示例用法

入门

mysite/_config/config.yml 中,将数据扩展应用于你的数据对象

SilverStripe\ORM\DataObject:
  extensions:
    - Dynamic\SilverStripeGeocoder\AddressDataExtension
    - Dynamic\SilverStripeGeocoder\DistanceDataExtension

Google API 密钥

你还需要设置两个 Google API 密钥。每个密钥都需要启用特定的 API 库

  • geocoder_api_key
    • 地理编码 API
  • map_api_key
    • 地图 JavaScript API
    • 地图静态 API

这主要是由于 Google API 密钥的限制规则。地理编码密钥应与 Web 服务器公开 IP 地址相关联,而地图 API 需要限制为网站的域名。限制规则有助于防止未经授权的用户使用您的密钥,这可能会迅速耗尽您的 API 请求配额。

Dynamic\SilverStripeGeocoder\GoogleGeocoder:
  geocoder_api_key: 'your-key-here'
  map_api_key: 'your-key-here'

文档

AddressDataExtension

AddressDataExtension 添加了 AddressAddress2CityStatePostalCodeCountryLatLng 字段。在 CMS 中,LatLng 字段是只读的,并在写入时自动生成。可以在模型级别禁用地理编码,通过将 disable_geocoding 设置为 true。

SilverStripe\ORM\DataObject:
    disable_geocoding: true

静态地图图像

在模板中使用 $AddressMap 将渲染地图。$AddressMap 还有一些选项,可以轻松地修改地图的宽度、高度和比例。$AddressMap(320, 240, 1)

地图样式

可以通过在主题的以下任何文件夹中添加 mapStyle.json 来设置地图样式

client/dist/js/
client/dist/javascript/
dist/js/
dist/javascript/
src/javascript/thirdparty
js/
javascript/

可以使用在线服务如 样式向导:Google 地图 API 生成样式

标记图像

由于 Google 需要从服务器下载图像,因此此功能在本地不起作用。

可以使用与样式类似的方式使用自定义标记图像来匹配地图的风格。可以将名为 mapIcon 的图像(扩展名为 pngjpgjpeggif)放入主题的以下任何文件夹中

client/dist/img/
client/dist/images/
dist/img/
dist/images/
img/
images/

DistanceDataExtension

应与 AddressDataExtension 一起使用 DistanceDataExtension。它单独可行的情况仅限于扩展的数据对象具有 LatLng 字段。

DistanceDataExtension 将为从地址到数据对象的距离添加一个虚拟字段。最初,要检查距离的地址来自当前控制器。可以通过在数据对象或扩展上实现 updateAddressValue($address) 来更改此。

/**
 * Always get the distance from Neuschwanstein Castle
 */
public function updateAddressValue(&$address) {
    $address = 'Neuschwansteinstraße 20, 87645 Schwangau, Germany';
}

维护者

错误跟踪器

错误将在此存储库的问题部分跟踪。在提交问题之前,请仔细阅读现有问题,以确保您的独特性。

如果问题看起来像是一个新错误

  • 创建一个新的问题
  • 描述重现您问题的步骤以及预期的结果。单元测试、截图和屏幕录制在这里可能会有所帮助。
  • 尽可能详细地描述您的环境:SilverStripe版本、浏览器、PHP版本、操作系统、任何已安装的SilverStripe模块。

请直接向模块维护者报告安全问题。请不要在错误跟踪器中提交安全问题。

开发和贡献

如果您想为此模块做出贡献,请确保您发起一个拉取请求并与模块维护者进行讨论。