Как сделать так чтобы отображать в gridview отображать не долготу и широту, а именно адрес, как понимаю или сохранять изначально улица и дом, или можно как-то из долготы и широты, чтобы отображался адрес?
Как понимаю что лучше смотреть как понимаю на rest api?
Как я реализовал
В виджете 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']);
$this->view->registerJsFile('@web/js/yandexMap.js');
if($this->data != null){
$script = <<<JS
let myGeocode;
yamps.ready(
myGeocode = new yamps.geocode([$this->data]);
myGeocode.then(
function(res){
return res.geoObjects.get(0).properties.get('name');
},
function(err){
alert(err);
}
)
)
JS;
}
}
}
В gridview в аттрибуте
[
'attribute' => 'to',
'format' => 'raw',
'value' => function($courier){
return '<span class="shipping">Откуда: </span>'.\frontend\components\YandexMap::widget(['data' => $courier->to]) ;
},
'contentOptions' => ['class' => 'textTr tr202'],
],
Если конечно нужно посмотреть на сам файл yandex.Map.js То вот
let searchControl,
suggestView;
ymaps.ready(init);
function init(){
suggestView = new ymaps.SuggestView('toMap');
suggestView = new ymaps.SuggestView('fromMap');
searchControl = new ymaps.control.SearchControl({
options: {
float: 'left',
floatIndex: 100,
noPlacemark: true
}
});
geoObject('#toMap', '#toInput');
geoObject('#fromMap', '#fromInput');
function geoObject(idInput, toInput){
$(idInput).on('change', function () {
let value = $(this).val();
searchControl.search(value).then(function () {
let geoOjectsArray = searchControl.getResultsArray();
if(geoOjectsArray.length){
let coordinat = geoOjectsArray[0].geometry.getCoordinates();
$(toInput).val(coordinat);
console.log(coordinat);
}
});
});
}
}
И еще вопрос, если делать так, то разумно, ведь надо будет каждый запрос надо отправлять на api, что лучше получать данные из бд, и в бд хранить координаты и улицу