SlideShare a Scribd company logo
GIS on Rails
Сергій Тятін Full-stack web developer
GIS
1. Трохи теорії
2. Інструменти
3. PostGiS SQL
Geoid
Datum WGS 84
Датум (лат. Datum) — набір параметрів, які
використовуються для зміщення і
трансформації референц-еліпсоїду в
локальні географічні координати.
Mercator projection
SRID
Spatial Reference System Identifier
SRID=4326;POINT(24.0267731
49.8386644)
SRID=3785;POINT(2674648.14689752
6418382.09688131)
Інструменти
• PostGIS (http://postgis.net/)
• gem ‘rgeo’
• gem 'activerecord-postgis-adapter’
PostGIS
• Geometry, Geography functions
• Data types: POINT, LINESTRING, POLYGON, CURVE ..
gem ‘rgeo’
• репрезентація данних
• базові функції
gem ‘activerecord-postgis-
adapter’
The activerecord-postgis-adapter provides access to
features of the PostGIS geospatial database from
ActiveRecord
Історія створення стартапа для
car-pooling
Як працює
Дошка оголошень
Маршрути водіів
Запити пасажирів
Матчінг
Запис маршрута водія
GPS locations
geometry ST_MakeLine(geometry
set geoms)
Алгоритм Рамера —
Дугласа — Пекера
geometry ST_Simplify(geometry
geomA, float tolerance);
Порівняння маршрутів
• Мають починатися і закінчуватись поряд
• Мають проходити поряд
boolean ST_DWithin(geography gg1,
geography gg2, double precision
distance_meters);
Мають починатися і
закінчуватись поряд
SELECT
FROM routes WHERE
ST_DWithin( ?, routes.start, 500)
AND
ST_DWithin( ?, routes.end, 500)
Мають проходити поряд
Відстань Гаусдорфа
float ST_HausdorffDistance(geometry
g1, geometry g2);
SELECT * FROM (
SELECT ST_HausdorffDistance(routes.route, ? )
as distance, …
FROM routes WHERE
ST_DWithin( ?, routes.start, 500)
AND
ST_DWithin( ?, routes.end, 500)
) ORDER BY distance ASC LIMIT 1
GIS on Rails
Знайти маршрути для
пассажира
start
finish
• Місце зустрічі/виходу близько
• Де найкраще зустрітись/вийти
• Напрямок має значення
Місце зустрічі/виходу
близько
SELECT
FROM routes
WHERE
ST_DWithin(routes.route, ?, 500 )
AND

ST_DWithin(routes.route, ?, 500 )
Де найкраще зустрітись/вийти
Найближча точка
geometry ST_ClosestPoint(geometry g1, geometry g2);
Де найкраще зустрітись/
вийти
SELECT
ST_ClosestPoint(route, ?) as pickup_location,

ST_ClosestPoint(route, ?) as drop_location,
FROM routes
WHERE
ST_DWithin(routes.route, ?, 500 )
AND

ST_DWithin(routes.route, ?, 500 )
Напрямок має значення
Маємо вибрати тільки ті маршрути які йдуть від
точки старт до точки фініш
float ST_LineLocatePoint(geometry a_linestring,
geometry a_point);
Повертає значення між 0 та 1 яке визначає
положення найближчої точки на лінії до заданої
точки
Напрямок має значення
SELECT
ST_LineLocatePoint(route, ?) as pickup_float,

ST_LineLocatePoint(route, ?) as drop_float,
ST_ClosestPoint(route, ?) as pickup_location,

ST_ClosestPoint(route, ?) as drop_location,
FROM routes
WHERE
ST_DWithin(routes.route, ?, 500 )
AND

ST_DWithin(routes.route, ?, 500 )
Дякую за увагу
Сергій Тятін
700@2rba.com
skype: tyatin
DRIDER.IO

More Related Content

PDF
Gis On Rails
PDF
Lightweight APIs in mRuby
PDF
Overcommit for #pivorak
PDF
Building Web-API without Rails, Registration or SMS
PDF
From Rails legacy to DDD - Pivorak, Lviv
PDF
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
PDF
"Ruby meets Event Sourcing" by Anton Paisov
PDF
UDD: building polyglot anti-framework by Marek Piasecki
Gis On Rails
Lightweight APIs in mRuby
Overcommit for #pivorak
Building Web-API without Rails, Registration or SMS
From Rails legacy to DDD - Pivorak, Lviv
Detective story of one clever user - Lightning Talk By Sergiy Kukunin
"Ruby meets Event Sourcing" by Anton Paisov
UDD: building polyglot anti-framework by Marek Piasecki

Viewers also liked (20)

PDF
Trailblazer Introduction by Nick Sutterer
PPTX
Building Component Based Rails Applications. Part 2.
PDF
Functional Immutable CSS
PDF
The Silver Bullet Syndrome by Alexey Vasiliev
PDF
Espec |> Elixir BDD
PPT
Digital Nomading on Rails
PDF
"5 skills to master" by Alexander Skakunov
PPTX
Building component based rails applications. part 1.
PPTX
Права інтелектуальної власності в IT сфері.
PDF
Pivorak Clojure by Dmytro Bignyak
PDF
Andriy Vandakurov about "Frontend. Global domination"
PDF
“Object Oriented Ruby” by Michał Papis.
PDF
"Meet rom_rb & dry_rb" by Piotr Solnica
PDF
Pivorak How to write better sentences in English
PPTX
Elastic pivorak
PDF
HTML Canvas tips & tricks - Lightning Talk by Roman Rodych
PPTX
Broker: adventure through architecture pattern
PDF
Ramda lets write declarative js
PDF
Flowex - Railway Flow-Based Programming with Elixir GenStage.
PDF
Linux Tracing Superpowers by Eugene Pirogov
Trailblazer Introduction by Nick Sutterer
Building Component Based Rails Applications. Part 2.
Functional Immutable CSS
The Silver Bullet Syndrome by Alexey Vasiliev
Espec |> Elixir BDD
Digital Nomading on Rails
"5 skills to master" by Alexander Skakunov
Building component based rails applications. part 1.
Права інтелектуальної власності в IT сфері.
Pivorak Clojure by Dmytro Bignyak
Andriy Vandakurov about "Frontend. Global domination"
“Object Oriented Ruby” by Michał Papis.
"Meet rom_rb & dry_rb" by Piotr Solnica
Pivorak How to write better sentences in English
Elastic pivorak
HTML Canvas tips & tricks - Lightning Talk by Roman Rodych
Broker: adventure through architecture pattern
Ramda lets write declarative js
Flowex - Railway Flow-Based Programming with Elixir GenStage.
Linux Tracing Superpowers by Eugene Pirogov
Ad

More from Pivorak MeetUp (18)

PDF
Lisp(Lots of Irritating Superfluous Parentheses)
PDF
Some strange stories about mocks.
PDF
Business-friendly library for inter-service communication
PDF
How i was a team leader once
PDF
Rails MVC by Sergiy Koshovyi
PDF
Introduction to Rails by Evgeniy Hinyuk
PPTX
Ruby OOP (in Ukrainian)
PDF
Testing in Ruby
PDF
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
PDF
The Saga Pattern: 2 years later by Robert Pankowecki
PDF
Data and Bounded Contexts by Volodymyr Byno
PDF
Successful Remote Development by Alex Rozumii
PDF
Origins of Elixir programming language
PDF
Multi language FBP with Flowex by Anton Mishchuk
PDF
CryptoParty: Introduction by Olexii Markovets
PDF
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
PDF
GIS on Rails by Oleksandr Kychun
PDF
Unikernels - Keep It Simple to the Bare Metal
Lisp(Lots of Irritating Superfluous Parentheses)
Some strange stories about mocks.
Business-friendly library for inter-service communication
How i was a team leader once
Rails MVC by Sergiy Koshovyi
Introduction to Rails by Evgeniy Hinyuk
Ruby OOP (in Ukrainian)
Testing in Ruby
Ruby Summer Course by #pivorak & OnApp - OOP Basics in Ruby
The Saga Pattern: 2 years later by Robert Pankowecki
Data and Bounded Contexts by Volodymyr Byno
Successful Remote Development by Alex Rozumii
Origins of Elixir programming language
Multi language FBP with Flowex by Anton Mishchuk
CryptoParty: Introduction by Olexii Markovets
How to make first million by 30 (or not, but tryin') - by Marek Piasecki
GIS on Rails by Oleksandr Kychun
Unikernels - Keep It Simple to the Bare Metal
Ad

GIS on Rails