API геокодирования Карт Google - обработка лат / лнг ввода от пользователя - PullRequest
1 голос
/ 14 февраля 2012

Я использую API версии 3, и у меня есть текстовый ввод, который пользователь вводит в строку поиска, которая используется для геокодирования через API.Карта обновится, и в результате совпадения появится маркер.Это все работает отлично, за исключением нескольких случаев.Вот код:

geocoder.geocode({
    'address': address,
    region: 'AU'
}, function(results, status) {
    // do stuff with results
}

Проблема в том, где пользователь вводит пару широта / долгота, например, 22°53'21"S, 118°28'36"E.Когда координаты попадают в сельскую местность, возвращаемое совпадение не является точным представлением введенных координат, а представляется центром сопоставляемой местности от Google.Например, результат -22.4951839, 118.73455850000005.Т.е. маркер смещен относительно того, что ввел пользователь.

Итак, как я могу предотвратить сопоставление / центрирование этого местоположения в тех случаях, когда пользователи вводят широту / долготу?В этих случаях я хочу, чтобы маркер был помещен в широту / долготу для проанализированных координат, а не в центр сопоставленной местности (но я хочу продолжать использовать API, поскольку он обрабатывает / анализирует все различные форматы широты и ширинытакже храните информацию о местонахождении / адресе).

Ответы [ 3 ]

1 голос
/ 15 февраля 2012

Я столкнулся с подобной проблемой. Если вы решили написать свой собственный код синтаксического анализа, то, если у вас есть только буквенные символы NSEWnsew, то, скорее всего, пользователь ввел координаты.

Затем вы можете изменить все не числа на пробелы и проанализировать строку: 6 цифр означает, что у вас есть градусы, минуты, секунды 4 цифры означают, что у вас есть градусы, десятичные минуты 2 цифры означают, что у вас есть десятичные градусы

Единственная другая проблема заключается в обработке символов: NSEW + -

1 голос
/ 14 февраля 2012

Вы можете сделать сопоставление с образцом в поле ввода, проверить числа плюс знаки препинания и °.Если он совпадает, преобразуйте в десятичную широту / долготу и создайте маркер, в противном случае выполните геокодер.

0 голосов
/ 21 января 2016

Мне пришлось вернуться к этой проблеме сегодня, и я нашел библиотеку JS, которая довольно неплохо справилась с анализом пользовательского ввода для координат (десятичных и DMS):

http://dbarbalato.github.io/magellan/

Будет обрабатывать только lat и lng отдельно - поэтому мне пришлось сделать split(',') на входе.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...