gis on rails

31
GIS on Rails Сергій Тятін Full-stack web developer

Upload: pivorak-meetup

Post on 15-Feb-2017

292 views

Category:

Software


0 download

TRANSCRIPT

Page 1: GIS on Rails

GIS on RailsСергій Тятін Full-stack web developer

Page 2: GIS on Rails

GIS1. Трохи теорії 2. Інструменти 3. PostGiS SQL

Page 3: GIS on Rails

Geoid

Page 4: GIS on Rails

Datum WGS 84

Датум (лат. Datum) — набір параметрів, які використовуються для зміщення і

трансформації референц-еліпсоїду в локальні географічні координати.

Page 5: GIS on Rails

Mercator projection

Page 6: GIS on Rails

SRID Spatial Reference System Identifier

SRID=4326;POINT(24.0267731 49.8386644)

SRID=3785;POINT(2674648.14689752 6418382.09688131)

Page 7: GIS on Rails

Інструменти• PostGIS (http://postgis.net/) • gem ‘rgeo’ • gem 'activerecord-postgis-adapter’

Page 8: GIS on Rails

PostGIS• Geometry, Geography functions • Data types: POINT, LINESTRING, POLYGON, CURVE ..

Page 9: GIS on Rails

gem ‘rgeo’

• репрезентація данних • базові функції

Page 10: GIS on Rails

gem ‘activerecord-postgis-adapter’

The activerecord-postgis-adapter provides access to features of the PostGIS geospatial database from

ActiveRecord

Page 11: GIS on Rails

Історія створення стартапа для car-pooling

Page 12: GIS on Rails

Як працюєДошка оголошень

Маршрути водіів

Запити пасажирів

Матчінг

Page 13: GIS on Rails

Запис маршрута водія

Page 14: GIS on Rails

GPS locations

Page 15: GIS on Rails

geometry ST_MakeLine(geometry set geoms)

Page 16: GIS on Rails

Алгоритм Рамера — Дугласа — Пекера

Page 17: GIS on Rails

geometry ST_Simplify(geometry geomA, float tolerance);

Page 18: GIS on Rails

Порівняння маршрутів

• Мають починатися і закінчуватись поряд • Мають проходити поряд

Page 19: GIS on Rails

boolean ST_DWithin(geography gg1, geography gg2, double precision

distance_meters);

Page 20: GIS on Rails

Мають починатися і закінчуватись поряд

SELECT FROM routes WHERE ST_DWithin( ?, routes.start, 500) AND ST_DWithin( ?, routes.end, 500)

Page 21: GIS on Rails

Мають проходити поряд

Page 22: GIS on Rails

Відстань Гаусдорфа

Page 23: GIS on Rails

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

Page 24: GIS on Rails
Page 25: GIS on Rails

Знайти маршрути для пассажира

start

finish

• Місце зустрічі/виходу близько • Де найкраще зустрітись/вийти • Напрямок має значення

Page 26: GIS on Rails

Місце зустрічі/виходу близько

SELECT FROM routes WHERE ST_DWithin(routes.route, ?, 500 ) AND ST_DWithin(routes.route, ?, 500 )

Page 27: GIS on Rails

Де найкраще зустрітись/вийти

Найближча точка

geometry ST_ClosestPoint(geometry g1, geometry g2);

Page 28: GIS on Rails

Де найкраще зустрітись/вийти

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 )

Page 29: GIS on Rails

Напрямок має значенняМаємо вибрати тільки ті маршрути які йдуть від

точки старт до точки фініш

float ST_LineLocatePoint(geometry a_linestring, geometry a_point);

Повертає значення між 0 та 1 яке визначає положення найближчої точки на лінії до заданої

точки

Page 30: GIS on Rails

Напрямок має значення

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 )

Page 31: GIS on Rails

Дякую за увагу

Сергій Тятін [email protected] skype: tyatin

DRIDER.IO