Я пытаюсь создать маркеры полигонов на карте Google, преобразовывая строку, содержащую позиции lat/lng в массив. Я столкнулся с следующей ошибкой:
mc {message: "at index 0: not a LatLng or LatLngLiteral: in property lat: not a number", name: "InvalidValueError"
Когда я проверяю массив в консоли браузера, он выглядит отлично (index [0]):
lat:"12.3394541791301"
lng:"55.59020913559151"
Строка имеет следующую структуру:
'12.3394541791301,55.59020913559151, 12.3444451791347,55.5930451355941, 12.3808361791686,55.6099911356099,
Поэтому сначала я заменяю каждую вторую comma
;
Когда я использую split(";")
для создания моего массива, который i, когда цикл и нажимает на новый массив с правильными ключами:
s = s.replace(/([^,]+,[^,]+),/g,'$1;');
s = s.split(";");
for (var i = 0; i < s.length; i++) {
var lat = s[i].split(',')[0];
var lng = s[i].split(',')[1];
// Push to array which is used by Google Maps
denmarkLatLong.push({lat: lat, lng: lng})
}
Какие-либо предложения о том, что может вызвать проблему?
Я не уверен, что такое маркер полигона, но я подозреваю, что вы имели в виду marker
.
Если вы посмотрите на документацию latlng, значение для ключей lat
и lng
должно быть Number
not String
. Таким образом, чтобы исправить вашу проблему, вы можете использовать api Number(...)
для перевода string
координат в числа.
Пример:
s = s.replace(/([^,]+,[^,]+),/g,'$1;');
s = s.split(";");
for (var i = 0; i < s.length; i++) {
var lat = s[i].split(',')[0];
var lng = s[i].split(',')[1];
// Push to array which is used by Google Maps
denmarkLatLong.push({lat: Number(lat), lng: Number(lng) })
}
Рекомендации:
LatLng: https://developers.google.com/maps/documentation/javascript/examples/map-latlng-literal
Попробуйте сделать так:
Эти плюсы преобразуют ваши строковые значения lat, lng в числовые. Или попробуйте parseFloat()
denmarkLatLong.push({lat: +lat, lng: +lng})
ИЛИ ЖЕ
denmarkLatLong.push({lat: parseFloat(lat), lng: parseFloat(lng)})
Проблема в том, что у вас есть строки вместо чисел. Просто конвертируй, скажи, если это поможет.
lat:"12.3394541791301" // strings, convert to numbers
lng:"55.59020913559151"