volga-volga / react-native-yamap

React Native Yandex Maps | Яндекс Карты | Yandex.MapKit implementation for react native | YandexMaps
158 stars 87 forks source link

При использовании геокодера запрос возвращает ошибку #38

Closed ApollonSeven closed 4 years ago

ApollonSeven commented 4 years ago

При использовании Geocoder.geoToAddress() запрос возвращает null

Код:

const Map = () => {
    YaMap.init(YAMAP_API);
    Geocoder.init(GEO_API);
    YaMap.setLocale('ru_RU');
    const [activePoint, setPoint] = useState({"lat": 0, "lon": 0});
    const [activeZoom, setZoom] = useState(10)

    const _onMapPress = (point: any) => {  
      console.log(point.nativeEvent)
      console.log(Geocoder.geoToAddress(p.nativeEvent))
      setPoint(point.nativeEvent)
    }

    return (
      <YaMap
        onMapPress={(point) => {_onMapPress(point)}}
        style={{ flex: 1, }}
      >
        <Marker point={activePoint}/>
      </YaMap>
    )
}

Лог:

 LOG  {"lat": 51.82748814030343, "lon": 101.08263667140687}
 LOG  {"_40": 0, "_55": null, "_65": 0, "_72": null}
 LOG  {"lat": 51.965713775394576, "lon": 101.18359310286388}
 LOG  {"_40": 0, "_55": null, "_65": 0, "_72": null}

Полученный API-ключ:

изображение

ownikss commented 4 years ago

В данном случае проблема связана с промисами (learn js)

Нужно или:

const _onMapPress = (point: any) => {  
    console.log(point.nativeEvent)
    Geocoder.geoToAddress(p.nativeEvent).then(console.log)
    setPoint(point.nativeEvent)
}

или:

const _onMapPress = async (point: any) => {  
    console.log(point.nativeEvent)
    const address = await Geocoder.geoToAddress(p.nativeEvent)
    console.log(address)
    setPoint(point.nativeEvent)
}

Если проблема решена - можно закрыть issue.

В любом случае планирую реализовать апи геокодера нативно. Когда делал это изначально не обратил внимание, что есть в sdk. Сейчас используется rest api геокодера. Если реализовать на основе сдк, то не придется использовать два разных ключа