RU:Санкт-Петербург/Rgis

From OpenStreetMap Wiki
Jump to navigation Jump to search

Правительство города и комитет по земельным ресурсам открыли в интернете «Региональную геоинформационную систему Санкт-Петербурга», сокращённо ргис. Находится по адресу http://rgis.spb.ru/map/ и всё её содержимое по закону РФ считается общественным достоянием (public domain). Поэтому перерисовывать в OSM можно.

Система состоит из нескольких десятков слоёв, но включенных по умолчанию (адресная информация, дорожная сеть, сады и парки) вполне достаточно для рисования в OSM. В частности, система уже широко используется для именования улиц, проставления адресов домам и, иногда, прямо для отрисовки домов и парков.

Как пользоваться

Примерно так же, как обычной картой: можно тягать мышкой во все стороны, можно приближать-удалять колёсиком, или выбирая масштаб в выпадающем списке. Инструментами увеличения лучше не пользоваться, потому что в некоторых браузерах после их применения начинаются странности. В левой панели можно выбрать слои или сразу группы слоёв. Данных там очень много, поэтому включать сразу всё смысла нет. После изменения состава слоёв нужно жать кнопку «ОК». Каждая картинка отрисовывается сервером целиком, в отличие от парадигмы TMS, привычной по большинству веб-карт, поэтому будьте терпеливы.

Чтобы сохранить картинку, не обязательно жать Print Screen. Картинку с картой вполне можно сохранить как обычно: правой кнопкой, «сохранить изображение». Если по правой кнопке вылазит фигня, попробуйте перезапустить rgis или воспользоваться другим браузером.

подложка tms

привязка исходя из проекции описанной в вики

см. также http://forum.openstreetmap.org/viewtopic.php?id=11124

Система координат

Официально система координат, использующаяся в rgis, называется «Местная система координат Ленинграда 1964 г.», или же «МСК-64» [1]. Sergey Astakhov подобрал параметры системы для proj.4:

+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=95948.85 +y_0=-6552807.1
+ellps=krass +units=m +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs

Например, можно взять утилиту cs2cs для преобразования координат в WGS-84:

echo 63108.858334999997 59731.315557072085 | cs2cs -f "%.9f" \
+proj=tmerc +lat_0=0 +lon_0=30 +k=1 +x_0=95948.85 +y_0=-6552807.1 \
+ellps=krass +units=m +towgs84=24,-123,-94,0.02,-0.25,-0.13,1.1 +no_defs \
+to +init=epsg:4326

Также, параметры преобразования в формате WKT:

PROJCS["MSK-64",
  GEOGCS["Pulkovo 1942",
    DATUM["Pulkovo_1942",
       SPHEROID["Krassowsky 1940",6378245,298.3,AUTHORITY["EPSG","7024"]],
       TOWGS84[24,-123,-94,0.02,-0.25,-0.13,1.1]],
       PRIMEM["Greenwich",0,AUTHORITY["EPSG","8901"]],
       UNIT["degree",0.01745329251994328,AUTHORITY["EPSG","9122"]]],
  PROJECTION["Transverse_Mercator"],
  PARAMETER["latitude_of_origin",0],
  PARAMETER["central_meridian",30],
  PARAMETER["scale_factor",1],
  PARAMETER["false_easting",95948.85],
  PARAMETER["false_northing",-6552807.1],
  UNIT["metre",1, AUTHORITY["EPSG","9001"]]]

Квадрат в МСК-64 в меркаторе (обычная система координат, используемая при редактировании и просмотре OSM) будет «чуть-чуть повёрнутым чуть-чуть прямоугольником» [2].

Увы, пока умные дяди не настроят WMS-сервер из rgis, смысла в преобразовании координат немного.

Как вытащить большую картинку

Склеивать в фотошопе по квадратику? Занимательно, но муторно и не смешно. Нажмите на картинке правую кнопку мыши и узнайте её адрес. Скопируйте его как-нибудь в буфер обмена и откройте в новой вкладке (или окне, не важно). В адресе будет несколько параметров:

Параметр Что означает
MAP фиксированная строка RGISMap
Width ширина картинки в пикселях, максимум 2000
Height высота картинки в пикселях, максимум 1500
X «широта» центра картинки в системе МСК-64 (увеличивается к востоку)
Y «долгота» центра картинки в системе МСК-64 (увеличивается к северу)
Zoom масштаб в абстрактных единицах, также зависит от ширины картинки
RND случайное число, чтобы браузер не брал картинку из кэша

То есть, порядок действий такой:

  1. максимально приблизиться к нужной точке на карте (масштаб 1:1000);
  2. открыть картинку в новой вкладке (или окне);
  3. поставить значения Width=2000, Height=1500 и обновить картинку;
  4. сохранить на диск.

Использование как подложки в JOSM

Понадобятся плагины wmsplugin (+webkit), piclayer, building_tools и multipoly.

  1. сохранить квадратики, покрывающие область: шаг X=500, шаг Y=350 (может быть удобно сначала округлить значения);
  2. в редакторе GIMP или Photoshop открыть все картинки как слои;
  3. увеличить размер холста и расставить слои в нужном порядке;
  4. каждые два слоя идеально подогнать друг к другу (поможет изменение прозрачности) и склеить;
  5. когда все слои будут склеены в один, поправьте размер холста и установите прозрачность в 55%;
  6. сохраните картинку в png.

Разумеется, если ваш квартал покрывается одной картинкой, шаги 5, 7, 8 не нужны. Склеивать нужно внимательно, пара пикселей разницы даст почти метр на поверхности. Лучше повозиться подольше: всё равно по сравнению с обрисовкой это незначительный труд. Почему сохраняем прозрачную картинку? Потому что привязывать её нужно по Yahoo. Да, пусть дороги в rgis нарисованы замечательно, этого нельзя сказать про OSM, а всё остальное у нас нарисовано либо на глаз, либо по снимкам Yahoo. Итак,

Главная непонятка со слоем PicLayer — что для настройки сначала нужно активировать слой
  1. откройте JOSM и скачайте редактируемую область;
  2. меню PicLayer -> новый слой из файла... -> выберите свой файл;
  3. выберите слой «PicLayer #0» зелёной кнопкой, затем подвигайте и уменьшите картинку, чтобы она примерно соответствовала данным;
  4. увеличьте масштаб до примерно 40 метров, затем WMS -> подложка Yahoo Sat;
  5. выберите квартал для отрисовки и спрячьте пока слой данных;
  6. как можно точнее привяжите картинку к спутниковому снимку, ориентируясь по домам (учтите, что деревья часто закрывают первые этажи);
  7. правой кнопкой на слой «PicLayer», там можно сохранить привязку (и потом загрузить);
  8. активируйте слой данных.

Теперь всё готово непосредственно к обрисовке. Замечу — но вы это и сами увидите — что как бы точно вы не привязывали, картинка всё равно съедет через один-два квартала. Поэтому обрисовывать нужно поквартально, каждый раз двигая слой PicLayer. Кроме того, велика вероятность, что в выбранном районе уже есть дома. Удалять их можно только в крайнем случае (когда они абсолютно не соответствуют реальности). Уважайте чужой труд: вместо перерисовки подвиньте точки дома, где нужно — создавайте новые узлы (плюсики на рёбрах очень помогают). При этом не забывайте склеивать тесно стоящие строения. Сверяйтесь с подложкой Yahoo: хотя она часто неправа, у rgis бывают совершенно дикие ошибки, вроде смещения метров на двадцать.

  1. рисуйте!

Обрисовывая rgis, нужно знать некоторые особенности. Углы в этой системе иногда выставлены от балды. Похоже, дома перерисовывались с измерением только длин. Поэтому вполне вероятны дома ромбом или вообще трапецевидные, а между плотно стоящими в реальности домами могут обнаруживаться щели в пару метров. Ну и не надо обводить каждый балкон, достаточно общих контуров. Как бы вкусно и точно не выглядела подложка, она приблизительна, а вкупе с вашим безумным мастерством обрисовщика квартал получится на вид очень кривым. Это нормально.

Местами будут встречаться дома с дырками в центре. Их рисуем как обычно: после обводки нужно выделить все части контура и выбрать в меню Инструменты -> Создать мультиполигон. Теперь, считается, все теги building, addr и т.п. нужно вешать не на один из контуров, а на отношение. На практике это крайне неудобно. Поэтому автор вешает на внешний периметр.

Здесь одно здание на rgis на деле два «фасадных» двухэтажных дома, большой семиэтажный, плюс две маленьких одноэтажных пристройки

Хотя разбивка строений по домам на rgis выглядит очень правдоподобно, иногда не только одно строение может оказаться двумя домами в rgis (что хорошо), но и наоборот, один контур дома с адресом в rgis на местности может быть тремя, а то и десятком домов, иногда соединённых одноэтажными переходами. Такое часто заметно на спутниковом снимке, хотя для большей точности лучше увидеть всё это воочию. В контуре границы таких совмещённых домов иногда можно заметить — как неожиданные выступы в центре, например. Определив на глаз и по другим признакам, где проходит граница между домами с одним адресом, приглядитесь к контуру rgis: скорее всего, эта граница там намечена. Все получившиеся постройки, очевидно, будут иметь один и тот же адрес, хотя бывает, что общий контур для двух домов имеет номер вида «16-18»: тогда его, пожалуй, можно разделить на «16» и «18».

Иногда контур и адрес могут иметь не дома, а разные постройки вроде подземного перехода или бомбоубежища. Такие объекты обычно не рисуются в OSM, либо не отмечаются как building. Сложнее, когда единым контуром отмечены, например, дом и подземная парковка перед ним: в этом случае нужно разделить на глаз. Такие конструкции, увы, часто не разобрать по Yahoo, потому что они моложе пяти лет.

Для каждого квартала нужно повторить шаги 15—19. Не обязательно после каждого контура проставлять теги: можно опосля выделить сразу все дома в квартале и проставить building=yes и source=rgis.spb.ru. Не забывайте указывать источник! Также, не забывайте периодически сохраняться.

Адресация

Обрисовав все запланированные кварталы, стоит потратить время на простановку адресов. Для этого нужно заново открыть rgis (даже если вы его не закрывали, за время рисования сессия протухла) и найти свои кварталы. Удобнее будет поставить масштаб 1:2000. Все номера будут там подписаны, но не спешите бездумно расставлять их в addr:housenumber. К работе нужно (снова) подойти с умом.

Адрес каждого строения (вплоть до гаражей и трансформаторных подстанций) состоит из нескольких частей: улицы, номера и литеры (последняя обязательна: если не указана литера — адрес может быть неправильным), номера корпуса или строения. Крайне важно не путать литеры и буквенные индексы. Бывает, например, дом 39а, а бывает — 39 литера А. Бывает 39а корпус 2 литера Б. Не опускайте руки, всё почти входит в схему.

  1. спрячьте слои PicLayer и Yahoo кнопкой с «процентом»;
  2. проставьте домам addr:street;
  3. проставьте остальные адресные теги.

Первым делом полезно оптом проставить addr:street=*. Посмотрите по номерам, довольно просто отличить дома вдоль одной улицы от других домов: у них номера идут подряд (с учётом чётности). Сначала выбираете улицу и копируете от неё значение тэга name=*. Затем выбираете все дома вдоль улицы, с одной или двух сторон (как удобнее), и добавляете (или редактируете, если уже было) тэг addr:street со скопированным названием. Куда эффективнее разделить простановку улицы и номеров, нежели каждый раз надеяться на автодополнение.

В спальных районах часто номер дома прост, вида «39 литера А», иногда «39 корпус 2 литера А». Правила записи тэга addr:housenumber=* просты, повторю их:

Корпус и строение дома следует указывать в формате "48А к2 с1" либо "48а к2 с1"[1] - дом номер 48а, корпус 2, строение 1.
Угловые дома следует указывать через дробь, например "2/10".
В случаях, когда несколько соседних участков были объединены, адрес здания, построенного на объединенном участке, следует указывать через знак "дефис-минус" (-, U+002D), например "17-23".

Помимо корпусов и строений вы можете наткнуться на «сооружение». Скорее всего, это не дом, а подземный переход, например. Не обозначайте его как building, да и вообще, пожалуй, можно не рисовать.

Все здания имеют номер дома 41. Литеры ошибочно отмечены как буквенные индексы. Обратите внимание, что один центральный дом разбит на девять

Существует мнение, что литера не имеет отношения к номеру дома и потому в addr:housenumber следует заносить всё кроме неё, чтобы карта не пестрела буквами «А»), а также что буквенные индексы всегда следует записывать прописными буквами. В таком случае, если в rgis написано «39в корпус 2 литера А», следует использовать addr:housenumber=39В к2[1]. Литеру при такой записи предлагается записывать в отдельный тег addr:letter=* (при этом для литеры А его создавать не обязательно). Тег addr:letter=* пока никем не поддерживается, но в будущем он, предположительно, поможет направлять людей, например, к зданию с литерой А (потому что литеры Б, В и далее ставятся, обычно, на вспомогательные строения, хотя бывает, что на территории завода расположено множество зданий (цехов), адрес которых отличается только литерой. Другим вариантом является запись литеры в тег addr:housenumber=* (addr:housenumber=39в к2 лит. А), что не отменяет возможности дополнительного указания литеры в отдельном теге.

Существует мнение, что простановка адресов на все здания заводов и больниц не является обязательной (т. к. пара десятков зданий с адресами, отличающимися только литерой, сбивает некоторых с толку) и достаточно ограничиться простановкой общей части адреса (без литер) на многоугольник, ограничивающий завод, или только на главное здание (проходную). Адресную точку можно ставить ближе к въезду, например, на ворота, а сами строения можно именовать с помощью тега name.

Что делать с адресами по двум улицам? В настоящий момент существует несколько схем, которые предлагается использовать для тегирования двойной адресации (подробнее см. RU:Key:addr#Угловые дома).

Схема 1:
Если номер в rgis написан через дробь — то так и пишите. В этом случае также желательно в addr:street2 написать название второй улицы, по которой стоит дом. То есть, получится что-то вроде:

addr:housenumber=2/33/14
addr:street=улица Ленина
addr:street2=Советская улица
addr:street3=Сиреневенький бульвар

Принцип понятен. Если, что встречается куда чаще, адрес в rgis один, но дом очевидно имеет несколько адресов (вы глазами видели на нём разные таблички, например) — пользуйтесь адресными точками. Просто ставите внутри дома (не на периметре) точку с тегами addr:street и addr:housenumber, соответствующими второму, «скрытому» адресу. Так и роутинг будет работать, и жители дома не обнаружат, что данные OSM противоречат штампу в паспорте. Разумеется, точек может быть много, и дополнять они могут даже двойные адреса.

Схема 2:
Если номер в rgis написан через дробь — то так и пишите. В этом случае также желательно в addr2:street написать название второй улицы, по которой стоит дом. То есть, получится что-то вроде[2]:

addr:housenumber=2/33/14
addr:street=улица Ленина
addr2:street=Советская улица
addr2:housenumber=33
addr3:street=Сиреневенький бульвар
addr3:housenumber=14

Вероятно, простановка дополнительных точек на периметр здания не является ошибкой, т. к. эти точки могут соответствовать, например, табличкам, располагающихся на фасаде здания и, фактически, и являющимся "источником" альтернативного адреса.

  1. загрузите результат работы на сервер OSM.

Примечания

  1. 1.0 1.1 в Региональной геоинформационной системе и на адресных табличках распространена запись буквенных индексов строчными буквами - возможно, имеет смысл придерживаться такой же записи и в OSM, что не создавать путаницу между буквенными индексами и литерами - в этом случае заносить следует 48а, 39в. xybot в настоящий момент настроен на замену строчных букв прописными - база данных содержит множество адресов, где буквенный индекс записан прописной буквой.
  2. как правило, при наличии двойной или тройной адресации в качестве основного адреса в rgis указывается название основной улицы и все номера через дробь, в качестве альтернативных (доступных для поиска) - названия других улиц с соответствующими номерами