Frage

Es gibt eine anständige Menge an Fragen zu mysql räumlichen Datentypen gewesen, jedoch ist mein spezifischere, wie am besten mit ihnen in einem Rails-MVC-Architektur zu beschäftigen.

Ich habe ein Eingabeformular, wo ein Admin-Benutzer einen neuen Punkt von Interesse schaffen, sagen wir mal, ein Restaurant und Eingang einige Informationen. Sie können auch Eingang eine menschenlesbare geografische Breite und Länge im Dezimalformat.

Doch für Entfernungsberechnungen, etc ... Ich bin die Speicherung der Ortsdaten als räumlicher Punkt in der Datenbank.

Meine Frage ist also, wie man dies am besten in Schienen in der MVC-Architektur behandeln?

Hier sind einige Ideen, die ich hatte, aber nichts scheint wirklich sauber:

  • Call: after_filter Methode, die die neue Instanz des Objekts nimmt und macht ein rohes SQL-Update, das die "GeomFromText ( 'POINT (lat lang)'))" Güte behandelt. Das Problem dabei ist, dass „lat / long“ Textfelder in meiner schaffen Form sein würde, obwohl dies die saubere form_for stört: Objektarchitektur, die seit lat Schienen bietet / ist lange nicht wirklich Attribute, sie sind nur ein lassen menschliche Eingabewerte, die nicht mysql spatials sind.

  • Vielleicht einen Trigger in der db-Erstellung nach einer Reihe einfügen ausführen, die diese Zeile aktualisiert? Ich habe keine Ahnung, und es scheint nicht, wie diese Trigger Zugang zum lat / long haben würde, wenn ich die lat / long sowie den räumlichen Punkt gespeichert, und erstellt dann die Zeile in der DB mit der lat / long Dezimalzahlen und lief dann den Auslöser nach der Erstellung der räumlichen zu aktualisieren. Ich glaube, ich könnte auch tun, mit einem after_filter, wenn ich die lat / long Spalten zum Modell hinzugefügt.

Jede andere Ideen? Ich denke, die lat / long Speicherung überflüssig ist, da ich wirklich den Raumpunkt für Abstandsberechnungen verwenden werde, etc ... aber es könnte notwendig sein, wenn ich für die menschliche Bearbeitung ermöglicht werde.

War es hilfreich?

Lösung

Schauen Sie sich die Geokit-Schienen-Plugin für Rails die Entfernungsberechnungen tut mit Klar lat / lng Spalten als Schwimmer (und verwendet die Geokit gem). Wenn Sie jedoch, wie Sie Ihre Datenbank der geo-räumlichen Fähigkeiten zu nutzen, GeoRuby unterstützt die grundlegenden räumlichen Eigenschaften wie Punkt oder Linestring als Spaltentypen. Ich hoffe, dass diese Hilfe.

Andere Tipps

ich mit hoffnungslos zustimmen, Geokit schön ist, ich es auch nutzen.

Wenn Sie es selbst tun wollen, würde ich eine after_filter tun, aber die Update-Methode zu einem Thread externalisieren. Wie, dass Sie nicht über eine Verlangsamung beim Speichern, aber immer noch schön Code und zeitnah aktualisierten Spalten.

Trigger sind nicht schön, sollte die Datenbank Daten liefern, aber nicht Logik tun.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top