Bestimmten String zerlegen

komplexor

Mitglied
Hallo,

ich muß ein Simple Feature MultiPolygon zerlegen um es in ein anders Format zu konvertieren.
Der Eingangsstring hat dann in etwa das folgende Format:

MULTIPOLYGON(((0 0, 0 20, 20 20, 20 0, 0 0),(5 5, 5 15, 15 15, 15 5, 5 5)),((30 30, 30 40, 40 40, 40 30, 30 30)))
dabei repräsentiert der String zwei Polygone, wobei das erstes Polygon (0 0, 0 20, 20 20, 20 0, 0 0) ein Loch hat (5 5, 5 15, 15 15, 15 5, 5 5).
Ausgabeformat soll dann im GeoJSON Format ausgegeben werden:
[[[{lat:0, lng:0}, {lat:0, lng:20}, ... , {lat:0, lng:0}], [{lat:5, lng:5}, ... , {lat:5 ,lng:5}]] , [{lat:30 ,lng:30}..]]

Jemand eine Idee wie man am geschicktesten die Klammer mit Inhalt extrahiert und dabei auch die Polygone samt inneren Polygon erkennt?
 

HimBromBeere

Top Contributor
Wow... noch ein Geowissenschaftler... jetzt fühl ich endlich nicht mehr so mickrig :D

Warum zerlegst du dein MULTIPOLYGON nicht shon auf der Datenbank selbst? Ich glaub, dafür musst du einen dump nehmen... google mal nach postgis dump

EDIT: Ich hab´s mal schnelle erledigt: ST_Dump

Alternativ kannst du auch einfach über String#split("),") gehen...
 
Zuletzt bearbeitet:

komplexor

Mitglied
ja, wir werden immer mehr ;)

Das Problem ist, dass der String nicht aus der DB kommt, sondern mehr oder weniger direkt aus der Map. Mit Geotools könnte ich das auch ganz leicht konvertieren, aber ich muß das leider alleine machen, also den String parsen und neu formatieren.
Für weitere Hilfe wär ich sehr dankbar.
 

HimBromBeere

Top Contributor
Das Problem wollte ich auch schonmal behandeln, hab´s aber aufgegeben. Mein Ansatz damals war, einfach zu jeder sich öffnenen Klammer die schließende Klammer zu suchen. Öffnet sich VOR dem Schließen der Klammer schon wieder eine, wird die zugehörige Funktion rekuriv nochmal aufgerufen, bis endlich mal eine schließende Klammer gefunden wurde...
Vlcht, hilft dir das ein wenig.

EDIT: Aber das mit .split("),") haste schon probiert?
EDIT: Ne, geht wirklich nicht, da wird erstmal ´ne PatternSyntaxException geworfen... was auch irgendwie verständlich ist.
 
Zuletzt bearbeitet:

komplexor

Mitglied
genau den ansatz wollte ich auch verfolgen, ist aber irgendwie voll frikelig. Bin gerade dabei mit dem Tokenizer zu arbeiten, da split() in diesem fall nicht so nützlich ist. bekomme dann diese ausgabe
(((0 0, 0 20, 20 20, 20 0, 0 0 --> erstes Polygon
,(5 5, 5 15, 15 15, 15 5, 5 5 --> inneres P im ersten P
,((30 30, 30 40, 40 40, 40 30, 30 30 --> zweites P
ich denke darauf lässt sich aufbauen. mal sehen wie weit ich komme.
poste bei erfolg mal den code
 
V

vanny

Gast
also ich kenn mich mit der Materie des Multipolygons jetzt nich speziell aus aber wenn ich deinen Ausgangsstring so sehe sollte
split("),("); danach replaceAll("(", ""); replaceAll(")", ""); split(","); dir die freigestellten Zahlenpaare liefern.

Gruß Vanny
 
Zuletzt bearbeitet von einem Moderator:

faetzminator

Gesperrter Benutzer
Nicht vergessen, [c]([/c], [c])[/c] etc. sind Regex Steuerzeichen, die escaped werden müssen! Darum kriegt HimBromBeere die Exception.
 

HimBromBeere

Top Contributor
Das mit der Exception war Himbrombeere schon klar, nur irgendwie nützte
Code:
String#split("\),")
nix genau wie
Code:
String#split("/),")
...

Aber ich gebe gerne zu, regex ist so ein Thema, um das ich mich regelmäßig drumrumdrücke:oops:
 

komplexor

Mitglied
also ich kenn mich mit der Materie des Multipolygons jetzt nich speziell aus aber wenn ich deinen Ausgangsstring so sehe sollte
split("),("); danach replaceAll("(", ""); replaceAll(")", ""); split(","); dir die freigestellten Zahlenpaare liefern.

Gruß Vanny


Hallo Vanny,

das ist soweit schon klar, allerdings ist es damit noch nicht getan. Da es sich um ein MultiPolygon handelt, kann es auch vorkommen, das in einem Polygon ein weiters Polygon und darin wieder eins etc.
Daher muß ich quasi auch wissen, wo, welches Polygon ist und ob es weitere innere Polygone hat.
Für das Beispiel:
MULTIPOLYGON(((0 0, 0 20, 20 20, 20 0, 0 0),(5 5, 5 15, 15 15, 15 5, 5 5)),((30 30, 30 40, 40 40, 40 30, 30 30))) = zwei Polygone bzw. drei Polygone, wobei das erste ein inneres Polygon enthält und das zweite ein einzelnes Polygon ist

((0 0, 0 20, 20 20, 20 0, 0 0),(5 5, 5 15, 15 15, 15 5, 5 5)) = Polygon mit inneren Polygon
((30 30, 30 40, 40 40, 40 30, 30 30)) = ein anderes Polygon
 

Landei

Top Contributor
Das mit der Exception war Himbrombeere schon klar, nur irgendwie nützte
Code:
String#split("\),")
nix genau wie
Code:
String#split("/),")
...

Aber ich gebe gerne zu, regex ist so ein Thema, um das ich mich regelmäßig drumrumdrücke:oops:

Bei Regexes immer doppelte Backslashes zum Escapen:
Code:
String#split("\\),")
 

faetzminator

Gesperrter Benutzer
Oder immer wieder schön zu erwähnen, es gibt [c]Pattern.quote()[/c]. Wenn man eigentlich gar nicht nach einem Regex sondern nach einem natürlichen Ausdruck sucht, kann man [c]xy.split(Pattern.quote("),"))[/c] verwenden.
 

Landei

Top Contributor
Tatsache... wieder was gelernt...
Werd´ mich mal über regex drüber hermachen...:rtfm:
Später...:D

Ist eigentlich logisch: Der Regex-Mechanismus braucht einen "richtigen" Backslash vor dem zu escapenden Zeichen, nur macht da der normale Escape-Mechanismus für Strings (der also Sachen wie "\n" auflöst) nicht mit, man muss also den Backslash selbst escapen (also "\\"), damit er am Ende dem Regex-Parser übergeben werden kann.
 
Ähnliche Java Themen
  Titel Forum Antworten Datum
M String an bestimmten Stellen zerlegen Java Basics - Anfänger-Themen 12
AssELAss Zusammengesetzer String, nur bestimmten Wert daraus mit führenden Nullen Java Basics - Anfänger-Themen 2
G Bestimmten String aus gegebenem String speichern Java Basics - Anfänger-Themen 3
Todesbote Map<String, Treeset> aus Treeset bestimmten Wert auslesen Java Basics - Anfänger-Themen 4
B String in in bestimmten abschnitten splitten Java Basics - Anfänger-Themen 2
C bestimmten Teil von string removen Java Basics - Anfänger-Themen 4
C String ab einem bestimmten Char abschneiden??? Java Basics - Anfänger-Themen 7
Burny91 FileReader / FileWriter / BufferedWriter An einer bestimmten Zeile String ersetzten Java Basics - Anfänger-Themen 2
K Datentypen Bestimmten Part aus String kopieren mit RegEx Java Basics - Anfänger-Themen 4
A String nach bestimmten kriterien splitten Java Basics - Anfänger-Themen 13
M String nach einer bestimmten Anzahl von Zeichen trennen Java Basics - Anfänger-Themen 2
J Anzahl eines bestimmten Zeichens in einem String Java Basics - Anfänger-Themen 8
S String --> Zahlen herausschneiden an bestimmten Positione Java Basics - Anfänger-Themen 3
R Bestimmten Buchstaben im String zählen Java Basics - Anfänger-Themen 9
A String Zeichen löschen in einer bestimmten Reihenfolge Java Basics - Anfänger-Themen 25
S Java: Wie sortiere ich eine ArrayList benutzerdefinierter Objekte nach einem bestimmten Attribut? Java Basics - Anfänger-Themen 2
L 4 stelliges Passwort aus bestimmten Zeichen. Java Basics - Anfänger-Themen 27
I Viereck / Rechteck Prüfung innerhalb einem bestimmten Bereich Java Basics - Anfänger-Themen 2
F Wie kann ich eine Funktion schreiben, die nur in bestimmten Fällen einen Wert zurückgibt? Java Basics - Anfänger-Themen 5
J Zahlen bis zu einem bestimmten Grenzwert ausgeben Java Basics - Anfänger-Themen 11
W Wie ziehe ich von einer bestimmten Zahl, Zahlen ab, bis mein Ergebnis null beträgt? Java Basics - Anfänger-Themen 10
A Zu einem bestimmten Ort im Code springen Java Basics - Anfänger-Themen 11
C ArrayList sortieren nach bestimmten Buchstaben in den Wörtern Java Basics - Anfänger-Themen 13
D Methoden nach einer bestimmten Reihenfolge ausführen. Java Basics - Anfänger-Themen 20
marcooooo Frage zu bestimmten Beispiel Java Basics - Anfänger-Themen 31
ms_cikar Den Wert einer Hex. value bestimmten. Java Basics - Anfänger-Themen 8
S Datenbank Tabelle eine Zeile an einer bestimmten Stelle einfügen Java Basics - Anfänger-Themen 2
B Liste von Tagen generieren ab einem bestimmten Datum und Endedatum Java Basics - Anfänger-Themen 4
J Button klick bei eine bestimmten Zahl Java Basics - Anfänger-Themen 8
B Umbruch nach bestimmten Wort Java Basics - Anfänger-Themen 5
K Apache POI Excel Letzte Reihe einer bestimmten Spalte Java Basics - Anfänger-Themen 1
CptK Bestimmten Integer Wert aus Array filtern Java Basics - Anfänger-Themen 2
I bestimmten Wert eines Arrays Java Basics - Anfänger-Themen 23
B .txt. Datei auslesen und bestimmten Wert wiedergeben Java Basics - Anfänger-Themen 5
E Array-list mit einer bestimmten Länge Java Basics - Anfänger-Themen 17
J Eingabe des Scanners an einer bestimmten Position Java Basics - Anfänger-Themen 6
N Operatoren Suchen nach einer bestimmten Eingabe (durch Scanner) Java Basics - Anfänger-Themen 7
K alle Vorkommen einer bestimmten Ziffer in einer Zahl zählen Java Basics - Anfänger-Themen 2
Hijo2006 Ansprechen einer bestimmten Excelzelle Java Basics - Anfänger-Themen 2
P JList, aus selectedValue bestimmten Wert aus Containerklasse auslesen Java Basics - Anfänger-Themen 4
R Ab einer bestimmten Zeile lesen Java Basics - Anfänger-Themen 3
L Subklasse von ArrayList nur mit bestimmten Objekten füllen Java Basics - Anfänger-Themen 1
J Bestimmten Bildbereich anklicken Java Basics - Anfänger-Themen 0
G Bis zu einem bestimmten Punkt aus Datei lesen Java Basics - Anfänger-Themen 2
L Herunterladbares Java Programm in bestimmten Ordner speicher Java Basics - Anfänger-Themen 3
S OOP Frage: Methoden nur bei bestimmten Gegebenheiten aufrufbar machen? Java Basics - Anfänger-Themen 4
D Bestimmten Wert aus Array List ausgeben Java Basics - Anfänger-Themen 7
B Zufallsdatum innerhalb eines bestimmten Bereiches erzeugen Java Basics - Anfänger-Themen 3
I Texte an bestimmten Stellen ausgeben. Java Basics - Anfänger-Themen 3
M Alle Sublisten einer bestimmten Laenge berechnen Java Basics - Anfänger-Themen 2
E Zeit zum bestimmten Datum in millisekunden berechnen Java Basics - Anfänger-Themen 5
L bestimmten Frame anzeigen lassen? Java Basics - Anfänger-Themen 6
R Bei einem Bestimmten wert einen text Ausgeben Java Basics - Anfänger-Themen 6
B Collections Collection soll nur einen bestimmten Datentyp aufnehmen Java Basics - Anfänger-Themen 12
G Auf einen bestimmten Konstruktor in der abstrakten Superklasse zugreifen? Java Basics - Anfänger-Themen 2
G Erste Schritte Nach bestimmten Dateien suchen und dann in die Registry schreiben. Java Basics - Anfänger-Themen 6
B Strings nur aus bestimmten Zeichen? Java Basics - Anfänger-Themen 4
S Langtext auf bestimmten Bereich begrenzen Java Basics - Anfänger-Themen 3
M bestimmten Teil eines Strings entfernen Java Basics - Anfänger-Themen 4
algebraiker Nur Klassen aus einem bestimmten Jar laden Java Basics - Anfänger-Themen 16
M Threads bestimmten Kernen zuweisen? Java Basics - Anfänger-Themen 7
A Methoden ArrayList einen bestimmten Wert erhöhen oder herabsetzen. Java Basics - Anfänger-Themen 7
K Klassen Objekt mit einem Namen von einer bestimmten Klasse instanziieren Java Basics - Anfänger-Themen 10
N Dateien bestimmten Typs löschen Java Basics - Anfänger-Themen 6
M Liste nach bestimmten Kriterien ordnen Java Basics - Anfänger-Themen 9
M Input/Output Namen der Files aus einem Ordner MIT bestimmten Encoding auslesen? Java Basics - Anfänger-Themen 3
K größter gemeinsamer Teiler berrechnen, funktioniert nur bei bestimmten Zahlen Java Basics - Anfänger-Themen 2
D Importieren von bestimmten Quellen Java Basics - Anfänger-Themen 13
M in methode variable eines bestimmten objekts verwenden Java Basics - Anfänger-Themen 2
B Methode nur in bestimmten Zeitintervallen ausführen Java Basics - Anfänger-Themen 3
C Mit LineRead bis zu einem bestimmten Zeichen auslesen Java Basics - Anfänger-Themen 2
I (JFileChooser)Wie kann eine Jar auf Dateien eines bestimmten Ordners zugreifen? Java Basics - Anfänger-Themen 9
M Zufallszahlen aus einem bestimmten Intervall Java Basics - Anfänger-Themen 5
H Programm zu bestimmten Zeit ausführen Java Basics - Anfänger-Themen 3
D An bestimmten Knoten einer Liste zugreifen Java Basics - Anfänger-Themen 4
Z Geburtstag aller Angestellten am bestimmten Datum Java Basics - Anfänger-Themen 59
S HashMap: Rückgabe des key zu bestimmten value Java Basics - Anfänger-Themen 3
Screen Tätigkeiten von bestimmten Wochentagen gesammelt ausgeben Java Basics - Anfänger-Themen 30
JeromeM90 Problem bei einer Ausgabe von einem bestimmten Zeichen Java Basics - Anfänger-Themen 5
P Bestimmten Stringabschnitt selektieren? Java Basics - Anfänger-Themen 2
G Mail versenden, wenn Mikrofon einen bestimmten Pegel erreich Java Basics - Anfänger-Themen 3
G Auslesen einer bestimmten Stelle in einer Textdatei? Java Basics - Anfänger-Themen 2
W Bestimmten Pfad im BufferedReader Java Basics - Anfänger-Themen 4
S Suche nach einer bestimmten Komponente . Java Basics - Anfänger-Themen 6
G Wert in Zeile an einer bestimmten Stelle ersetzen Java Basics - Anfänger-Themen 2
F Zufallszahl in einem bestimmten Intervall Java Basics - Anfänger-Themen 9
H Datei mit bestimmten Dateityp Java Basics - Anfänger-Themen 2
B Bestimmten Punkt im KOS ermitteln Java Basics - Anfänger-Themen 14
M Namen der Dateien in einem bestimmten Verzeichnis erhalten Java Basics - Anfänger-Themen 4
N In der Textarea an einer bestimmten Positon weiterschreiben? Java Basics - Anfänger-Themen 6
B bestimmten Wert in Array suchen und ersetzen Java Basics - Anfänger-Themen 3
J Auswerten eines Bestimmten inhalts einer Datei Java Basics - Anfänger-Themen 9
G Rundungsfehler bei bestimmten Rechnungen? Java Basics - Anfänger-Themen 2
P Zu einem bestimmten Zeitpunkt Meldung anzeigen? Java Basics - Anfänger-Themen 3
A Suche bestimmten Swing-Button Java Basics - Anfänger-Themen 2
G Problem bei der Darstellung von bestimmten ASCII-Zeichen Java Basics - Anfänger-Themen 4
J Textauslesen, an bestimmten stellen? Java Basics - Anfänger-Themen 20
G Strings ab einem bestimmten Index zurück geben! Java Basics - Anfänger-Themen 3
N Anzahl eines bestimmten Wortes in einer Textdatei Java Basics - Anfänger-Themen 6
richis-fragen String("AT") als StringObject-Variable deklarieren Java Basics - Anfänger-Themen 14

Ähnliche Java Themen

Neue Themen


Oben