Способ позволить пользователю искать по GPS

Я создаю приложение на движке приложений Google с помощью Python, и у меня есть объект Location со свойством GPS. Это свойство хранится в виде строки (хотя я мог бы изменить это, если нужно), и я хочу, чтобы пользователь ввел местоположение, и чтобы моя программа возвращала все сайты в пределах 5 точек широты или долготы.

У меня есть следующий код, который дает мне местоположение в GPS, которое ищет пользователь, но я не уверен, что я могу сделать оттуда и как я могу выполнить запрос для всех местоположений GPS в пределах моих границ.

class Map(BlogHandler):
    def get(self):
        #do some stuff here
    def post(self):
        inputlocation = self.request.get("q")

        #this returns the GPS location that the user searched for
        g = geocoders.Google()
        place, (lat, lng) = g.geocode(inputlocation)

        #I would like to be able to do something like this         
        bound = 5
        upper = GPSlocation + bound
        lower = GPSlocation - bound
        left = GPSlocation + bound
        right = GPSlocation - bound

locations = db.GqlQuery("select * from Location where GPSlocation.lat<:1 and where GPSlocation.lat>:2 and where GPSlocation.long <:3 and where GPSlocation.long >:4 order by created desc limit 20", upper, lower, left, right)

        self.render('map.html', locations=locations, centerlocation=GPSlocation)

person clifgray    schedule 12.10.2012    source источник


Ответы (2)


поиск по 5 points довольно прост, так как это просто квадратная область:

select ...
where (GPSlocation.lat BETWEEN (:1 - 5) AND (:2 + 5))
   and (GPSlocation.long BETWEEN (:3 - 5) AND (:4 + 5))

если бы вы нацеливались на круговую границу, вам пришлось бы немного больше заниматься математикой.

обратите внимание, что ваше условие where в вашем собственном запросе недопустимо и вызовет синтаксическую ошибку. ГДЕ синтаксис

WHERE (condition) AND (condition) ...

нет

WHERE (condition) AND WHERE (condition) ...
                      ^^^^^---syntax error
person Marc B    schedule 12.10.2012
comment
у вас есть идеи, работает ли это с GQL или только с SQL-запросами? - person clifgray; 12.10.2012
comment
Хм. хорошая точка зрения. без понятия, на самом деле. хотя было бы глупо создавать синтаксис, который очень близок к sql, а затем иметь достаточно отсутствующих/разных битов, подобных этому... - person Marc B; 12.10.2012
comment
да, я согласен, хотя у них есть много небольших различий, и ваш метод не совсем работает, хотя я надеялся. сейчас отлаживаю - person clifgray; 12.10.2012

Проблема с вашим текущим кодом - это граничные случаи. Во-первых, у вас есть нулевой меридиан, где ваша долгота идет от 0 до 360. Затем у вас есть полюса, где широта не поднимается выше 90 или ниже -90. Это, вероятно, меньше беспокоит (поскольку они там, где никто не живет), но вам нужно решать это в каждом конкретном случае. Долгота и главный меридиан помогут вам, если вам нужны места рядом с ними.

person Michael    schedule 12.10.2012