nblum/silverstripe-geocodefield

此包已被废弃,不再维护。未建议替代包。

Silverstripe 字段,用于从 Google Maps API 获取任何地址的地理数据

安装次数: 2,420

依赖项: 0

建议者: 0

安全: 0

星标: 4

关注者: 1

分支: 3

公开问题: 0

类型:silverstripe-vendormodule

2.2.0 2019-10-27 08:05 UTC

This package is auto-updated.

Last update: 2023-01-24 15:47:18 UTC


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);
        }
    }