nblum / silverstripe-geocodefield
此包已被废弃,不再维护。未建议替代包。
Silverstripe 字段,用于从 Google Maps API 获取任何地址的地理数据
2.2.0
2019-10-27 08:05 UTC
Requires
README
从 Google Maps API 获取地理位置(经度,纬度)。可以用作免费地址输入字段,或参考表单中的其他地址字段
要求
- Silverstripe 4.* 或 Silverstripe 3.*(使用标签 0.3.0 以支持 v3.x)
安装
Composer
composer require "nblum/silverstripe-geocodefield"
手动安装
- 在 SilverStripe 根目录下下载/克隆模块
使用
配置
您可能需要提供 Google(地理位置 API)的 API 密钥
Nblum\Geocodefield\Forms\GeoCodeField: google_api_key: 'your_google_maps_api_ke'
...或尝试使用来自 OpenStreetMap 的 Nominatim 进行地理编码 https://wiki.openstreetmap.org/wiki/Nominatim
Nblum\Geocodefield\Forms\GeoCodeField: custom_geocoder: 'osm'
基本示例
class MyPage extends Page { private static $db = array( 'Geodata' => \Nblum\Geocodefield\Forms\Json::class ); public function getCMSFields() { $fields = parent::getCMSFields(); //creates a GeoCodeField field $fields->addFieldToTab('Root.Main', new \Nblum\Geocodefield\Forms\GeoCodeField('Geodata')); return $fields; } }
包含引用地址字段的示例
class MyPage extends Page { private static $db = array( 'Street' => 'Varchar', 'City' => 'Varchar', 'Geodata' => 'Json' ); public function getCMSFields() { $fields = parent::getCMSFields(); $fields->addFieldToTab('Root.Main', new TextField('Street')); $fields->addFieldToTab('Root.Main', new TextField('City')); //creates a GeoCodeField field $field = new \Nblum\Geocodefield\Forms\GeoCodeField('Geodata', 'Geo Position'); $field->addAddressReference('Street'); $field->addAddressReference('City'); $field->setAddressNotEditable(); $fields->addFieldToTab('Root.Main', $field); return $fields; } }
将经纬度值写入单独的数据库列
class MyPage extends Page { private static $db = array( 'Lat' => 'Varchar', 'Lon' => 'Varchar', 'GeoData' => 'Json' ); public function getCMSFields() { //... } protected function onBeforeWrite() { parent::onBeforeWrite(); //get current values and update some custom fields $parts = json_decode($this->getField('GeoData')); $this->setField('Lat', $parts->lat); $this->setField('Lon', $parts->lon); } }