innoweb / silverstripe-googlemapfield
使用经纬度数据对象字段保存位置。
2.4.0
2024-01-19 03:04 UTC
Requires
- silverstripe/framework: ^4 || ^5
Replaces
README
这是对 https://github.com/BetterBrief/silverstripe-googlemapfield 的一个兼容 SS5 的分支。
允许您使用纬度、经度和缩放字段将精确的位置记录到数据对象中。
使用 Google Maps API 显示地图。然后用户可以选择放置标记的位置;然后将着陆坐标保存。
您还可以使用搜索框搜索位置,该搜索框使用 Google Maps 地理编码 API。
支持 SilverStripe 5
使用方法
最小配置
假设您的数据对象使用字段名称 Latitude
和 Longitude
分别存储纬度和经度,那么以下是最小配置,以使地图在 CMS 中显示
use SilverStripe\ORM\DataObject; use BetterBrief\GoogleMapField; class Store extends DataObject { private static $db = [ 'Title' => 'Varchar(255)', 'Latitude' => 'Varchar', 'Longitude' => 'Varchar', ]; public function getCMSFields() { $fields = parent::getCMSFiels(); // add the map field $fields->addFieldToTab('Root.Main', new GoogleMapField( $this, 'Location' )); // remove the lat / lng fields from the CMS $fields->removeFieldsFromTab('Root.Main', ['Latitude', 'Longitude']); return $fields; } }
请记住在您网站的 config.yml
中设置您的 API 密钥
BetterBrief\GoogleMapField: default_options: api_key: '[google-api-key]'
或通过 .env
APP_GOOGLE_MAPS_KEY=[google-api-key]
可选配置
配置选项
您可以在 yaml 文件中设置默认选项(请参阅 _config/googlemapfield.yml 以获取完整的列表)或在每个 GoogleMapField
对象的运行时。
运行时设置
要设置选项,请通过一个选项数组(第三个构造参数)传递
use BetterBrief\GoogleMapField; $field = new GoogleMapField( $dataObject, 'FieldName', [ 'api_key' => 'my-api-key', 'show_search_box' => false, 'map' => [ 'zoom' => 10, ], ... ] );
自定义地图外观
您可以通过将设置传递到上述 $options
的 map
键来自定义地图的外观。 map
设置采用 google.maps.MapOptions 的文本表示
例如,如果我们想将地图类型从路线图更改为卫星图像,我们可以做以下操作
use BetterBrief\GoogleMapField; $field = new GoogleMapField( $object, 'Location', [ 'map' => [ 'mapTypeId' => 'SATELLITE', ], ] );
获取 API 密钥
Google Maps API 密钥
要获取 Google Maps JS API 密钥,请参阅 官方文档
地理编码访问 - 启用搜索框
要使用搜索框在地图上查找位置,您还需要启用地理编码 API。请参阅 官方文档