@hollanditkzn

Как получать данные долготы и широты yandex map?

Немного не пойму как реализовать, что полученный результат, сохранить только долготу и широту из yandex map. У меня проблема в том что я могу получить данные в js, а передать их в php затруднительно мне и не пойму как это сделать удобнее.
Как я реализовал
Во вьюшке
<?= $form->field($model, 'to')->textInput(['maxlength' => true, 'id' => 'inputYandexMap']) ?>

В контроллере
public function actionCreate()
    {
        $model = new Courier();
        if ($model->load(Yii::$app->request->post()) && $model->validate()) {
            $model->to = YandexMap::widget(['data' => $model->to]);
            $model->save()
            Yii::$app->session->addFlash('update', 'Доставка была назначена');
            return $this->redirect('shipping')
        }
        return $this->render('create', [
            'model' => $model,
        ]);
    }

В виджете YandexMap
class YandexMap extends Widget
{
    public $data = null;
    public function init()
    {
        parent::init();
    }

    public function run()
    {
        $this->view->registerJsFile('https://api-maps.yandex.ru/2.1/?lang=ru_RU', ['type' => 'text/javascript']);
        if ($this->data != null){
            $script = <<<JS
            let searchControl,
                suggestView;
            ymaps.ready(init);
            function init(){
    suggestView = new ymaps.SuggestView('inputYandexMap');
    searchControl = new ymaps.control.SearchControl({
        options: {
            float: 'left',
            floatIndex: 100,
            noPlacemark: true
        }
    });
        searchControl.search('.$this->data.').then(function () {
            let geoOjectsArray = searchControl.getResultsArray();
            if(geoOjectsArray.length){
                return geoOjectsArray[0].geometry.getCoordinates();
            }
        });
    }
JS;
        $this->view->registerJs($script);
        }
        $this->view->registerJsFile('@web/js/yandexMap.js');
    }
}

И в js файле
let searchControl,
    suggestView;

ymaps.ready(init);

function init(){
    suggestView = new ymaps.SuggestView('inputYandexMap');
    searchControl = new ymaps.control.SearchControl({
        options: {
            float: 'left',
            floatIndex: 100,
            noPlacemark: true
        }
    });
    $('#inputYandexMap').on('change', function () {
        let value = $(this).val();
        console.log(value);
        searchControl.search(value).then(function () {
            let geoOjectsArray = searchControl.getResultsArray();
            if(geoOjectsArray.length){
                console.log(geoOjectsArray[0].geometry.getCoordinates());
            }
        });
    });
}

Не могу просто понять как реализовать это и скорее код покажется бредом, но примерно подсказку бы мне, куда смотреть и конечно пример чтобы лишних вопросов не задавал.
  • Вопрос задан
  • 311 просмотров
Решения вопроса 1
@maxyc_webber
Web-программист
1. у вас на странице есть хидден поля и форма. вставляйте туда.
2. передавайте через рест
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы