Прямое геокодирование с отклонением центра карты 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, не беспокойтесь)


Ответы (0 шт):