@@ -14,7 +14,7 @@ import org.apache.parquet.schema.{PrimitiveType, Types}
1414import org .geotools .api .feature .simple .SimpleFeatureType
1515import org .locationtech .geomesa .fs .storage .parquet .io .geometry .ZValues .ZValueField
1616import org .locationtech .geomesa .utils .text .StringSerialization .alphaNumericSafeString
17- import org .locationtech .jts .geom .Geometry
17+ import org .locationtech .jts .geom .{ Geometry , Point }
1818
1919import java .util .concurrent .atomic .AtomicInteger
2020
@@ -41,15 +41,17 @@ object ZValues {
4141 * @return
4242 */
4343 def apply (sft : SimpleFeatureType ): ZValues = {
44- val bboxes = sft.getAttributeDescriptors.asScala.toSeq.flatMap { d =>
44+ val fields = sft.getAttributeDescriptors.asScala.toSeq.flatMap { d =>
4545 val binding = d.getType.getBinding
46- if (classOf [Geometry ].isAssignableFrom(binding)) {
47- Some (ZValueField (d.getLocalName))
46+ if (binding == classOf [Point ]) {
47+ Some (ZValueField .z2(d.getLocalName))
48+ } else if (classOf [Geometry ].isAssignableFrom(binding)) {
49+ Some (ZValueField .xz2(d.getLocalName))
4850 } else {
4951 None
5052 }
5153 }
52- ZValues (bboxes )
54+ ZValues (fields )
5355 }
5456
5557 /**
@@ -63,11 +65,18 @@ object ZValues {
6365 object ZValueField {
6466
6567 val ZValueFieldPrefix = " __"
66- val ZValueFieldSuffix = " _z__"
68+ val Z2ValueFieldSuffix = " _z2__"
69+ val XZ2ValueFieldSuffix = " _xz2__"
6770
68- def apply (geometry : String , encoded : Boolean = false ): ZValueField = {
71+ def z2 (geometry : String , encoded : Boolean = false ): ZValueField = {
6972 val geom = if (encoded) { geometry } else { alphaNumericSafeString(geometry) }
70- val zValue = s " $ZValueFieldPrefix$geom$ZValueFieldSuffix"
73+ val zValue = s " $ZValueFieldPrefix$geom$Z2ValueFieldSuffix"
74+ ZValueField (geom, zValue)
75+ }
76+
77+ def xz2 (geometry : String , encoded : Boolean = false ): ZValueField = {
78+ val geom = if (encoded) { geometry } else { alphaNumericSafeString(geometry) }
79+ val zValue = s " $ZValueFieldPrefix$geom$XZ2ValueFieldSuffix"
7180 ZValueField (geom, zValue)
7281 }
7382
@@ -78,8 +87,11 @@ object ZValues {
7887 * @return
7988 */
8089 def fromFieldName (field : String ): Option [ZValueField ] = {
81- if (field.startsWith(ZValueFieldPrefix ) && field.endsWith(ZValueFieldSuffix )) {
82- Some (ZValueField (field.substring(ZValueFieldPrefix .length, field.length - ZValueFieldSuffix .length), field))
90+ if (field.startsWith(ZValueFieldPrefix )) {
91+ Seq (Z2ValueFieldSuffix , XZ2ValueFieldSuffix ).collectFirst {
92+ case suffix if field.endsWith(suffix) =>
93+ ZValueField (field.substring(ZValueFieldPrefix .length, field.length - suffix.length), field)
94+ }
8395 } else {
8496 None
8597 }
0 commit comments