92
Александр Сапожников Южно-Уральский государственный университет OpenStreetMap OpenStreetMap на вашем сайте на вашем сайте UWDC 2013

OpenStreetMap на вашем сайте

Embed Size (px)

DESCRIPTION

Презентация к докладу на UWDC-2013 — Уральской конференции веб-разработчиков (20-21 февраля 2013, Челябинск)

Citation preview

Page 1: OpenStreetMap на вашем сайте

Александр Сапожников

Южно-Уральский государственный университет

OpenStreetMapOpenStreetMap на вашем сайтена вашем сайте

UWDC 2013

Page 2: OpenStreetMap на вашем сайте

На прошлых конференциях— Google Maps

— Яндекс.Карты

— 2GIS — вчера

02

Page 3: OpenStreetMap на вашем сайте

02

Page 4: OpenStreetMap на вашем сайте

Встраиваемые карты— Google Maps

— Яндекс.Карты

— Bing

— Космоснимки

— 2GIS

— Navitel

04

Page 5: OpenStreetMap на вашем сайте

04OpenStreetMap

— openstreetmap.org = osm.org

— openstreetmap.ru

05

Page 6: OpenStreetMap на вашем сайте

05

Что не так

в других картах?

Page 7: OpenStreetMap на вашем сайте

Покрытие по Уралуbit.ly/XdQx33 (сентябрь 2012)

— Областные центры — везде

— + Магнитогорск — Google, Яндекс; + Березники — Космоснимки

— + дорожная сеть в нескольких десятках городов — Bing

— + крупные города и города-спутники = 15 городов — 2ГИС

— + десятки городов + физическая карта — Навител

07

Page 8: OpenStreetMap на вашем сайте

07Crowdsourcing maps

— OpenStreetMap

— Google Map Maker

— Яндекс Народная карта

— Wikimapia

08

Page 9: OpenStreetMap на вашем сайте

08

Внешний вид

Page 10: OpenStreetMap на вашем сайте
Page 11: OpenStreetMap на вашем сайте
Page 12: OpenStreetMap на вашем сайте

Ограниченияdevelopers.google.com/maps/faq#usagelimits

Web sites and applications using the Google Maps API may at no cost

generate up to 25,000 map loads per day for each service.“12

Page 13: OpenStreetMap на вашем сайте

12

Сравним с OSM

Page 14: OpenStreetMap на вашем сайте
Page 15: OpenStreetMap на вашем сайте
Page 16: OpenStreetMap на вашем сайте
Page 17: OpenStreetMap на вашем сайте
Page 18: OpenStreetMap на вашем сайте
Page 19: OpenStreetMap на вашем сайте

Бесплатно*

Page 20: OpenStreetMap на вашем сайте

Итого— Качество

— Стиль

— Цена

20

Page 21: OpenStreetMap на вашем сайте

20

Как?

Page 22: OpenStreetMap на вашем сайте

google://

openstreetmap api

Page 23: OpenStreetMap на вашем сайте

Разобьём на подзадачи— Подобрать механизм отображения

— Найти тайлы

23

Page 24: OpenStreetMap на вашем сайте

23Библиотеки, допускающие замену тайлов

— GeoMixer (kosmosnimki.ru)

— Google Maps

— Яндекс.Карты

24

Page 25: OpenStreetMap на вашем сайте

24GeoMixerkosmosnimki.ru/geomixer/docs/api_samples/ex_only_osm.html

<script>createFlashMap(

document.getElementById("map"), "OSM",

function(map){}

);

</script>

25

Page 26: OpenStreetMap на вашем сайте

25

Page 27: OpenStreetMap на вашем сайте

OSM в Google Mapsfunction initialize() { var map = new google.maps.Map(document.getElementById("map"), {}); map.setCenter(new google.maps.LatLng(55.160751, 61.412512)); map.setZoom(18); var openStreet = new google.maps.ImageMapType({ getTileUrl: function(ll, z) { var X = ll.x % (1 << z); // wrap return "http://tile.openstreetmap.org/" + z + "/" + X + "/" + ll.y + ".png"; }, tileSize: new google.maps.Size(256, 256), maxZoom: 18, name: "OSM" }); map.mapTypes.set('osm', openStreet); map.setMapTypeId('osm'); map.setOptions({ mapTypeControlOptions: { mapTypeIds: [ 'osm', google.maps.MapTypeId.ROADMAP, google.maps.MapTypeId.TERRAIN, google.maps.MapTypeId.SATELLITE, google.maps.MapTypeId.HYBRID ], style: google.maps.MapTypeControlStyle.DROPDOWN_MENU } }); }

27

Page 28: OpenStreetMap на вашем сайте

27Вычисляем адрес тайлаvar openStreet = new google.maps.ImageMapType({

getTileUrl: function(ll, z) {

var X = ll.x % (1 << z); // wrap

return "http://tile.openstreetmap.org/"

+ z + "/" + X + "/" + ll.y + ".png";

},

// ...

28

Page 29: OpenStreetMap на вашем сайте

28Адреса тайлов

http://tile.openstreetmap.org/z /x/y .png

29

Page 30: OpenStreetMap на вашем сайте

29

Page 31: OpenStreetMap на вашем сайте
Page 32: OpenStreetMap на вашем сайте

В Яндекс.Картах

и OSM — разныепроекции

Page 33: OpenStreetMap на вашем сайте

Слой OSM на Яндекс.Картахymaps.layer.storage.add('osm#mapsurfer', function () {

var layer = new ymaps.Layer(

'http://129.206.74.245:8001/tms_r.ashx?x=%x&y=%y&z=%z'

{ projection: ymaps.projection.sphericalMercator }

);

return layer;

} );

ymaps.mapType.storage.add('osm#mapsurfer', new ymaps.MapType('OpenStreetMap', ['osm#mapsurfer']) );

33

Page 34: OpenStreetMap на вашем сайте

33

Page 35: OpenStreetMap на вашем сайте

GeoMixer

Google Maps

Яндекс.Карты

35

Page 36: OpenStreetMap на вашем сайте

35Если делаем новую карту

— OpenLayers

— Leaflet

— ...

36

Page 37: OpenStreetMap на вашем сайте

36

openlayers.org

37

Page 38: OpenStreetMap на вашем сайте

37

leafletjs.com

38

Page 39: OpenStreetMap на вашем сайте

38

39

Page 40: OpenStreetMap на вашем сайте

39Возможности Leaflet

— Отображение растрового слоя: тайлы и большие изображения

— Отображение маркеров

— Отображение векторных слоёв

А с плагинами?

— Разные форматы данных, кластеризация, адресный поиск...

40

Page 41: OpenStreetMap на вашем сайте

40Код для создания карты<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5/leaflet.css" />

<!--[if lte IE 8]>

<link rel="stylesheet" href="http://cdn.leafletjs.com/leaflet-0.5/leaflet.ie.css" />

<![endif]-->

<script src="http://cdn.leafletjs.com/leaflet-0.5/leaflet.js"></script>

</head>

<body><div id="map" style="height: 600px"></div>

41

Page 42: OpenStreetMap на вашем сайте

41Код для создания карты<script>

var map = L.map('map').setView([55.17, 61.39], 16);

L.tileLayer('http://{s}.tile.osm.org/{z}/{x}/{y}.png', {

}).addTo(map);

</script>

42

Page 43: OpenStreetMap на вашем сайте

42

Page 44: OpenStreetMap на вашем сайте

Шаблон URL тайловhttp:// {s} .tile.osm.org/ {z} / {x} / {y} .png

44

Page 45: OpenStreetMap на вашем сайте

44Плагины

— Форматы данных: GeoJSON, CSV, GPX, KML...

— Кластеризация

— Дополнительные элементы управления

— Адресный поиск

— Дополнительные проекции

— ...

45

Page 46: OpenStreetMap на вашем сайте

45Адресный поиск в Leaflet

Leaflet GeoSearch

46

Page 47: OpenStreetMap на вашем сайте

46Адресный поиск в Leaflet

Leaflet GeoSearch

— Bing

— ESRI

— Google

— Nokia

— OpenStreetMap

47

Page 48: OpenStreetMap на вашем сайте

47NominatimNominatim (лат. по имени) — адресный поиск на основе данных OSM.

48

Page 49: OpenStreetMap на вашем сайте

48Использование Nominatim

— Принимает запросы методом GET

— Возвращает до 10 результатов в виде XML либо JSON

— Каждый элемент содержит много информации

49

Page 50: OpenStreetMap на вашем сайте

49Доступ к Номинатиму из Перлаgithub.com/shoorick/bing-imagery-tools/blob/master/watch.pl

use Geo::Coder::OSM;

...

my $geocoder = Geo::Coder::OSM->new();

my @places = $geocoder->geocode(

location => $self->param('address'),

);

foreach my $place ( @places ) {

print $place->{'lon'};50

Page 51: OpenStreetMap на вашем сайте

50MapQuestdeveloper.mapquest.com/web/products/open/sdk

51

Page 52: OpenStreetMap на вашем сайте

51Другие библиотеки

— MapBox → Wax

— Stamen → Modest Maps

52

Page 53: OpenStreetMap на вашем сайте

52Mapstractionmapstraction.com

— Разные библиотеки, включая OpenLayers, Leaflet, MapQuest

— Разный адресный поиск

53

Page 54: OpenStreetMap на вашем сайте

53 *.tile.openstreetmap.org

54

Page 55: OpenStreetMap на вашем сайте

54

Because the OpenStreetMap Foundation is a non-profit organisation

with limited resources, you can’t just slot in the tiles from openstreetmap.org

as a replacement

См. также Tile usage policy.

55

Page 56: OpenStreetMap на вашем сайте

55cloudmade.com

CloudMade

Page 57: OpenStreetMap на вашем сайте
Page 58: OpenStreetMap на вашем сайте
Page 59: OpenStreetMap на вашем сайте
Page 60: OpenStreetMap на вашем сайте

Подключение тайлов CloudMade в LeafletL.tileLayer(

'http://{s}.tile.cloudmade.com/'

+ 'bce850b437d7493ead1fbd1c1bc77ee4'

+ '/997/256/{z}/{x}/{y}.png',

{attribution: 'Картографические данные © Участники <a href="http://openstreetmap.org">OpenStreetMap</a>, <a href="http://creativecommons.org/licenses/by-sa/2.0/">CC-BY-SA</a>, Изображения © <a href="http://cloudmade.com">CloudMade</a>',

maxZoom: 18}).addTo(map);

60

Page 61: OpenStreetMap на вашем сайте

60А можно и такL.tileLayer('http://{s}.tile.cloudmade.com/'

+ '{key}/{styleId}/256/{z}/{x}/{y}.png', {

key: ключ,

attribution: ...,

styleId: номер_стиля

}).addTo(map);

leafletjs.com/examples/choropleth.html

61

Page 62: OpenStreetMap на вашем сайте

61Самодельные тайлы

— Mapnik

— Maperitive

— TileMill

62

Page 63: OpenStreetMap на вашем сайте

62

Maperitive

Page 64: OpenStreetMap на вашем сайте
Page 65: OpenStreetMap на вашем сайте

TileMill

Page 66: OpenStreetMap на вашем сайте

Y перевернулся?

Page 67: OpenStreetMap на вашем сайте

Y перевернулся?L.tileLayer( ...

{

tms: true,

...

TMS — Tile Map Service

67

Page 68: OpenStreetMap на вашем сайте

67

Для ленивых

Page 69: OpenStreetMap на вашем сайте

Модули CMS

69

Page 70: OpenStreetMap на вашем сайте

69

Page 71: OpenStreetMap на вашем сайте
Page 72: OpenStreetMap на вашем сайте
Page 73: OpenStreetMap на вашем сайте
Page 74: OpenStreetMap на вашем сайте
Page 75: OpenStreetMap на вашем сайте

Ещё прощеshtosm.ru/2013/02/05/1/ + MapBox

75

Page 76: OpenStreetMap на вашем сайте

75

Page 77: OpenStreetMap на вашем сайте
Page 78: OpenStreetMap на вашем сайте
Page 79: OpenStreetMap на вашем сайте
Page 80: OpenStreetMap на вашем сайте
Page 81: OpenStreetMap на вашем сайте

Редактирование— Самостоятельно

— Попросить кого-нибудь

81

Page 82: OpenStreetMap на вашем сайте

81Чем

— встроенный, на сайте osm.org

— Potlach (Flash)

— Будет iD? (JavaScript)

— внешний:

— JOSM — josm.ru

— Merkaartor

— ...

82

Page 83: OpenStreetMap на вашем сайте

82Будете много рисовать —

берите JOSM

Page 84: OpenStreetMap на вашем сайте

Не планируете?Тогда совсем не рисуйте

Попросите кого-нибудь

84

Page 85: OpenStreetMap на вашем сайте

84Форум

— forum.openstreetmap.org

— .../viewtopic.php?id=5981 — Челябинская область

85

Page 86: OpenStreetMap на вашем сайте

85

Page 87: OpenStreetMap на вашем сайте
Page 88: OpenStreetMap на вашем сайте
Page 89: OpenStreetMap на вашем сайте

Выводы1. Можно использовать

2. Можно совмещать с другими картами

3. Можно использовать Leaflet для отображения

4. Внешний вид можно менять

5. Можно встраивать модулями CMS и через <iframe>

6. Можно редактировать

89

Page 90: OpenStreetMap на вашем сайте

89Что читать

— openstreetmap.org = osm.org

— wiki.openstreetmap.org

— forum.openstreetmap.org

— switch2osm.org

— shtosm.ru — ШТОСМ

90

Page 91: OpenStreetMap на вашем сайте

90Александр Сапожников

Южно-Уральский государственный университет, Челябинск

[email protected]

— twitter @shoorick77

— эта презентация: shoorick.ru/slide/uwdc/osm.html

91

Page 92: OpenStreetMap на вашем сайте

91