简介
数据格式
Abbr | Fullname | Description |
---|---|---|
WKT |
Well Known Text |
空间数据的文本 标识 |
WKB |
Well Known Binary |
空间数据的二进制 标识 |
GeoJSON |
GeoJSON | 基于Javascript对象表示法的地理空间信息数据交换格式GeoJSON |
Elixir 的 Geo 库提供了上述三种格式的相互转换函数.
配置
添加依赖
@H_404_62@defp deps do [{:geo,"~> 1.0"}] end配置扩展
@H_404_62@config :electric_proto,ElectricProto.Repo,adapter: Ecto.Adapters.Postgres,# loggers: [],# loggers: [{Ecto.LogEntry,:log,[:info]}],url: "postgres://postgres:root@localhost/geometry_db",extensions: [{Geo.PostGIS.Extension,library: Geo}]创建/删除扩展的移植脚本
@H_404_62@$ mix ecto.gen.migration enable_postgis * creating priv/repo/migrations * creating priv/repo/migrations/20160706021353_enable_postgis.exs脚本内容
@H_404_62@defmodule GeometryDb.Repo.Migrations.EnablePostgis do use Ecto.Migration def up do execute "CREATE EXTENSION IF NOT EXISTS postgis" end def down do execute "DROP EXTENSION IF EXISTS postgis" end end执行移植
@H_404_62@mix ecto.migrate -r GeometryDb.Repo插入数据
@H_404_62@defmodule ElectricProto.Model.Contrail do @moduledoc """ 轨迹点 """ use ElectricProto.Model alias Ecto.DateTime,as: EctoDateTime alias Geo.Point @primary_key {:id,:id,autogenerate: true} schema "contrail" do field :station_id,:string field :electromobile_id,:string field :timestamp,EctoDateTime field :coordinates,Point timestamps end @spec insert(map) :: {:ok,Schema.t} | {:error,Changeset.t} def insert(map) do Map.merge(%__MODULE__{},map) |> Repo.insert end def get(id) do Repo.get(__MODULE__,id) end def test_insert do row = %{ station_id: "FC-R55M560100003",timestamp: EctoDateTime.from_erl({{2016,07,06},{13,34,30}}),electromobile_id: "粤A12345",coordinates: %Geo.Point{coordinates: {49.44,17.87}} } insert(row) end @doc """ 获取经纬度 http://lbs.qq.com/tool/getpoint/index.html """ def test_insert2 do t = DateTime.utc_now row = %{ station_id: "FC-R55M560100003",timestamp: EctoDateTime.from_erl({{t.year,t.month,t.day},{t.hour,t.minute,t.second}}),coordinates: Geo.WKT.decode("POINT(29.608279 106.500773)") } insert(row) end def test_get do get 1 end end查询
联系如何查询GEO字段
例子: 查询运动轨迹
例子: 在地图上绘制轨迹
通过前一个例子查询到的坐标点的集合,可以调用地图API绘制一条线路,这条线路就是目标的运动轨迹.
使用案例
汽车跟踪防盗
船舶跟踪