Încercat să folosească bijuterie geocoder pentru a găsi locații utilizând metoda geocoders aproape de a găsi anumite locații în apropiere de anumite puncte.
def index
@data = Datum.all
@emergency = Emergency.last
@data_near = Datum.near([@emergency.longitude,@emergency.latitude],100,:units => :km)
@geojson = Array.new
@data_near.each do |mapdata|
@geojson << {
type: 'Feature',
geometry: {
type: 'Point',
coordinates: [mapdata.longitude, mapdata.latitude]
},
properties: {
name: mapdata.description,
address: mapdata.address,
BusType: 'hospital',
popupContent: #{mapdata.address} is a #{mapdata.description},
:'marker-color' => '#00607d',
:'marker-symbol' => 'circle',
:'marker-size' => 'medium'
}
}
end
respond_to do |format|
format.html
format.json{ render json: @geojson }
end
Sfârşit
Acesta este codul am încercat să ruleze, returnează un array gol chiar și atunci când aprop în parametrii specificați sunt prezenți. Când încerc să rulați codul direct în consola cu șine points.eg reale.
data = Datum.near([36.7689503,-1.381776],10,:units => :km)
Nu primesc nici o eroare generată, dar de ieșire I a lua este mai mică decât poate fi citit sau comprehensible.The de ieșire este:
Datum Load (0.3ms) SELECT data.*, (111.19492664455873 * ABS(data.latitude - 36.7689503) * 0.7071067811865475) + (96.29763124613503 * ABS(data.longitude - -1.381776) * 0.7071067811865475) AS distance, CASE WHEN (data.latitude >= 36.7689503 AND data.longitude >= -1.381776) THEN 45.0 WHEN (data.latitude < 36.7689503 AND data.longitude >= -1.381776) THEN 135.0 WHEN (data.latitude < 36.7689503 AND data.longitude < -1.381776) THEN 225.0 WHEN (data.latitude >= 36.7689503 AND data.longitude < -1.381776) THEN 315.0 END AS bearing FROM data WHERE (data.latitude BETWEEN 36.67901813940813 AND 36.85888246059187 AND data.longitude BETWEEN -1.4940430256783075 AND -1.2695089743216923) ORDER BY distance ASC LIMIT ? [[LIMIT, 11]]
=> #<ActiveRecord::Relation []>
Orice ajutor va fi foarte apreciat.













