Прямое геокодирование с отклонением центра карты yandex map api
Установлен кастомный курсор центра карты, которые на 150px выше от цетра, при геокодировании setBound ставит цель на центр карты, а курсор не там,в свою очередь с курсора тоже считывается координаты и выводится результат, в итоге оба с друг другом конфликтуют. Увидеть можно тут
function ymapSetMapLocationByAdress(input_field) {
const _coordinates = city_data.coordinates.split(",");
const _bounded_by = [
[_coordinates[1] - 0.21, _coordinates[0] - 0.32],
[Number(_coordinates[1]) + 0.21, Number(_coordinates[0]) + 0.32],
];
ymaps
.geocode(city_data.title + " " + input_field, {
results: 1,
kind: "house",
boundedBy: _bounded_by,
})
.then(function (res) {
var firstGeoObject = res.geoObjects.get(0);
console.log(firstGeoObject);
var coord = firstGeoObject.getCoordinates();
var bounds = firstGeoObject.properties.get("boundedBy");
console.log(bounds, " bounds");
// let _bounds = getCustomGeo(myMap, bounds);
myMap.setBounds(bounds, {
checkZoomRange: true,
});
});}
Это код, который дает результаты прямого геокодирования на карте, проблема о которой я говорюю
А вот код, который берет координаты по курсору
const mapGetAddress = (myMap) => {
// console.log(call_cursor_map.geometry.getCoordinates());
ymaps
.geocode(
getCustomCenter(myMap),
// myMap.getCenter(),
{
kind: "house",
results: 1,
}
)
.then(function (res) {
let firstGeoObject = res.geoObjects.get(0),
address = firstGeoObject.getAddressLine(),
address_finish = address.split(",").splice(3, 4).join(",").trim();
field_search.val(address_finish + " ").triggerHandler("change");
field_search_mobile.val(address_finish + " ").triggerHandler("change");
$(".js--form-measurer-call-input").val(address_finish);
call_number_active.show();
// if (window.matchMedia(media_min_width).matches) {
// selected_list.fadeOut(50);
// }
setInputData({
full_address: address,
address: address_finish,
flat: null,
});
control_box.removeClass("control-active");
call_modal_wrap.removeClass("overlay-search active");
mobile_text_parse.html(truncate(address_finish, 52, "<br>..."));
updateHeightSearch(field_search_mobile);
mobile_text_parse.show();
field_search.hide();
});};
Та же проблемы была с обратным геокодированием, я использовал кастомный getCenter, чтобы отклонить результаты центра на 150px
function getCustomCenter(myMap) {
if (!window.matchMedia(media_max_width).matches) return myMap.getCenter();
var position = myMap.getGlobalPixelCenter();
console.log(position, " position");
var pixelCenter = [position[0], position[1] - 150];
console.log(pixelCenter, " pixelCenter");
var geoCenter = myMap.options
.get("projection")
.fromGlobalPixels(pixelCenter, myMap.getZoom());
console.log(geoCenter, " geoCenter");
return geoCenter;}
Проблема только на мобильных, потому что там курсор не находится по центру карты, а на деске находится.
Если хотите посмотреть весь скрипт по картам, то можно увидеть его в inspector-е в source в файле yandex/widgets/index/widgets/form_request/js/form_request.js
По ссылке нет ssl, не беспокойтесь)