अधिकतम दूरी विशेषता के साथ क्वेरी रेल-जियोकोडर में एक स्थान रिवर्स

वोट
1

एक उदाहरण के लिए, मैं इस तरह एक मॉडल है

class Place < ActiveRecord::Base
    # has a latitude & longitude field
    # notice it has max_distance field (meter), will be different on each record
end

मैं एक प्रश्न है कि एक बिंदु का समन्वय दिया कैसे प्राप्त कर सकते, दूरी के बीच समन्वय बिंदु और MAX_DISTANCE क्षेत्र सीमा में भीतर सभी स्थानों मिल जाएगा।

lat = 37.792
lng = -122.393

Place.query_in_range_by_point([lat, lng])
# will get nearest places within range max_distance field 

मैं जियोकोडर और भू-किट मणि दस्तावेज में तलाश कर दिया गया है, लेकिन इस तरह किसी भी कार्यक्षमता नहीं मिला।

मणि कार्यक्षमता समर्थित नहीं ऊपर हैं, तो किसी को भी एक और तरीका है कि समस्या का समाधान कर सकते हैं सुझाव है कि कर सकते हैं?

धन्यवाद

20/01/2018 को 12:53
का स्रोत उपयोगकर्ता
अन्य भाषाओं में...                            


3 जवाब

वोट
0

मुझे लगता है कि nearजियोकोडर के कार्यों आपके आवश्यकता को पूरा कर सकते हैं।

class Place < ActiveRecord::Base
  def self.query_in_range_by_point(lat, lng)
    self.near([lat, lng], self.max_distance)
  end
end

जियोकोडर दस्तावेज़ इस समारोह का संदर्भ लें: https://github.com/alexreisner/geocoder#for-activerecord-models

20/01/2018 को 13:29
का स्रोत उपयोगकर्ता

वोट
0

खेद है कि मैं एक जवाब के रूप में इस पोस्टिंग कर रहा हूँ, लेकिन स्वरूपण बंद होने पर टिप्पणी अनुभाग में कोड नमूने पोस्टिंग।

....

जगह से, मैं होने का अर्थ यह latitude, longitude, max_distanceगुण, ऐसा है, तो है क्योंकि, तो आप केवल आवश्यकता हो सकती है

class Place < AR::Base
  ...
  def nearby_places
    Place.where.not(id: id).near([latitude, longitude], max_distance)
  end
  ...
end

इन आसपास के स्थानों तक पहुंचने के लिए, बस कार्य करें:

place = Place.first
nearby_places = place.nearby_places
20/01/2018 को 14:30
का स्रोत उपयोगकर्ता

वोट
1

मुझे लगता है कि निम्नलिखित पैच समस्या का समाधान कर सकते हैं।

निम्न फ़ाइल config / initializers / geokit_rails_patch.rb बनाएं

module Geokit::ActsAsMappable
  module ClassMethods
    def query_in_range_by_point(options = {})
      sql = build_distance_sql(options)

      where("#{sql} <= #{table_name}.max_distance")
    end

    private

    def build_distance_sql(options)
      origin = extract_origin_from_options(options)
      units = extract_units_from_options(options)
      formula = extract_formula_from_options(options)

      distance_sql(origin, units, formula)
    end
  end
end

तो फिर तुम जैसे क्वेरी कर सकता है

Place.query_in_range_by_point(origin: [-23.5062855, -55.0919171])

28/02/2018 को 20:44
का स्रोत उपयोगकर्ता

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more