Αντίστροφη ερώτημα μια θέση στο Rails-Geocoder με μέγιστο χαρακτηριστικό απόσταση

ψήφοι
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 

Έχω ψάξει στο Geocoder & τεκμηρίωση στολίδι Geo-Kit, αλλά δεν βρέθηκε καμία λειτουργικότητα έτσι.

Αν στολίδι όχι πάνω από υποστήριξε τη λειτουργικότητα, μπορεί κανείς να προτείνει μια άλλη μέθοδο που μπορεί να λύσει το πρόβλημα;

Ευχαριστώ

Δημοσιεύθηκε 20/01/2018 στις 12:53
πηγή χρήστη
Σε άλλες γλώσσες...                            


3 απαντήσεις

ψήφοι
0

Νομίζω ότι nearοι λειτουργίες της Geocoder μπορεί να ικανοποιήσει τις ανάγκες σας.

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

Έγγραφο Geocoder αναφέρονται σε αυτή τη λειτουργία: 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 / αρχικοποιήσεις / 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