OpenStreetMap Forum

The Free Wiki World Map

You are not logged in.

#76 2015-03-03 20:20:46

Larry0ua
Member
Registered: 2010-09-19
Posts: 1,061

Re: Пропозиція - природній порядок слів у назвах вулиць

_sev wrote:

Тобто, пропонується три набори правил, для української, для російської та англійскої, всі різні, так? Тобто, "вулиця Морська", "Морская улица", "Morska Street", так?

Вірно, зараз я притримуюсь цієї думки, хоча починаючи тему, я хотів зачепити лише українські назви.

Offline

#77 2015-03-30 13:22:14

edward17
Member
Registered: 2013-08-26
Posts: 1,849
Website

Re: Пропозиція - природній порядок слів у назвах вулиць

Принятие новой схемы подразумевает перетегирование огромного количества линий. Понятно, что это хотя бы на 95% будет сделано ботом.
Нужно ли такие массовые правки согласовывать с DWG?


Все жители частного сектора, вешающие таблички с названием улицы и номером дома, попадают в рай без очереди.

Offline

#78 2015-03-30 15:09:40

uname
Member
Registered: 2014-08-11
Posts: 213

Re: Пропозиція - природній порядок слів у назвах вулиць

ребят а мне категорически не нравится новая схема и сама идея так поступить с улицами. если хочется поэксперементировать - давайте начнем с топонимов - озер/рек/водохранилищ и т.д. там полный бардак - ктото хочет пишет река Осиковая, ктото Осиковая река, а ктото просто Осиковая (полагая что тег watrway=river это исключительно реки и добавлять в название ненужно.) ктото террикон шахты №21 "терновая", ктото террикон шахты "терновая" №21...
с названиями улиц покачто относительный порядок.. зачем его ломать? давайте лучше наведем порядок там где его нет - в названиях такого беспорядка уйма!

Offline

#79 2015-04-19 13:02:55

Sanjak
Member
From: Волинський край
Registered: 2010-04-12
Posts: 219

Re: Пропозиція - природній порядок слів у назвах вулиць

До нашої спільноти приєднався юний модератор НЯКа Юрий Картограф і одразу ж взявся за зміну назв вулиць, точніше порядку слів в тегах name та name:ru. Нащастя було тільки  4 правки на 3 вулицях. Швиденько відкотив і написав листа йому. smile

Offline

#80 2016-07-23 18:29:02

algot
Member
From: Дніпро
Registered: 2012-07-03
Posts: 500

Re: Пропозиція - природній порядок слів у назвах вулиць

Обнаружил, что Царичанская РГА начала наносить названия улиц в селах с неправильным порядком слов
https://www.openstreetmap.org/user/%D0% … 0%94%D0%90

Написал в личку и попросил не делать так со ссылкой на Вики.
А можно как-то автоматизировано поправить всё то, что они поназывали?

Offline

#81 2016-07-26 09:13:18

Vort
Member
Registered: 2010-11-29
Posts: 510

Re: Пропозиція - природній порядок слів у назвах вулиць

algot wrote:

А можно как-то автоматизировано поправить всё то, что они поназывали?

Попробую сделать.

upd. Сделал

Last edited by Vort (2016-07-26 10:09:14)

Offline

#82 2016-07-26 10:12:48

algot
Member
From: Дніпро
Registered: 2012-07-03
Posts: 500

Re: Пропозиція - природній порядок слів у назвах вулиць

Vort wrote:
algot wrote:

А можно как-то автоматизировано поправить всё то, что они поназывали?

Попробую сделать.

upd. Сделал

Вот в этом месте несколько улиц не пофиксились
https://www.openstreetmap.org/way/42872 … 85/34.4878

Offline

#83 2016-07-26 10:15:38

dudka
Member
From: Київ
Registered: 2011-04-22
Posts: 1,602

Re: Пропозиція - природній порядок слів у назвах вулиць

На http://nadoloni.com/editor/streets є функція Autofix, вона вміє виправляти порядок слів

Offline

#84 2016-07-26 10:16:38

Vort
Member
Registered: 2010-11-29
Posts: 510

Re: Пропозиція - природній порядок слів у назвах вулиць

algot wrote:

Вот в этом месте несколько улиц не пофиксились
https://www.openstreetmap.org/way/42872 … 85/34.4878

Хм. Я выбирал улицы с последней правкой от Царичанська РДА.
Есть идеи как довыбрать оставшиеся?
Не хотелось бы по всему квадрату запускать замены - мало ли что можно сломать.

Offline

#85 2016-07-26 11:14:37

algot
Member
From: Дніпро
Registered: 2012-07-03
Posts: 500

Re: Пропозиція - природній порядок слів у назвах вулиць

Vort wrote:
algot wrote:

Вот в этом месте несколько улиц не пофиксились
https://www.openstreetmap.org/way/42872 … 85/34.4878

Хм. Я выбирал улицы с последней правкой от Царичанська РДА.
Есть идеи как довыбрать оставшиеся?
Не хотелось бы по всему квадрату запускать замены - мало ли что можно сломать.

Найти все, где их правка была предпоследней, посмотреть, что выйдет и так далее.

Offline

#86 2016-07-26 11:24:53

Vort
Member
Registered: 2010-11-29
Posts: 510

Re: Пропозиція - природній порядок слів у назвах вулиць

algot wrote:

Найти все, где их правка была предпоследней, посмотреть, что выйдет и так далее.

Я делал запрос через Overpass:
http://overpass-turbo.eu/s/hvu
В описании языка нашел только вот это:
http://wiki.openstreetmap.org/wiki/RU:O … .2C_uid.29
Похоже, запросов для предпоследней правки нет sad

Остаётся разве что качать все ченжсеты юзера.
Но для этого у меня пока что инструментов нет.

Offline

#87 2016-07-26 13:34:31

Vort
Member
Registered: 2010-11-29
Posts: 510

Re: Пропозиція - природній порядок слів у назвах вулиць

Вторая партия:
http://nrenner.github.io/achavi/?changeset=41036839

Вот код для получения списка линий:

using System;
using System.Collections.Generic;
using System.Net;
using System.Xml;

namespace ConsoleApplication32
{
    class Program
    {
        static void Main(string[] args)
        {
            HashSet<string> chIds = new HashSet<string>();
            HashSet<string> ways = new HashSet<string>();

            bool lastpage = false;
            string lastTime = "2099-01-01";
            while (!lastpage)
            {
                XmlDocument doc1 = new XmlDocument();
                doc1.LoadXml(new WebClient().DownloadString(
                    "http://www.openstreetmap.org/api/0.6/changesets?user=3949783&time=2001-01-01," + lastTime));
                var changesetsList = doc1.DocumentElement.SelectNodes("/osm/changeset");
                lastpage = changesetsList.Count != 100;
                lastTime = (changesetsList[changesetsList.Count - 1] as XmlElement).GetAttribute("created_at");
                foreach (XmlElement changeset in changesetsList)
                    chIds.Add(changeset.GetAttribute("id"));
                Console.Write(".");
            }
            Console.WriteLine();
            Console.WriteLine("Changesets found: " + chIds.Count);

            foreach (string id in chIds)
            {
                string changeSet = new WebClient().DownloadString(
                    "http://www.openstreetmap.org/api/0.6/changeset/" + id + "/download");

                XmlDocument doc2 = new XmlDocument();
                doc2.LoadXml(changeSet);
                foreach (XmlElement way in doc2.DocumentElement.SelectNodes("/osmChange/modify/way"))
                    ways.Add(way.GetAttribute("id"));
                foreach (XmlElement way in doc2.DocumentElement.SelectNodes("/osmChange/create/way"))
                    ways.Add(way.GetAttribute("id"));
                Console.Write(".");
            }
            Console.WriteLine();
            Console.WriteLine(string.Join(", ", ways));
        }
    }
}

Вот код для переименования:

using System.Collections.Generic;
using System.IO;
using System.Text.RegularExpressions;
using System.Xml;

namespace ConsoleApplication31
{
    class Program
    {
        static void RemoveTag(XmlElement osmObj, string tagName)
        {
            foreach (XmlElement tag in osmObj.SelectNodes("tag"))
                if (tag.Attributes["k"].InnerText == tagName)
                {
                    osmObj.RemoveChild(tag);
                    osmObj.SetAttribute("action", "modify");
                    return;
                }
        }

        static void SetTag(XmlElement osmObj, string tagName, string tagValue)
        {
            if (tagValue == null)
            {
                RemoveTag(osmObj, tagName);
                return;
            }

            foreach (XmlElement tag in osmObj.SelectNodes("tag"))
                if (tag.Attributes["k"].InnerText == tagName)
                {
                    if (tag.Attributes["v"].InnerText == tagValue)
                        return;
                    tag.Attributes["v"].InnerText = tagValue;
                    osmObj.SetAttribute("action", "modify");
                    return;
                }
            var newTag = osmObj.OwnerDocument.CreateElement("tag");
            newTag.SetAttribute("k", tagName);
            newTag.SetAttribute("v", tagValue);
            osmObj.AppendChild(newTag);
            osmObj.SetAttribute("action", "modify");
        }

        static string GetTag(XmlElement osmObj, string tagName)
        {
            foreach (XmlElement tag in osmObj.SelectNodes("tag"))
                if (tag.Attributes["k"].InnerText == tagName)
                    return tag.Attributes["v"].InnerText;
            return null;
        }

        List<string> result = new List<string>();

        void Replace(XmlElement way, string tag)
        {
            bool uk = tag != "name:ru";
            string name = GetTag(way, tag);
            if (name == null)
                return;
            string newName = Regex.Replace(name,
                "(?<p1>\\d-й )?(?<p2>" + (uk ? "провулок|вулиця" : "переулок|улица") +
                ") (?<p3>.*)(?<p4>$)", "${p1}${p3} ${p2}${p4}");
            if (name != newName)
            {
                result.Add(name + " -> " + newName);
                SetTag(way, tag, newName);
            }
            else
                result.Insert(0, name + " ->");
        }

        Program()
        {
            XmlDocument doc = new XmlDocument();
            doc.LoadXml(File.ReadAllText("e:\\rda_all.osm"));

            foreach (XmlElement way in doc.DocumentElement.SelectNodes("/osm/way"))
            {
                if (GetTag(way, "highway") != null &&
                    GetTag(way, "name") != null)
                {
                    Replace(way, "name");
                    Replace(way, "name:ru");
                    Replace(way, "name:uk");
                }
            }
            File.WriteAllLines("e:\\result.txt", result);
            doc.Save("e:\\rda_fix.osm");
        }

        static void Main(string[] args)
        {
            new Program();
        }
    }
}

Offline

#88 2016-07-26 14:05:18

algot
Member
From: Дніпро
Registered: 2012-07-03
Posts: 500

Re: Пропозиція - природній порядок слів у назвах вулиць

Vort wrote:

Вторая партия:

Круто, спасибо.
Думаю, что большая часть пофикшена, а если что-то и осталось, можно будет руками доделать.

Offline

#89 2016-08-28 16:21:31

Dmytro Ovdiienko
Member
From: Kraków
Registered: 2010-02-15
Posts: 307

Re: Пропозиція - природній порядок слів у назвах вулиць

Осталось "квартал Слави".
https://www.openstreetmap.org/#map=18/4 … 2&layers=H

Offline

Board footer

Powered by FluxBB