Ваши ошибки не связаны с вашей реализацией geolib
, но вместо этого они связаны с вашей реализацией MapView.Circle
.
Если мы посмотрим на документацию MapView.Circle
, то увидим следующее:
| Prop | Type | Default | Note |
|----------|----------|------------|------------------------------------------------|
| `center` | `LatLng` | (Required) | The coordinate of the center of the circle .
| `radius` | `Number` | (Required) | The radius of the circle to be drawn (in meters)
Поля center
и radius
являются обязательными для заполнения.
Если мы посмотрим на ваш код:
<MapView.Circle
key = { (this.state.latitude + this.state.longitude).toString() }
center = { this.state.region }
radius = { 500 }
strokeWidth = { 1 }
strokeColor = { '#1a66ff' }
fillColor = { 'rgba(230,238,255,0.5)' }
/>
Может показаться, что вы их установили, однако на самом деле вы не задали регион. Вы можете подтвердить это, проверив исходное состояние.
constructor () {
super();
this.state = {
markers: [],
loaded: false
}
}
Обратите внимание, что вы не установили начальный регион для карты. Это то, что вызывает вашу ошибку. Приложение пытается обработать неопределенное значение для региона.
Чтобы преодолеть это, проще всего установить начальный регион для карты в состоянии.
Примерно так:
constructor () {
super();
this.state = {
markers: [],
loaded: false,
region: {
latitude: 0,
longitude: 0,
latitudeDelta: 0.020,
longitudeDelta: 0.020
},
latitude: 1,
longitude: 1
};
}
Если ваше приложение предназначено для определенного региона, то может иметь смысл выбрать начальный регион, близкий к тому, где будет использоваться ваше приложение.
Также обратите внимание, что в вашем коде MapView.Circle
вы также используете неопределенные значения latitude
и longitude
для key
. Я не думаю, что вам нужно определять key
свойство для MapView.Circle
. Я не могу найти упоминания о том, что это требование в документации.
Внесение вышеуказанных изменений позволяет коду работать.
Некоторые другие моменты.
- Вы импортируете
geolib
дважды. Вам нужно сделать это только один раз. Вы должны иметь либо import GeoLib from 'geolib';
, либо const geolib = require('geolib');
, вам не нужны оба. Поскольку вы используете geolib
в нижнем регистре, я бы просто удалил import GeoLib from 'geolib';
- Вы импортируете
Markers
из react-native-maps
неправильно. Его следует импортировать как import { Markers } from 'react-native-maps
, однако вы используете Markers
как MapView.Markers
, что является абсолютно плавным. Я думаю, что вы можете удалить неиспользованные и неправильные import Markers from 'react-native-maps
MapView.Animated
Я не на 100% уверен, что это правильно или требуется. Я не видел, чтобы это использовалось таким образом раньше. Однако, если это не вызывает у вас проблем, то я полагаю, что это не проблема.
- Вы также должны добавить ключевую опору на свои Маркеры, чтобы вы подавили предупреждение, что оно отсутствует. Это должно быть что-то уникальное.