Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/symfony/6.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Postgis 如何使用Geo库创建有效的Ecto模型变更集?_Postgis_Elixir_Phoenix Framework_Ecto - Fatal编程技术网

Postgis 如何使用Geo库创建有效的Ecto模型变更集?

Postgis 如何使用Geo库创建有效的Ecto模型变更集?,postgis,elixir,phoenix-framework,ecto,Postgis,Elixir,Phoenix Framework,Ecto,我试图通过Phoenix模型变更集使用库来存储Geo.Point。我的参数是:{coordinates:[49.44,17.87]}或者更喜欢的参数是{coordinates:{纬度:49.44,经度:17.87} 在iex控制台中,我尝试了: iex(5)> changeset = Place.changeset(%Place{}, %{coordinates: [49.44, 17.87]}) %Ecto.Changeset{action: nil, changes: %{}, con

我试图通过Phoenix模型变更集使用库来存储Geo.Point。我的参数是:
{coordinates:[49.44,17.87]}
或者更喜欢的参数是
{coordinates:{纬度:49.44,经度:17.87}

在iex控制台中,我尝试了:

iex(5)> changeset = Place.changeset(%Place{}, %{coordinates: [49.44, 17.87]})
%Ecto.Changeset{action: nil, changes: %{}, constraints: [],
 errors: [coordinates: "is invalid"], filters: %{}
 model: %Myapp.Place{__meta__: #Ecto.Schema.Metadata<:built>,
  coordinates: nil, id: nil, inserted_at: nil, updated_at: nil}, optional: [],
 opts: [], params: %{"coordinates" => [49.445614899999995, 17.875574099999998]},
 repo: nil, required: [:coordinates],

根据库的测试:

您需要传递地理信息。指向您的变更集函数:

changeset = Place.changeset(%Place{}, %{coordinates: %Geo.Point{coordinates: {49.44, 17.87}})

你可以在[文档]中阅读更多关于自定义ecto类型的信息。(

为了将来的读者,还有一个由同一作者编写的基于
geo
,它是postgrex的扩展,与ecto一起工作。

你能告诉我如何绘制
{坐标:{纬度:49.44,经度:17.87}
以正确的格式将
纬度
经度
提取到
%Geo.Point{}
%Geo.Point(坐标:{get_in(coords_-map.coordinates.latitude),get_in(coords_-map.coordinates.longitude)}当我有更多参数时,如
coords_-map={name:“test”,坐标:{纬度:49.44,经度:17.87}
我想把%Geo.Point连接到坐标参数,这是一种简单的方法吗?
coords\u map=map.coordinates
然后
%Geo.Point(坐标:{get\u in(coords\u map.latitude),get\u in(coords\u map.longitute)}
@luzny您可以对参数进行模式匹配。
def create(conn,%%{“notify”=>{coordinates”=>%{longitute”=>经度,“纬度”=>纬度}}=notify_params)
如果这没有意义或无法解决您的问题,请创建一个新问题,更清楚地解释您的问题。
changeset = Place.changeset(%Place{}, %{coordinates: %Geo.Point{coordinates: {49.44, 17.87}})