Как вы выполняете ГИС-запросы на Heroku, используя общую базу данных?

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

Есть несколько вариантов, которые я изучил:

  • Участие Postgresql в области защиты от земли, вероятно, ближе всего к моим потребностям; однако я не нашел никаких признаков того, что это установлено на сервере базы данных heroku.
  • PostGIS является наиболее часто назначаемым решением для ГИС, но у heroku его не установлено, и поддержка heroku подтвердила, что они не собираются делать это в ближайшем будущем.

Мне нужно решение, которое работает с Rails3.

Если нет лучших вариантов, мне нужно будет реализовать свою собственную функцию haversine, которая, похоже, изобретает велосипед. Есть лучшие варианты?

4 ответа

Я бы сейчас (июль 2011) рекомендовал использовать геокодер

gem 'geocoder'

http://www.rubygeocoder.com/

Вы также можете использовать geokit-rails3, как я упоминал ранее, но он не завершен и не поддерживается.

gem 'geokit-rails3'

http://github.com/jlecour/geokit-rails3

Geokit будет обрабатывать все вычисления расстояния, используя haversine, в базе данных. Также отлично работает с heroku и postgres. Настоятельно рекомендую.

Geokit Gem Rails Интеграция Geokit

весь код взят с github

class Location < ActiveRecord::Base
  acts_as_mappable :default_units => :miles, 
                   :default_formula => :sphere, 
                   :distance_field_name => :distance,
                   :lat_column_name => :lat,
                   :lng_column_name => :lng
end


Store.find :all, :bounds=>[sw_point,ne_point]

bounds=Bounds.from_point_and_radius(home,5)
stores=Store.find :all, :include=>[:reviews,:cities] :bounds=>bounds
stores.sort_by_distance_from(home)

Postgis в настоящее время доступен в бета-версии (март 2012 г.) https://addons.heroku.com/spacialdb

В Heroku (февраль 2013 г.) есть поддержка бета-уровня PostGIS. Полная информация доступна на их сайте (требуется регистрация): https://devcenter.heroku.com/articles/heroku-postgres-extensions-postgis-full-text-search

PostGIS:

добавляет поддержку географических объектов в объектно-реляционную базу данных PostgreSQL. По сути, PostGIS "пространственно включает" сервер PostgreSQL, позволяя использовать его в качестве внутренней пространственной базы данных для географических информационных систем (ГИС).

Поддержка PostGIS v1.5 на Heroku Postgres находится в бета-версии и может быть изменена в будущем.

Другие вопросы по тегам