Wie man umwandelt Geo.Point
Koordinatenattribut enthält %Geo.Point{coordinates: {49.44, 17.87}, srid: nil}
nach Geo.JSON.encode
: %{"coordinates" => [49.44, 17.87], "type" => "Point"}
Zur folgenden Formel:
%{latitude: latitude, longitude: longitude}
Dies ist meine derzeitige Methode, wie man es in einem Schritt macht?
%{"coordinates" => [latitude,longitude] } = Geo.JSON.encode(place.coordinates)
coordinates = %{latitude: latitude, longitude: longitude}
Wie man es in die Instanzmethode einfügt, so dass es nach einem Anruf z.B. eine neue Formel zurückgibt place.to_lat_lng
?
defmodule MyApp.Place do
use MyApp.Web, :model
schema "place" do
field :coordinates, Geo.Point
timestamps
end
def to_lat_lng do
#...format coordinates
end
end
Antworten:
1 für die Antwort № 1Sie müssen nicht JSON encodieren. Sie können den Geo.Point als Argument an eine Funktion übergeben. Ich würde etwas tun wie:
def to_lat_lng(%Geo.Point{coordinates: {lat, long}}) do
%{latitude: lat, longitude: long}
end
Bitte beachten Sie, dass dies keine Instanzmethode ist. Es ist einfach eine Funktion. einige andere Terminologie Dinge, die Sie wissen sollten, wie es Ihnen mit der Dokumentation helfen kann: Im Elixier haben wir eine Liste, kein Array. Wir benutzen auch eine Karte oder ein Diktat http://elixir-lang.org/getting-started/maps-and-dicts.html