Revision 47579 trunk/org.gvsig.desktop/org.gvsig.desktop.plugin/org.gvsig.sqlite/org.gvsig.sqlite.provider/src/main/java/org/gvsig/sqlite/dal/geopackage/GeopackageGeometryColumns.java
GeopackageGeometryColumns.java | ||
---|---|---|
13 | 13 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCConnection; |
14 | 14 |
import org.gvsig.fmap.dal.store.jdbc2.JDBCUtils; |
15 | 15 |
import org.gvsig.fmap.dal.store.jdbc2.spi.JDBCSQLBuilderBase; |
16 |
import org.gvsig.fmap.geom.Geometry; |
|
16 | 17 |
import org.gvsig.sqlite.dal.operations.SQLiteFetchFeatureTypeOperation; |
17 | 18 |
import org.gvsig.sqlite.dal.operations.SQLiteFetchFeatureTypeOperation.SQLiteColumnInfo; |
18 | 19 |
import org.sqlite.SQLiteException; |
... | ... | |
23 | 24 |
*/ |
24 | 25 |
public class GeopackageGeometryColumns { |
25 | 26 |
|
26 |
|
|
27 | 27 |
public static class GeopackageGeometryColumn extends SQLiteFetchFeatureTypeOperation.SQLiteColumnInfo { |
28 | 28 |
|
29 | 29 |
private String geometry_type_name; |
... | ... | |
126 | 126 |
JDBCUtils.closeQuietly(st); |
127 | 127 |
} |
128 | 128 |
} |
129 |
|
|
130 |
public static String buildCreateTableSQLIfNotExists() { |
|
131 |
return "CREATE TABLE IF NOT EXISTS \"gpkg_geometry_columns\" (\n" |
|
132 |
+ " \"table_name\" TEXT NOT NULL,\n" |
|
133 |
+ " \"column_name\" TEXT NOT NULL,\n" |
|
134 |
+ " \"geometry_type_name\" TEXT NOT NULL,\n" |
|
135 |
+ " \"srs_id\" INTEGER NOT NULL,\n" |
|
136 |
+ " \"z\" TINYINT NOT NULL,\n" |
|
137 |
+ " \"m\" TINYINT NOT NULL,\n" |
|
138 |
+ " CONSTRAINT \"pk_geom_cols\" PRIMARY KEY(\"table_name\",\"column_name\"),\n" |
|
139 |
+ " CONSTRAINT \"fk_gc_tn\" FOREIGN KEY(\"table_name\") REFERENCES \"gpkg_contents\"(\"table_name\"),\n" |
|
140 |
+ " CONSTRAINT \"uk_gc_table_name\" UNIQUE(\"table_name\"),\n" |
|
141 |
+ " CONSTRAINT \"fk_gc_srs\" FOREIGN KEY(\"srs_id\") REFERENCES \"gpkg_spatial_ref_sys\"(\"srs_id\")\n" |
|
142 |
+ ")"; |
|
143 |
} |
|
144 |
|
|
145 |
public static String buildInsertSQL(String tableName, String geomName, int geometryType, int geometrySubtype, Object geometrySRSId) { |
|
146 |
String geometryTypeName = "GEOMETRY"; |
|
129 | 147 |
|
148 |
switch(geometryType){ |
|
149 |
case Geometry.TYPES.POINT: |
|
150 |
geometryTypeName = "POINT"; |
|
151 |
break; |
|
152 |
case Geometry.TYPES.ARC: |
|
153 |
case Geometry.TYPES.CIRCUMFERENCE: |
|
154 |
case Geometry.TYPES.ELLIPTICARC: |
|
155 |
case Geometry.TYPES.LINE: |
|
156 |
case Geometry.TYPES.PERIELLIPSE: |
|
157 |
case Geometry.TYPES.SPLINE: |
|
158 |
geometryTypeName = "LINESTRING"; |
|
159 |
break; |
|
160 |
case Geometry.TYPES.CIRCLE: |
|
161 |
case Geometry.TYPES.ELLIPSE: |
|
162 |
case Geometry.TYPES.FILLEDSPLINE: |
|
163 |
case Geometry.TYPES.POLYGON: |
|
164 |
geometryTypeName = "POLYGON"; |
|
165 |
break; |
|
166 |
|
|
167 |
case Geometry.TYPES.MULTILINE: |
|
168 |
geometryTypeName = "MULTILINESTRING"; |
|
169 |
break; |
|
170 |
|
|
171 |
case Geometry.TYPES.MULTIPOINT: |
|
172 |
geometryTypeName = "MULTIPOINT"; |
|
173 |
break; |
|
174 |
|
|
175 |
case Geometry.TYPES.MULTIPOLYGON: |
|
176 |
geometryTypeName = "MULTIPOLYGON"; |
|
177 |
break; |
|
178 |
} |
|
179 |
String s = String.format( |
|
180 |
"INSERT INTO \"main\".\"gpkg_geometry_columns\" (\"table_name\", \"column_name\", \"geometry_type_name\", \"srs_id\", \"z\", \"m\") VALUES ('%s', '%s', '%s', '%s', '%s', '%s')", |
|
181 |
tableName, |
|
182 |
geomName, |
|
183 |
geometryTypeName, |
|
184 |
geometrySRSId.toString(), |
|
185 |
(geometrySubtype==Geometry.SUBTYPES.GEOM3D || geometrySubtype==Geometry.SUBTYPES.GEOM3DM)?1:0, |
|
186 |
(geometrySubtype==Geometry.SUBTYPES.GEOM2DM || geometrySubtype==Geometry.SUBTYPES.GEOM3DM)?1:0 |
|
187 |
); |
|
188 |
|
|
189 |
return s; |
|
190 |
} |
|
191 |
public static String buildDeleteSQL(String tableName, String geomName) { |
|
192 |
String s = String.format( |
|
193 |
"DELETE FROM \"main\".\"gpkg_geometry_columns\" WHERE \"table_name\" = '%s' and \"column_name\" = '%s'", |
|
194 |
tableName, |
|
195 |
geomName |
|
196 |
); |
|
197 |
|
|
198 |
return s; |
|
199 |
} |
|
130 | 200 |
} |
Also available in: Unified diff