Архив рубрики: география

Красим школы и стоянки

В прошлых сериях экспериментов с ТайлМиллом доводилось раскрашивать находящиеся в университетском городке здания и добавлять номера домов. Теперь попробуем раскрасить какую-нибудь территорию, да и здания можно перекрасить как-нибудь иначе. Заодно и повод подвернулся: авторы сайта mapstr.ru решили поменять самодельную карту Стерлитамака на OpenStreetMap — там город неплохо отрисован (хотя, конечно, есть ещё, что улучшать), им в целом нравится стиль, которым отрисована карта окрестностей нашего университета, но им хочется, чтоб было как в ДубльГИСе — чтоб стоянки, дворы и частный сектор были залиты разными цветами. Ну и школы с детсадами хочется выделить цветом.

Делаем так:

1. Перед импортом данных OSM в PostGIS в файле imposm-mapping.py указываем, что нам нужно предназначение здания, а относится ли оно к университету, нас не интересует:

  1. buildings = Polygons(
  2. name = 'buildings',
  3. fields = (
  4. ('area', PseudoArea()),
  5. ('addr:housenumber',String()),
  6. ('building:levels',Integer()),
  7. ('height',Integer()),
  8. ('amenity',String()),
  9. ),
  10. mapping = {
  11. 'building': (
  12. '__any__',
  13. ),
  14. 'railway': (
  15. 'station',
  16. ),
  17. 'aeroway': (
  18. 'terminal',
  19. ),
  20. }
  21. )

там же указываем, что у территорий нас интересует тэг residential — его значение rural можно использовать для обозначения деревенских жилых территорий.

  1. landusages = Polygons(
  2. name = 'landusages',
  3. fields = (
  4. ('area', PseudoArea()),
  5. ('residential', String()),
  6. ('z_order', ZOrder([
  7. 'pedestrian',
  8. ...

2. Импортируем данные.

3. Запускаем TileMill, выбираем нужный проект, идём в свойства слоёв, путём редактирования фрагмента SQL-запроса добавляем поля:

  • amenity — к слою #buildings
  • residential — к слоям #landuse, #landuse_gen0, #landuse_gen1

4. Исправляем стилевые правила:

В базовом файле base.mss указываем необходимость особенной заливки частного сектора

  1. #landuse[zoom>12] {
  2. [type='allotments'] { polygon-fill: @agriculture; }
  3. // ...
  4. [type='residential'] {
  5. polygon-fill: @residential;
  6. [residential='rural'] {
  7. polygon-fill: @rural;
  8. }
  9. }
  10. }

а также зданий образовательных учреждений: детских садов, школ, ПТУ/техникумов/колледжей и институтов/академий/университетов:

  1. // At the highest zoom levels, render buildings in fancy pseudo-3D.
  2. // Ordering polygons by their Y-position is necessary for this effect
  3. // so we use a separate layer that does this for us.
  4. [type != 'hedge'] {
  5. building-fill: @building;
  6. building-height: 2 + [building:levels] * 2;
  7. [height>0] {
  8. building-height: 2 + [height] / 1.5;
  9. }
  10. // Our buildings
  11. [amenity = 'kindergarten'] {
  12. building-fill: @kindergarten_building;
  13. line-color:darken(@kindergarten_building,10%);
  14. }
  15. [amenity = 'school'] {
  16. building-fill: @school_building;
  17. line-color:darken(@school_building,10%);
  18. }
  19. [amenity = 'college'] {
  20. building-fill: @college_building;
  21. line-color:darken(@college_building,10%);
  22. }
  23. [amenity = 'university'] {
  24. building-fill: @university_building;
  25. line-color:darken(@university_building,10%);
  26. }
  27. }
  28. [type = 'hedge'] {
  29. building-fill:@wooded;
  30. building-height:1.25;
  31. }
  32. }
  33. }

добавляем цвета в палитру palette.mss

  1. @residential: #e9e1cd;
  2. @rural: #ece2b5;
  3. @commercial: #e7e0f4;
  4. @industrial: #eeeeee;
  5. @parking: #e5eaf0;
  6. /* Buildings */
  7. @building: #bbaa99;
  8. @educational_mix: #0099ff;
  9. @kindergarten_building: mix(@building, @educational_mix, 90%);
  10. @school_building: mix(@building, @educational_mix, 85%);
  11. @college_building: mix(@building, @educational_mix, 80%);
  12. @university_building: mix(@building, @educational_mix, 75%);

Результат — на http://mapstr.ru/map/

Фрагмент карты Стерлитамака

Некуда бежать

В комнату из коридора доносится запах краски. Открываешь окно, чтоб проветрить — врывается запах металлургического комбината (фиг знает, которого из двух — я их по запаху не различаю).

Нелегко жить в промышленном городе 🙂

Конкуренция меж жёлто-синим и зелёным

Челябинская «Касторама» с апреля продлевает своё рабочее время — будут работать, если верить тому, что у них в магазине говорят, с 6 до 23 часов. Чую, этим и ограничатся — не сто́ит ждать других улучшений. Сейчас по сравнению с ними в «Леруа Мерлене» цены в среднем чуть ниже (как мне показалось), сайт сделан лучше да и ассортимент побогаче. От дома до обоих магазинов растояние одинаково, а вот с работы до жёлто-синего можно через парк прогуляться, а до зелёного — нет. Так что у жёлто-синих ещё есть шанс увидеть меня в качестве покупателя.

Ёлки и не ёлки

Решив в очередной раз разобраться с названиями на импортных языках новогодних конусообразных растущих на Южном Урале хвойных деревьев, полез в википедию, хоть она и не авторитетный источник — нашёл. Запишу и тут, чтоб не забыть:

А теперь — слайды! обои: 2400×1600 (3:2), 2134×1600 (4:3), 2000×1600 (5:4), 2560×1600 (16:10), 2560×1440 (16:9). Пихта.

Пихта

30.01.2010, Южный Урал, хребет Зигальга́.
Челябинская область, Ката́в-Ива́новский район, окрестности села Тюлю́к.

Трудности перевода

Всё-таки в английском с его вагоном значений для каждого слова, не всегда легко.

Вот, скажем, есть фотография с местными птицами:

Синицы

И как её подписать? Вот по-русски можно вообще не задумываясь написать «Синицы». Или, обчитавшись википедии — «Большие синицы». А по-английски? Одна птица — tit. Или даже great tit. А две? Great tits? Гугл, например, по такому запросу выдаёт не только синиц 🙂

Рельеф и дороги

Недавняя запись в ЖЖ-сообществе «Челябинский Челябинск» напомнила, что хотел я как-то собрать рельеф с дорогами на одной карте. Хотел — сделал.

Рельеф и дороги Челябинска

Сделано при помощи Maperitive — он кроссплатформенный (хоть и выглядит по-виндовому), написан на питоне, падает часто. Делаем так:

1. Масштабируем карту, чтоб захватить нужную область.

2. Генерируем фон, с цветом, зависящим от высоты. Если запустить генерацию без дополнительных параметров, то всё зальёт зелёным без заметного контраста, поэтому надо указать свои цвета:

generate-hypsometric ramps=-200:#003399;200:#33cc66;250:#eeee99;350:#993300

Что даст шкалу, где наиболее заметный контраст приходится на высоты от 200 до 350 метров над уровнем моря
Шкала рельефа

3. Для красоты добавляем отмывку: Tools → Generate Hillshading. В меню три подобных пункта — можно выбрать тот, чьи результаты больше нравятся. Если хочется большего контраста, добавлени слоя с отмывкой можно повторить.

4. Скачиваем данные OpenStreetMap для выбранной области: Map → Download Data (Overpass API) Ctrl+Shift+D

5. Создаём стилевой файл с дорогами и границами, но без всего остального, например, такой:

// rendering rules for Maperitive - roads and boundaries
// http://maperitive.net

// Created by Alexander Sapozhnikov, based on style by Igor Brejc
// Released under the Creative Commons Attribution-ShareAlike 3.0 License (http://creativecommons.org/licenses/by-sa/3.0/)

features
	lines
		road major : highway=motorway OR highway=trunk OR highway=primary
		road minor : highway=motorway_link OR highway=trunk_link OR highway=primary_link OR highway=secondary
		boundary country   : relation[type=boundary AND boundary=administrative AND admin_level=2]
		boundary region    : relation[type=boundary AND boundary=administrative AND admin_level=4]
		boundary province  : relation[type=boundary AND boundary=administrative AND admin_level=6]
		boundary municipal : relation[type=boundary AND boundary=administrative AND admin_level=7]

properties
	map-background-color	: #F1EEE8
	map-background-opacity	: 1
	map-sea-color : #B5D0D0
	map.rendering.lflp.min-buffer-space : 5
	map.rendering.lflp.max-allowed-corner-angle : 40

rules

	target : road*
		if : road major
			define
				line-color : #ff9900
				line-width : 2
				border-width : 10%
				border-color : #000000
				border-style : solid
		elseif : road minor
			define
				line-color : #cc6600
				line-width : 1
		draw : line

	target : boundary*
		define
			line-color : #cc3399
			line-style : dash
		if : boundary country
			define
				line-width : 5
		elseif : boundary region
			define
				line-width : 4
		elseif : boundary province
			define
				line-width : 2
		elseif : boundary municipal
			define
				line-width : 1
		draw : line

6. Выбираем этот стиль:

use-ruleset location="/home/as/map/osm/maperitive/rules/road.mrules"

7. Получившуюся карту экспортируем в желаемый формат — см. меню Tools.