Mercurial > postarc > postarc
annotate Postarc/Postarc/Feature/Feature.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 Npgsql; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
30 using ESRI.ArcGIS.Geometry; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
31 using System.Diagnostics; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
32 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
33 namespace Postarc.Feature |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
34 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
35 public class Feature : IFeature, IFeatureBuffer, IRow, IRowBuffer |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
36 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
37 protected FeatureClass featureClass; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
38 protected IFields fields; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
39 protected object[] row; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
40 protected IWKTGeometry shape = new Point(); |
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 private int oidIdx = -1; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
43 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
44 /// <summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
45 /// Constructs a Feature from an existing row in a database table. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
46 /// </summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
47 /// <param name="featureClass"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
48 /// <param name="reader"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
49 /// <param name="oidIdx"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
50 /// <param name="fields"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
51 public Feature(FeatureClass featureClass, IFields fields, int oidIdx, |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
52 NpgsqlDataReader reader) : this(featureClass, fields, oidIdx) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
53 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
54 this.row = new object[fields.FieldCount]; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
55 reader.GetValues(this.row); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
56 LoadShapeFromRow(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
57 } |
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 protected Feature(FeatureClass featureClass, IFields fields, int oidIdx) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
60 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
61 this.featureClass = featureClass; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
62 this.fields = fields; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
63 this.oidIdx = oidIdx; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
64 } |
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 protected int ShapeFieldIndex |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
67 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
68 get |
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 return this.fields.FindField(featureClass.ShapeFieldName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
71 } |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
74 /// <summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
75 /// Creates a new feature which is not yet written to a backend. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
76 /// </summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
77 /// <param name="featureClass"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
78 /// <param name="fields"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
79 /// <param name="oidIdx"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
80 /// <param name="row"></param> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
81 public Feature(FeatureClass featureClass, IFields fields, int oidIdx, |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
82 object[] row) : this(featureClass, fields, oidIdx) |
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 this.row = row; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
85 LoadShapeFromRow(); |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
88 protected void LoadShapeFromRow() |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
89 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
90 this.shape = new Point(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
91 int shpIdx = ShapeFieldIndex; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
92 if (shpIdx >= 0 && row[ShapeFieldIndex] != null) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
93 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
94 this.shape.SetWKT(row[ShapeFieldIndex] as string); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
95 } |
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 public IObjectClass Class |
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 get { throw new NotImplementedException(); } |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
103 public void Delete() |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
104 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
105 // TODO: Not implemented |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
108 public IEnvelope Extent |
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 get |
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 return this.Shape.Envelope; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
113 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
114 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
115 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
116 public esriFeatureType FeatureType |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
117 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
118 get |
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 return this.featureClass.FeatureType; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
121 } |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
124 public IFields Fields |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
125 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
126 get |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
127 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
128 return this.fields; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
129 } |
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 public bool HasOID |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
133 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
134 get |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
135 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
136 return oidIdx >= 0; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
137 } |
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 public int OID |
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 get |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
143 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
144 if (oidIdx >= 0) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
145 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
146 int oid = Convert.ToInt32(this.row[oidIdx]); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
147 return oid; |
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 else |
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 return -1; |
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 } |
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 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
156 public IGeometry Shape |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
157 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
158 get |
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 return this.shape as IGeometry; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
161 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
162 set |
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 this.shape = value as IWKTGeometry; |
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 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
167 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
168 public IGeometry ShapeCopy |
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 get { throw new NotImplementedException(); } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
171 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
172 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
173 /// <summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
174 /// Writes the row to the backend. From IRow interface. |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
175 /// </summary> |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
176 public void Store() |
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 StringBuilder sql = new StringBuilder(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
179 NpgsqlConnection conn = featureClass.PostGISConnection.Open(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
180 NpgsqlCommand cmd; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
181 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
182 if (OID > 0) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
183 { // Update existing row |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
184 sql.Append("UPDATE "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
185 sql.Append(featureClass.TableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
186 sql.Append(" SET "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
187 for (int n = 0; n < this.row.Length; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
188 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
189 if (n != this.oidIdx) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
190 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
191 sql.Append(Fields.get_Field(n).Name); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
192 sql.Append(" = '"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
193 if (n == featureClass.ShapeFieldIndex) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
194 sql.Append(shape.GetWKT()); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
195 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
196 sql.Append(this.row[n]); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
197 sql.Append("',"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
198 } |
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 sql.Replace(',',' ', sql.Length - 1, 1); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
201 sql.Append(" WHERE "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
202 sql.Append(FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
203 sql.Append(" = "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
204 sql.Append(OID); |
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 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
207 { // Create new row |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
208 sql.Append("INSERT INTO "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
209 sql.Append(featureClass.TableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
210 sql.Append(" ("); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
211 for (int n = 0; n < this.row.Length; n++) |
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 if (n == this.oidIdx) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
214 sql.Append(FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
215 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
216 sql.Append(Fields.get_Field(n).Name); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
217 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
218 if (n != Fields.FieldCount - 1) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
219 sql.Append(","); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
220 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
221 sql.Append(" ) SELECT "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
222 for (int n = 0; n < this.row.Length; n++) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
223 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
224 if (n == this.oidIdx) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
225 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
226 sql.Append("Max("); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
227 sql.Append(FeatureCursor.POSTARC_OID_COLUMN); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
228 sql.Append(") + 1"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
229 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
230 else |
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 sql.Append("'"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
233 if (n == featureClass.ShapeFieldIndex) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
234 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
235 sql.Append(shape.GetWKT()); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
236 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
237 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
238 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
239 sql.Append(this.row[n]); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
240 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
241 sql.Append("'"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
242 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
243 if (n != Fields.FieldCount - 1) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
244 sql.Append(","); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
245 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
246 sql.Append(" FROM "); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
247 sql.Append(featureClass.TableName); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
248 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
249 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
250 cmd = new NpgsqlCommand(sql.ToString(), conn); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
251 int updatedRows = cmd.ExecuteNonQuery(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
252 conn.Close(); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
253 Debug.WriteLine("Feature::Store: " + updatedRows + " rows affected"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
254 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
255 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
256 public ITable Table |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
257 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
258 get |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
259 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
260 return this.featureClass; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
261 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
262 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
263 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
264 public object get_Value(int index) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
265 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
266 Debug.WriteLine("Feature::get_Value(" + index + "): " |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
267 + (row[index] != null ? row[index].GetType() + " " + row[index].ToString() : "")); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
268 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
269 if (index == featureClass.ShapeFieldIndex) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
270 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
271 return this.Shape; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
272 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
273 else |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
274 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
275 return this.row[index]; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
276 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
277 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
278 |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
279 public void set_Value(int index, object value) |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
280 { |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
281 Debug.WriteLine("Feature::set_Value(" + index + ", " + value + ")"); |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
282 this.row[index] = value; |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
283 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
284 } |
1aca3d413885
Initial import of Postarc
Christian Lins <christian.lins@intevation.de>
parents:
diff
changeset
|
285 } |