On Thu 02-08-12 13:34:32, jzvc wrote:
> Dne 2.8.2012 10:54, Libor Pechacek napsal(a):
> > :) Zrovna jsem se chtěl ozvat.
> >
> > Za svojí prací si stojím, investoval jsem hodně úsilí do korektnosti 
> > importů.
> > Na druhou stranu vím, že některé importy nejsou až tak důkladně provedené.
> >
> > Nemám nic proti přepsání svých importů daty z RÚIAN, obsahově by měly být
> > totožná.
> 
> Tim bych si nebyl tak jisty ... ;D, opakovane sem narazel na spatne
> nazvy ulic (u importovanych adres) - v tom smyslu, ze tam byly zkratky,
> blbe mala/velka pismena, pripadne nekde byly pouzity starsi nez aktualni
> nazvy ...

Zkratky a neaktuální názvy jdou na účet MVČR, nesprávně malá/velká písmena jsou
chybou importovacího softwaru.  Sice jsem software opravil, ale původní názvy
už v mapě zůstaly. ;)

Libor
>From 2ec263cad0d127d5a89662bbd380a3b06dc3e329 Mon Sep 17 00:00:00 2001
From: Libor Pechacek <lpecha...@gmx.com>
Date: Fri, 16 Sep 2011 16:43:37 +0200
Subject: [PATCH] Capitalize place names properly

Treat space and dash as word separators, capitalize roman numerals.

Signed-off-by: Libor Pechacek <lpecha...@gmx.com>
---
 CUZK.MergeDBCUZK/StringUtilities.cs |   47 ++++++++++++++++++++---------------
 1 files changed, 27 insertions(+), 20 deletions(-)

diff --git a/CUZK.MergeDBCUZK/StringUtilities.cs b/CUZK.MergeDBCUZK/StringUtilities.cs
index ac4fb88..9ba31a2 100644
--- a/CUZK.MergeDBCUZK/StringUtilities.cs
+++ b/CUZK.MergeDBCUZK/StringUtilities.cs
@@ -5,31 +5,38 @@ using System.Text;
 
 namespace CUZK.MergeDBCUZK {
 	public static class StringUtilities {
+		static System.Globalization.CultureInfo cultureInfo = System.Globalization.CultureInfo.GetCultureInfo("cs");
+		static HashSet<string> noCapitalize = new HashSet<string>(new string[] {
+			"nad", "pod", "u", "v", "na", "z", 
+			"ledna", "února", "března", "dubna", "května", "máje", "června",
+			"července", "srpna", "září", "října", "listopadu", "prosince",
+			"náměstí", "ulice", "třída", "nábřeží", "kraj"});
+		static Char[] romanNumerals = { 'i', 'v', 'x', 'l', 'c', 'd', 'm' };
+		
 		public static string CorrectLetterSize(string geoName) {
-			if (geoName == null)
+			if (geoName == null || geoName == "")
 				return "";
 
-			string[] nameChunks = geoName.Trim().ToLower(System.Globalization.CultureInfo.GetCultureInfo("cs")).Split(' ');
-
-			StringBuilder result = new StringBuilder();
-			result.Append(nameChunks[0].Substring(0, 1).ToUpper(System.Globalization.CultureInfo.GetCultureInfo("cs")));
-			result.Append(nameChunks[0].Substring(1));
-
-			string[] noCapitalize = new string[] {"nad", "pod", "u", "v", "na", "z", 
-				"ledna", "února", "března", "dubna", "května", "máje", "června",
-				"července", "srpna", "září", "října", "listopadu", "prosince",
-				"náměstí", "ulice", "třída", "nábřeží", "kraj"};
-
-			for (int i = 1; i < nameChunks.Length; i++) {
-				result.Append(' ');
-				if (noCapitalize.SingleOrDefault(s => s == nameChunks[i]) != null) {
-					result.Append(nameChunks[i]);
-				}
-				else {
-					result.Append(nameChunks[i].Substring(0, 1).ToUpper(System.Globalization.CultureInfo.GetCultureInfo("cs")));
-					result.Append(nameChunks[i].Substring(1));
+			string source = geoName.Trim().ToLower(cultureInfo);
+			StringBuilder result = new StringBuilder(source);
+			source = source + ' ';
+			
+			int subStart = 0;
+			for (int i = 1; i < source.Length; i++) {
+				if (source[i] == ' ' || source[i] == '-') {
+					string word = source.Substring(subStart, i-subStart);
+					if(!noCapitalize.Contains(word)) {
+						if (word.TrimEnd('.').TrimStart(romanNumerals).Length == 0) {
+							result.Replace(word, word.ToUpper(cultureInfo), subStart, word.Length);
+						} else {
+							result[subStart] = Char.ToUpper(result[subStart], cultureInfo);
+						}
+					}
+					subStart = i+1;
 				}
 			}
+			
+			result[0] = Char.ToUpper(result[0], cultureInfo);
 
 			return result.ToString();
 		}
-- 
1.6.0.2

_______________________________________________
Talk-cz mailing list
Talk-cz@openstreetmap.org
http://lists.openstreetmap.org/listinfo/talk-cz

Odpovedet emailem