Mercurial > postarc > postarc
annotate Postarc/Postarc/Catalog/FeatureClassExporter.cs @ 0:1aca3d413885 tip
Initial import of Postarc
author | Christian Lins <christian.lins@intevation.de> |
---|---|
date | Fri, 05 Oct 2012 23:55:06 +0200 |
parents | |
children |
rev | line source |
---|---|
0
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
1 /* |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
2 * Postarc |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
3 * |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
4 * Author: |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
5 * Christian Lins <christian.lins@intevation.de> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
6 * |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
7 * Copyright: |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
8 * Copyright (C) 2012 Intevation GmbH <http://www.intevation.de/> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
9 * |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
10 * This program is free software: you can redistribute it and/or modify |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
11 * it under the terms of the GNU Lesser General Public License as published by |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
12 * the Free Software Foundation, either version 3 of the License, or |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
13 * (at your option) any later version. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
14 * |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
15 * This program is distributed in the hope that it will be useful, |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
16 * but WITHOUT ANY WARRANTY; without even the implied warranty of |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
17 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
18 * GNU General Public License for more details. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
19 * |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
20 * You should have received a copy of the GNU Lesser General Public License |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
21 * along with this program. If not, see <http://www.gnu.org/licenses/>. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
22 */ |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
23 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
24 using System; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
25 using System.Collections.Generic; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
26 using System.Linq; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
27 using System.Text; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
28 using ESRI.ArcGIS.Geodatabase; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
29 using ESRI.ArcGIS.Geometry; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
30 using Npgsql; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
31 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
32 namespace Postarc.Catalog |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
33 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
34 public class FeatureClassExporter |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
35 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
36 protected IFeatureClass featureClass; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
37 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
38 public FeatureClassExporter(IFeatureClass featClass) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
39 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
40 this.featureClass = featClass; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
41 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
42 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
43 protected string CreateTableDefinition(IFields fields, string tableName) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
44 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
45 StringBuilder buf = new StringBuilder(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
46 buf.Append("CREATE TABLE "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
47 buf.Append(tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
48 buf.Append(" ( "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
49 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
50 bool hasOID = false; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
51 for (int n = 0; n < fields.FieldCount; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
52 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
53 IField field = fields.get_Field(n); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
54 string fieldType = GetSQLType(field.Type); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
55 if (fieldType != null) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
56 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
57 if (field.Name.Equals(Postarc.Feature.FeatureCursor.ARCGIS_OID_COLUMN, StringComparison.InvariantCultureIgnoreCase)) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
58 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
59 hasOID = true; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
60 buf.Append(Postarc.Feature.FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
61 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
62 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
63 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
64 buf.Append(field.Name); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
65 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
66 buf.Append(" "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
67 buf.Append(fieldType); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
68 buf.Append(","); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
69 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
70 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
71 if (!hasOID && n == fields.FieldCount - 1) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
72 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
73 buf.Append(Postarc.Feature.FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
74 buf.Append(" BIGSERIAL NOT NULL,"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
75 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
76 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
77 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
78 buf.Append("PRIMARY KEY("); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
79 buf.Append(Postarc.Feature.FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
80 buf.Append(")"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
81 buf.Append(" )"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
82 return buf.ToString(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
83 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
84 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
85 protected string CreateGeoColumnDef(string tableName) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
86 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
87 StringBuilder buf = new StringBuilder(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
88 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
89 buf.Append("SELECT AddGeometryColumn('public', '"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
90 buf.Append(tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
91 buf.Append("', '"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
92 buf.Append(Postarc.Feature.FeatureCursor.POSTARC_SHAPE_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
93 buf.Append("', -1, 'POINT', 2)"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
94 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
95 return buf.ToString(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
96 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
97 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
98 protected string GetSQLType(esriFieldType type) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
99 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
100 switch (type) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
101 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
102 case esriFieldType.esriFieldTypeInteger: |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
103 return "INT"; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
104 // case esriFieldType.esriFieldTypeString: |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
105 // return "TEXT"; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
106 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
107 return null; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
108 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
109 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
110 protected string CreateInsertStatement(string tableName, object[] row) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
111 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
112 StringBuilder buf = new StringBuilder(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
113 buf.Append("INSERT INTO "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
114 buf.Append(tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
115 buf.Append("("); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
116 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
117 List<string> fields = new List<string>(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
118 for (int n = 0; n < featureClass.Fields.FieldCount; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
119 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
120 IField field = featureClass.Fields.get_Field(n); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
121 string fieldType = GetSQLType(field.Type); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
122 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
123 if (fieldType != null) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
124 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
125 fields.Add(field.Name); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
126 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
127 else if (field.Type == esriFieldType.esriFieldTypeGeometry) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
128 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
129 fields.Add(Postarc.Feature.FeatureCursor.POSTARC_SHAPE_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
130 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
131 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
132 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
133 for (int n = 0; n < fields.Count; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
134 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
135 buf.Append(fields[n]); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
136 if (n < fields.Count - 1) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
137 buf.Append(","); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
138 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
139 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
140 buf.Append(") VALUES ("); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
141 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
142 List<string> values = new List<string>(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
143 for (int n = 0; n < row.Length; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
144 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
145 esriFieldType fieldType = featureClass.Fields.get_Field(n).Type; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
146 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
147 if (GetSQLType(fieldType) != null || fieldType == esriFieldType.esriFieldTypeGeometry) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
148 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
149 values.Add("'" + row[n] + "'"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
150 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
151 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
152 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
153 for (int n = 0; n < values.Count; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
154 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
155 buf.Append(values[n]); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
156 if (n < values.Count - 1) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
157 buf.Append(","); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
158 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
159 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
160 buf.Append(")"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
161 return buf.ToString(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
162 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
163 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
164 protected void CreateTable(PostGISConnection conn, string tableName) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
165 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
166 NpgsqlConnection npgsqlConn = conn.Open(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
167 string sql; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
168 NpgsqlCommand cmd; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
169 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
170 sql = CreateTableDefinition(featureClass.Fields, tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
171 cmd = new NpgsqlCommand(sql, npgsqlConn); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
172 cmd.ExecuteNonQuery(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
173 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
174 sql = CreateGeoColumnDef(tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
175 cmd = new NpgsqlCommand(sql, npgsqlConn); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
176 cmd.ExecuteNonQuery(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
177 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
178 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
179 protected object[] CreateRow(IFeature feature) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
180 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
181 object[] row = new object[feature.Fields.FieldCount]; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
182 for (int n = 0; n < row.Length; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
183 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
184 row[n] = feature.get_Value(n); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
185 if (row[n] is IGeometry) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
186 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
187 Postarc.Feature.Point point = new Postarc.Feature.Point(row[n] as IPoint); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
188 row[n] = point.GetWKT(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
189 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
190 else if (feature.Fields.get_Field(n).Type == esriFieldType.esriFieldTypeString) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
191 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
192 row[n] = EscapeString(row[n] as string); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
193 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
194 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
195 return row; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
196 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
197 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
198 protected string EscapeString(string str) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
199 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
200 str = str.Replace("'", "\'"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
201 return str; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
202 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
203 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
204 protected int WriteRow(string tableName, NpgsqlConnection conn, object[] row) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
205 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
206 string sql = CreateInsertStatement(tableName, row); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
207 NpgsqlCommand cmd = new NpgsqlCommand(sql, conn); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
208 return cmd.ExecuteNonQuery(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
209 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
210 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
211 public int ExportFeatureClass(IQueryFilter filter, PostGISConnection conn, string tableName) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
212 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
213 // FIXME: Enclose in transaction |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
214 CreateTable(conn, tableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
215 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
216 NpgsqlConnection npgsqlConn = conn.Open(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
217 int numExported = 0; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
218 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
219 IFeatureCursor cursor = this.featureClass.Search(filter, true); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
220 IFeature ifeature; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
221 while ((ifeature = cursor.NextFeature()) != null) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
222 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
223 object[] row = CreateRow(ifeature); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
224 WriteRow(tableName, npgsqlConn, row); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
225 numExported++; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
226 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
227 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
228 npgsqlConn.Close(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
229 return numExported; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
230 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
231 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
232 } |