Структура базы данных для приложения с функциями геокодирования, использующими геокит - PullRequest
0 голосов
/ 15 июня 2010

Я занимаюсь разработкой веб-каталога по недвижимости и хочу геокодировать каждое объявление, используя geokit gem.Мой вопрос заключается в том, какой будет наилучший макет базы данных с точки зрения производительности, если я хочу выполнить поиск по стране, городу выбранной страны, административному району или ближайшей станции метро выбранного города.Доступные страны, города, административные зоны и метрополитены должны быть определены администратором каталога и должны быть подтверждены геокодированием.

Я придумал одну таблицу:

  create_table "geo_locations", :force => true do |t|
    t.integer "geo_location_id"                     #parent geo location (ex. country is parent geo location of city  
    t.string  "country",             :null => false #necessary for any geo location
    t.string  "city",                               #not null for city geo location and it's children
    t.string  "administrative_area"                 #not null for administrative_area geo location and it's children
    t.string  "thoroughfare_name"                   #not null for metro station or street name geo location and it's children
    t.string  "premise_number"                      #house number
    t.float   "lng",                 :null => false 
    t.float   "lat",                 :null => false
    t.float   "bound_sw_lat",        :null => false
    t.float   "bound_sw_lng",        :null => false
    t.float   "bound_ne_lat",        :null => false
    t.float   "bound_ne_lng",        :null => false
    t.integer "mappable_id"
    t.string  "mappable_type"
    t.string  "type"                                #country, city, administrative area, metro station or address 
  end

Окончательное географическое местоположениеЭто адрес, который содержит всю необходимую информацию для размещения маркера объявления о недвижимости на карте.Но я все еще застрял в поиске.

Любая помощь будет высоко ценится.

1 Ответ

1 голос
/ 15 июня 2010

Возможно, вы захотите взглянуть на Thinking Sphinx, в него встроена поддержка гео-поиска. Вот как я это делаю:

class Company < ActiveRecord::Base
    define_index do
        indexes :name, :sortable => true
        has 'RADIANS(lat)',  :as => :latitude,  :type => :float
        has 'RADIANS(lng)', :as => :longitude, :type => :float
    end
end
# Searching for companies, sort by closest first
Company.search "bananas", :geo => [lat, lng], :order => "@geodist ASC, @relevance DESC"
...