rdf4j-postgis  Version 0.1.0.0
CoverageJSONReader Class Reference

Static Public Member Functions

static GridCoverage covJSONStringToCoverage (String covjson)
 
static GridCoverage covJSONToCoverage (JSONObject covjson)
 
static void main (String[] args)
 

Member Function Documentation

◆ covJSONStringToCoverage()

static GridCoverage covJSONStringToCoverage ( String  covjson)
static
40  {
41  return covJSONToCoverage(new JSONObject(covjson));
42  }
static GridCoverage covJSONToCoverage(JSONObject covjson)
Definition: CoverageJSONReader.java:44

References CoverageJSONReader.covJSONToCoverage().

Referenced by CoverageJSONReader.main(), and CovJSONDatatype.read().

◆ covJSONToCoverage()

static GridCoverage covJSONToCoverage ( JSONObject  covjson)
static
44  {
45  JSONObject axes=covjson.getJSONObject("domain").getJSONObject("axes");
46  Integer minX=Integer.MAX_VALUE;
47  Integer maxX=0;
48  Integer minY=Integer.MAX_VALUE;
49  Integer maxY=0;
50  Integer minZ=Integer.MAX_VALUE;
51  Integer maxZ=0;
52  Integer minT=Integer.MAX_VALUE;
53  Integer maxT=0;
54  List<DimensionNameType> axestypes=new LinkedList<DimensionNameType>();
55  List<Long> mins=new LinkedList<Long>();
56  List<Long> maxs=new LinkedList<Long>();
57  if(axes.getJSONObject("x").has("values")) {
58  JSONArray xvalues=axes.getJSONObject("x").getJSONArray("values");
59  for(int i=0;i<xvalues.length();i++) {
60 
61  if(xvalues.getInt(i)<minX) {
62  minX=xvalues.getInt(i);
63  }
64  if(xvalues.getInt(i)>maxX) {
65  maxX=xvalues.getInt(i);
66  }
67  }
68  System.out.println(minX+" - "+Long.valueOf(minX));
69  mins.add(Long.valueOf(minX));
70  maxs.add(Long.valueOf(maxX));
71  axestypes.add(DimensionNameType.COLUMN);
72  }else if(axes.getJSONObject("x").has("start") && axes.getJSONObject("x").has("stop")
73  && axes.getJSONObject("x").has("num")) {
74  mins.add(axes.getJSONObject("x").getLong("start"));
75  maxs.add(axes.getJSONObject("x").getLong("stop"));
76  axestypes.add(DimensionNameType.COLUMN);
77  }
78  System.out.println(mins);
79  System.out.println(maxs);
80  if(axes.getJSONObject("y").has("values")) {
81  JSONArray yvalues=axes.getJSONObject("y").getJSONArray("values");
82  for(int i=0;i<yvalues.length();i++) {
83  if(yvalues.getInt(i)<minY) {
84  minY=yvalues.getInt(i);
85  }
86  if(yvalues.getInt(i)>maxY) {
87  maxY=yvalues.getInt(i);
88  }
89  }
90  mins.add(Long.valueOf(minY).longValue());
91  maxs.add(Long.valueOf(maxY).longValue());
92  axestypes.add(DimensionNameType.ROW);
93  }else if(axes.getJSONObject("y").has("start") && axes.getJSONObject("y").has("stop")
94  && axes.getJSONObject("y").has("num")) {
95  mins.add(axes.getJSONObject("y").getLong("start"));
96  maxs.add(axes.getJSONObject("y").getLong("stop"));
97  axestypes.add(DimensionNameType.ROW);
98  }
99  System.out.println(mins);
100  System.out.println(maxs);
101  if(axes.has("z")) {
102  if(axes.getJSONObject("z").has("values")) {
103  JSONArray zvalues=axes.getJSONObject("z").getJSONArray("values");
104  for(int i=0;i<zvalues.length();i++) {
105  if(zvalues.getInt(i)<minZ) {
106  minZ=zvalues.getInt(i);
107  }
108  if(zvalues.getInt(i)>maxZ) {
109  maxZ=zvalues.getInt(i);
110  }
111  }
112  mins.add(Long.valueOf(minZ).longValue());
113  maxs.add(Long.valueOf(maxZ).longValue());
114  axestypes.add(DimensionNameType.VERTICAL);
115  }else if(axes.getJSONObject("z").has("start") && axes.getJSONObject("z").has("stop")
116  && axes.getJSONObject("z").has("num")) {
117  mins.add(axes.getJSONObject("z").getLong("start"));
118  maxs.add(axes.getJSONObject("z").getLong("stop"));
119  axestypes.add(DimensionNameType.VERTICAL);
120  }
121  }
122  System.out.println(mins);
123  System.out.println(maxs);
124  /*if(axes.has("t")) {
125  if(axes.getJSONObject("t").has("values")) {
126  JSONArray tvalues=axes.getJSONObject("t").getJSONArray("values");
127  System.out.println(tvalues);
128  try {
129  for(int i=0;i<tvalues.length();i++) {
130  if(tvalues.getInt(i)<minT) {
131  minT=tvalues.getInt(i);
132  }
133  if(tvalues.getInt(i)>maxT) {
134  maxT=tvalues.getInt(i);
135  }
136  }
137  }catch(Exception e) {
138  e.printStackTrace();
139  }
140  mins.add(Long.valueOf(minT).longValue());
141  maxs.add(Long.valueOf(maxT).longValue());
142  axestypes.add(DimensionNameType.TIME);
143  }else if(axes.getJSONObject("t").has("start") && axes.getJSONObject("t").has("stop")
144  && axes.getJSONObject("t").has("num")) {
145  mins.add(axes.getJSONObject("t").getLong("start"));
146  maxs.add(axes.getJSONObject("t").getLong("stop"));
147  axestypes.add(DimensionNameType.TIME);
148  }
149  }*/
150  String epsg="";
151  CoordinateReferenceSystem sys=null;
152  MathTransform transform;
153  if(covjson.getJSONObject("domain").has("referencing")) {
154  JSONArray refs=covjson.getJSONObject("domain").getJSONArray("referencing");
155  for(int i=0;i<refs.length();i++) {
156  JSONObject ref=refs.getJSONObject(i);
157  if(ref.getJSONObject("system").getString("type").equals("GeographicCRS")) {
158  epsg=ref.getJSONObject("system").getString("id").substring(ref.getJSONObject("system").getString("id").lastIndexOf('/')+1);
159  try {
160  //sys=CRS.decode("EPSG:"+epsg);
161  } catch (Exception e) {
162  // TODO Auto-generated catch block
163  e.printStackTrace();
164  }
165  }
166  /*if(ref.getJSONObject("system").getString("type").equals("TemporalRS")) {
167  TemporalDatum datum=new TemporalDatum
168  datum.
169  DefaultTemporalCRS tcrs=DefaultTemporalCRS(new TreeMap<>(), datum, cs)
170  }*/
171  }
172 
173  }
174 
175  System.out.println(mins);
176  System.out.println(maxs);
177  System.out.println("DimensionNameType: "+axestypes);
178  System.out.println("Mins: "+mins);
179  System.out.println("Maxs: "+maxs);
180  GridExtent extent=new GridExtent(axestypes.toArray(new DimensionNameType[0]),
181  ArrayUtils.toPrimitive(mins.toArray(new Long[0])),
182  ArrayUtils.toPrimitive(maxs.toArray(new Long[0])),true);
183  Envelope2D gridenv=new Envelope2D();
184  GridGeometry gridgeom=null;
185  if(sys!=null) {
186  gridgeom=new GridGeometry(extent,null,null,sys);//domain
187  }else {
188  gridgeom=new GridGeometry(extent, gridenv);//domain
189  }
190 
191  Map<String,List<Category>> categories=new TreeMap<>();
192  for(String key:covjson.getJSONObject("ranges").keySet()) {
193  if(!categories.containsKey(key)) {
194  categories.put(key,new LinkedList<Category>());
195  }
196  if("NdArray".equals(covjson.getJSONObject("ranges").getJSONObject(key).getString("type"))) {
197  JSONArray values=covjson.getJSONObject("ranges").getJSONObject(key).getJSONArray("values");
198  Integer[] intrange=new Integer[values.length()];
199  for (int i = 0; i < values.length(); i++) {
200  intrange[i] = values.optInt(i);
201  }
202  org.apache.sis.measure.NumberRange<?> range;
203  SampleDimension dimension;
204  /*dimension.
205  Category cat=new Catego
206  //NumberRange<Integer> range=new NumberRange<Integer>(null);
207  /*Category.
208  Category cat=new Category(key,range,null,null,null);
209  categories.get(key).add(cat);*/
210 
211  }
212 
213 
214 
215  }
216 /*
217  ParameterBlock pb = new ParameterBlock();
218  pb.add(
219  spi.createInputStreamInstance(
220  inFile, ImageIO.getUseCache(), ImageIO.getCacheDirectory()));
221  pb.add(index);
222  pb.add(Boolean.FALSE);
223  pb.add(Boolean.FALSE);
224  pb.add(Boolean.FALSE);
225  pb.add(null);
226  pb.add(null);
227  pb.add(readP);
228  pb.add(READER_SPI.createReaderInstance());
229  */
230  List<SampleDimension> dimensions=new LinkedList<SampleDimension>();
231  for(String key:covjson.getJSONObject("parameters").keySet()) {
232  GenericName name=Names.createGenericName("http://www.semgis.de/geodata#", "#", new String[] {key});
233  if(categories.containsKey(key)) {
234  dimensions.add(new SampleDimension(name, Integer.valueOf("0"), categories.get(key)));
235  }else {
236  dimensions.add(new SampleDimension(name, 0, new LinkedList<Category>()));
237  }
238  }
239  System.out.println(dimensions);
240  //GridCoverageBuilder.
241  /*
242  * Create the grid coverage, gets its image and set values directly as short
243  * integers.
244  */
245  BufferedGridCoverage coverage = new BufferedGridCoverage(gridgeom,
246  dimensions, DataBuffer.TYPE_INT);
247  System.out.println(coverage);
248  ImageRenderer renderer=new ImageRenderer(coverage,extent);
249  //renderer.setData(data);
250  //WritableRaster raster=renderer.raster();
251  //WritableRaster rasterr = ((BufferedImage) coverage.render(null)).getRaster();
252 
253  //rasterr.setDataElements(x, y, rasterr);
254  //rasterr.setRect(subtractedImage.getSourceImage(0).getData());
255  return coverage;
256  }

Referenced by CoverageJSONReader.covJSONStringToCoverage().

◆ main()

static void main ( String[]  args)
static
259  {
260  String covjson="{\r\n" +
261  " \"type\" : \"Coverage\",\r\n" +
262  " \"domain\" : {\r\n" +
263  " \"type\" : \"Domain\",\r\n" +
264  " \"domainType\" : \"Grid\",\r\n" +
265  " \"axes\": {\r\n" +
266  " \"x\" : { \"values\": [-10,-5,0] },\r\n" +
267  " \"y\" : { \"values\": [40,50] },\r\n" +
268  " \"z\" : { \"values\": [ 5] },\r\n" +
269  " \"t\" : { \"values\": [\"2010-01-01T00:12:20Z\"] }\r\n" +
270  " },\r\n" +
271  " \"referencing\": [{\r\n" +
272  " \"coordinates\": [\"y\",\"x\",\"z\"],\r\n" +
273  " \"system\": {\r\n" +
274  " \"type\": \"GeographicCRS\",\r\n" +
275  " \"id\": \"http://www.opengis.net/def/crs/EPSG/0/4979\"\r\n" +
276  " }\r\n" +
277  " }, {\r\n" +
278  " \"coordinates\": [\"t\"],\r\n" +
279  " \"system\": {\r\n" +
280  " \"type\": \"TemporalRS\",\r\n" +
281  " \"calendar\": \"Gregorian\"\r\n" +
282  " }\r\n" +
283  " }]\r\n" +
284  " },\r\n" +
285  " \"parameters\" : {\r\n" +
286  " \"ICEC\": {\r\n" +
287  " \"type\" : \"Parameter\",\r\n" +
288  " \"description\": {\r\n" +
289  " \"en\": \"Sea Ice concentration (ice=1;no ice=0)\"\r\n" +
290  " },\r\n" +
291  " \"unit\" : {\r\n" +
292  " \"label\": {\r\n" +
293  " \"en\": \"Ratio\"\r\n" +
294  " },\r\n" +
295  " \"symbol\": {\r\n" +
296  " \"value\": \"1\",\r\n" +
297  " \"type\": \"http://www.opengis.net/def/uom/UCUM/\"\r\n" +
298  " }\r\n" +
299  " },\r\n" +
300  " \"observedProperty\" : {\r\n" +
301  " \"id\" : \"http://vocab.nerc.ac.uk/standard_name/sea_ice_area_fraction/\",\r\n" +
302  " \"label\" : {\r\n" +
303  " \"en\": \"Sea Ice Concentration\"\r\n" +
304  " }\r\n" +
305  " }\r\n" +
306  " }\r\n" +
307  " },\r\n" +
308  " \"ranges\" : {\r\n" +
309  " \"ICEC\" : {\r\n" +
310  " \"type\" : \"NdArray\",\r\n" +
311  " \"dataType\": \"float\",\r\n" +
312  " \"axisNames\": [\"t\",\"z\",\"y\",\"x\"],\r\n" +
313  " \"shape\": [1, 1, 2, 3],\r\n" +
314  " \"values\" : [ 0.5, 0.6, 0.4, 0.6, 0.2, null ]\r\n" +
315  " }\r\n" +
316  " }\r\n" +
317  "}";
318  GridCoverage cov=covJSONStringToCoverage(covjson);
319  System.out.println(CoverageJsonWriter.coverageToCovJSON(cov).toString(2));
320 
321  }
static GridCoverage covJSONStringToCoverage(String covjson)
Definition: CoverageJSONReader.java:40

References CoverageJsonWriter.coverageToCovJSON(), and CoverageJSONReader.covJSONStringToCoverage().