Comments (4)
Everything looks right there as far as I can tell. Only thing I can think of is make sure the Postgrex types are set up. Do you get a similar error with st_distance
in your query? Also maybe check that you have the postgis extension installed in postgres.
from geo.
Hi @bryanjos, thank you for the quick reply. The postgis extension is installed and has been enabled for this database.
I verified this by using st_distance
iex(6)> (from r in subquery(query), select: %{distance: st_distance(r.line, ^home)}) |> Repo.all()
[debug] QUERY OK db=249.8ms
SELECT ST_Distance(s0."line",$1) FROM (SELECT DISTINCT ON (r0."code") r0."id" AS "id", r0."org" AS "org", r0."code" AS "code", r0."name" AS "name", r0."line" AS "line", r0."inserted_at" AS "inserted_at", r0."updated_at" AS "updated_at" FROM "routes" AS r0 ORDER BY r0."code", ST_Distance(r0."line",$2) LIMIT 5) AS s0 [%Geo.Point{coordinates: {78.3762, 17.4474}, srid: 4326}, %Geo.Point{coordinates: {78.3762, 17.4474}, srid: 4326}]
[%{distance: 1097.178381035}, %{distance: 182.273171646},
%{distance: 2809.06654445}, %{distance: 171.211571728},
%{distance: 4322.601294866}]
I have also have the Postgrex types setup using
# define custom postgres types
Postgrex.Types.define(StoreRoom.PostgresTypes,
[Geo.PostGIS.Extension] ++ Ecto.Adapters.Postgres.extensions(),
json: Poison)
I went ahead changed the above macro to the following, to check if issue is with "ST_ClosestPoint"
# custom macros
defmacro st_closestpoint(geometryA, geometryB) do
quote do: fragment("ST_Distance(?,?)", unquote(geometryA), unquote(geometryB))
end
Everything worked fine with the following query
iex(9)> (from r in subquery(query), select: %{distance1: st_distance(r.line, ^home), distance2: st_closestpoint(r.line, ^home)}) |> Repo.all()
[debug] QUERY OK db=59.6ms
SELECT ST_Distance(s0."line",$1), ST_Distance(s0."line",$2) FROM (SELECT DISTINCT ON (r0."code") r0."id" AS "id", r0."org" AS "org", r0."code" AS "code", r0."name" AS "name", r0."line" AS "line", r0."inserted_at" AS "inserted_at", r0."updated_at" AS "updated_at" FROM "routes" AS r0 ORDER BY r0."code", ST_Distance(r0."line",$3) LIMIT 5) AS s0 [%Geo.Point{coordinates: {78.3762, 17.4474}, srid: 4326}, %Geo.Point{coordinates: {78.3762, 17.4474}, srid: 4326}, %Geo.Point{coordinates: {78.3762, 17.4474}, srid: 4326}]
[%{distance1: 1097.178381035, distance2: 1097.178381035},
%{distance1: 182.273171646, distance2: 182.273171646},
%{distance1: 2809.06654445, distance2: 2809.06654445},
%{distance1: 171.211571728, distance2: 171.211571728},
%{distance1: 4322.601294866, distance2: 4322.601294866}]
I am unable to figure out the issue with "ST_ClosestPoint". I need to add a few other helper macros as well. Please point me in the right direction. Thanks in advance
from geo.
Sounds like maybe it could be that the function isn't defined in postgis. Try doing a normal sql query with that function and see if you get a similar error
from geo.
Hi @bryanjos,
I was using the type geography
while declaring schema for my tables. ST_ClosestPoint
only works with geometry
create table(:routes, primary_key: false) do
add :id, :binary_id, primary_key: true
add :org, :string
add :code, :string
add :name, :string
add :line, :geometry
timestamps()
end
Thanks Bryan.
from geo.
Related Issues (20)
- is .tool-versions necessary? HOT 1
- Support for `Feature` and `FeatureCollection` to Geo.JSON HOT 2
- Geo.WKB and raw binaries HOT 5
- GeoJSON default SRID not set HOT 1
- The new 'Feature' does not retain the SRID property when encoding
- Flatten GeometryCollection into non-complex geometries
- Add box2d type HOT 1
- Unable to decode WKB of MultiLineString with no coordinates
- ArgumentError in Geo.WKB.Encoder.do_encode/2(geo 3.4.2) HOT 2
- Multi Linestring with 'EMPTY' in the point throwing error HOT 2
- GeoJSON coordinates are not check nor converted to a numeric value
- Fix handling of GeoJSON Z and M coordinates
- Feature GeoJSON with Geometry object of type GeometryCollection is not supported HOT 1
- Feature object with null geometry is not supported
- Addition of Circle Geometry
- Move Ecto specific code to geo_ecto HOT 7
- Improve WKB and WKT encoder/decoder HOT 1
- Using geometry types with sqlite_ecto2 HOT 2
- Issue parsing geometry HOT 2
- Geo.JSON does not support PointZ HOT 6
Recommend Projects
-
React
A declarative, efficient, and flexible JavaScript library for building user interfaces.
-
Vue.js
🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.
-
Typescript
TypeScript is a superset of JavaScript that compiles to clean JavaScript output.
-
TensorFlow
An Open Source Machine Learning Framework for Everyone
-
Django
The Web framework for perfectionists with deadlines.
-
Laravel
A PHP framework for web artisans
-
D3
Bring data to life with SVG, Canvas and HTML. 📊📈🎉
-
Recommend Topics
-
javascript
JavaScript (JS) is a lightweight interpreted programming language with first-class functions.
-
web
Some thing interesting about web. New door for the world.
-
server
A server is a program made to process requests and deliver data to clients.
-
Machine learning
Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.
-
Visualization
Some thing interesting about visualization, use data art
-
Game
Some thing interesting about game, make everyone happy.
Recommend Org
-
Facebook
We are working to build community through open source technology. NB: members must have two-factor auth.
-
Microsoft
Open source projects and samples from Microsoft.
-
Google
Google ❤️ Open Source for everyone.
-
Alibaba
Alibaba Open Source for everyone
-
D3
Data-Driven Documents codes.
-
Tencent
China tencent open source team.
from geo.