Как вы выполняете ГИС-запросы на Heroku, используя общую базу данных?
У меня есть таблица геокодированных мест с широтой и долготой. Я бы хотел, чтобы мой запрос к базе данных возвращал отфильтрованный список, упорядоченный по расстоянию от фиксированной точки.
Есть несколько вариантов, которые я изучил:
- Участие Postgresql в области защиты от земли, вероятно, ближе всего к моим потребностям; однако я не нашел никаких признаков того, что это установлено на сервере базы данных heroku.
- PostGIS является наиболее часто назначаемым решением для ГИС, но у heroku его не установлено, и поддержка heroku подтвердила, что они не собираются делать это в ближайшем будущем.
Мне нужно решение, которое работает с Rails3.
Если нет лучших вариантов, мне нужно будет реализовать свою собственную функцию haversine, которая, похоже, изобретает велосипед. Есть лучшие варианты?
4 ответа
Я бы сейчас (июль 2011) рекомендовал использовать геокодер
gem 'geocoder'
Вы также можете использовать geokit-rails3, как я упоминал ранее, но он не завершен и не поддерживается.
gem '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 находится в бета-версии и может быть изменена в будущем.