Nun, das ist alt, aber hey. Ich habe selbst ein wenig daran gearbeitet, also habe ich Folgendes herausgefunden:
Die Daten sind ein codiertes Javascript-Array, also ist der Trick, wenn Sie versuchen, Ihre eigene Datenkette zu generieren, sicherzustellen, dass Ihre Formatierung beibehalten wird Die Struktur des Arrays ist intakt. Sehen wir uns dazu an, was jeder Schritt darstellt.
Wie Sie richtig herausgefunden haben, definiert jedes Ausrufezeichen den Beginn einer Wertdefinition. Das erste Zeichen, ein int-Wert, ist ein innerer Zählwert, und (glaube ich) wirkt als ein Identifizierer, obwohl ich nicht 100% sicher bin. Es scheint ziemlich flexibel in Bezug auf was Sie hier haben können, solange es ein Int ist. Der zweite Charakter ist jedoch viel wichtiger. Es definiert den Datentyp des Wertes. Ich weiß nicht, ob ich noch alle Datentypen gefunden haben, aber die, die ich herausgefunden haben, sind:
m: matrix
f: float
d: double
i: integer
b: boolean
e: enum (as integer)
s: string
u: unsigned int
x: hexdecimal value?
die verbleibenden Zeichen halten tatsächlich den Wert selbst, so dass ein String wird nur die Zeichenfolge halten, Ein boolescher Wert wird '1' oder '0' sein und so weiter. Es gibt jedoch ein wichtiges Problem: den Matrix-Datentyp.
Der Wert der Matrix wird eine ganze Zahl sein. Dies ist die Länge der Matrix, gemessen in der Anzahl der Werte. Das heißt, für eine Matrix! 1mx gehören die nächsten x-Wertdefinitionen zur Matrix. Dies beinhaltet verschachtelte Matrixdefinitionen, so dass eine Matrix der Form [[1,2]]
wie !1m3!1m2!1i1!2i2
aussehen würde (äußere Matrix hat drei untergeordnete, innere Matrix hat 2). Das bedeutet auch, dass Sie, um einen Wert aus der Liste zu entfernen, auch nach Matrix-Vorfahren suchen müssen und, falls vorhanden, ihre Werte aktualisieren, um das nun fehlende Element wiederzugeben.
Der x-Datentyp ist eine weitere Anomalie. Ich gehe davon aus, dass es für die meisten Zwecke hexadezimal kodiert ist, aber in meiner speziellen Situation (Aufruf von Attributinformationen) scheinen sie auch den x-Datentyp zu verwenden, um lat/long-Informationen zu speichern, und dies ist NICHT hexadezimal kodiert , sondern ist ein unsigned long mit dem Wert eingestellt, wie value = coordinate<0 ? (430+coordinate)*1e7 : coordinate*1e7
ein Beispiel für den x-Datentyp verwendet wird, auf diese Weise (direkt von google Maps gezogen): https://www.google.com/maps/vt?pb=!1m8!4m7!2u7!5m2!1x405712614!2x3250870890!6m2!1x485303036!2x3461808386!2m1!1e0!2m20!1e2!2spsm!4m2!1sgid!2sznfCVopRY49wPV6IT72Cvw!4m2!1ssp!2s1!8m11!13m9!2sa!15b1!18m5!2b1!3b0!4b1!5b0!6b0!19b1!19u12!3m1!5e1105!4e5!18m1!1b1
Für den Kontext der Frage gestellt Es ist wichtig zu beachten, dass es in der Struktur keine zuverlässigen Bezeichner gibt. Google liest die Werte in einer bestimmten Reihenfolge. Denken Sie beim Erstellen Ihrer eigenen codierten Daten daran, dass die Bestellung wichtig ist. Sie müssen einige Untersuchungen durchführen, um diese Reihenfolge zu bestimmen. Was das Lesen angeht, besteht Ihre beste Hoffnung darin, die Matrixstruktur neu aufzubauen und dann nach etwas zu suchen, das wie lat/long-Werte aussieht (d. H. Eine Matrix, die genau zwei Kinder vom Typ double (oder x?))
ich eine grundlegende Javascript Gist erstellt auf der Grundlage Ihrer Antwort die „Daten“ Attributwert in einen 'Array' zu analysieren: https://gist.github.com/jeteon/e71fa21c1feb48fe4b5eeec045229a0c – jeteon