reittienEtsinta.tiedostonKasittely.GeoJsonKirjoittaja.java Source code

Java tutorial

Introduction

Here is the source code for reittienEtsinta.tiedostonKasittely.GeoJsonKirjoittaja.java

Source

/*
 * To change this license header, choose License Headers in Project Properties.
 * To change this template file, choose Tools | Templates
 * and open the template in the editor.
 */
package reittienEtsinta.tiedostonKasittely;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.PrintWriter;
import java.io.UnsupportedEncodingException;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.json.JSONArray;
import org.json.JSONObject;
import reittienEtsinta.tietorakenteet.Reitti;

/**
 * Kirjoittaa JSONObjectin annetussa polussa olevaan tiedostoon
 *
 * @author elias
 */
public class GeoJsonKirjoittaja {

    /**
     * Kirjoittaa JSONObjectin annetussa polussa olevaan tiedostoon
     *
     * @param polku
     * @param data
     */
    public static boolean kirjoita(String polku, JSONObject data) {
        PrintWriter kirjoittaja = null;
        try {
            kirjoittaja = new PrintWriter(polku, "UTF-8");
            kirjoittaja.print(data.toString());
            kirjoittaja.close();
        } catch (FileNotFoundException ex) {
            return false;
        } catch (UnsupportedEncodingException ex) {
            return false;
        }
        return true;
    }

    private static JSONObject perusJson(String crs) {
        JSONObject perusjson = new JSONObject();
        perusjson.put("type", "FeatureCollection");

        JSONObject pisteetcrsproperties = new JSONObject();
        pisteetcrsproperties.put("name", crs);

        JSONObject pisteetcrs = new JSONObject();
        pisteetcrs.put("type", "name");
        pisteetcrs.put("properties", pisteetcrsproperties);

        perusjson.put("crs", pisteetcrs);
        return perusjson;
    }

    public static JSONObject munnaJsonPisteet(Reitti kirjoitettava, String crs) {

        JSONObject reittipisteet = perusJson(crs);

        JSONArray pistefeatures = new JSONArray();

        for (int i = 0; i < kirjoitettava.getAika().length; i++) {
            double[] reittipiste = new double[] { kirjoitettava.getLon()[i], kirjoitettava.getLat()[i] };

            JSONObject pisteenGeometry = new JSONObject();
            pisteenGeometry.put("type", "point");
            pisteenGeometry.put("coordinates", reittipiste);

            JSONObject properties = new JSONObject();
            properties.put("timefromstart", kirjoitettava.getAika()[i]);
            if (i == kirjoitettava.getAika().length - 1) {
                properties.put("length", 0);
                properties.put("time", 0);
                properties.put("speed", 0);

            } else {
                properties.put("length", kirjoitettava.matka(i, i + 1));
                properties.put("time", kirjoitettava.aika(i, i + 1));
                if (kirjoitettava.aika(i, i + 1) == 0) {
                    properties.put("speed", -1);

                } else {
                    double vauhti = (double) kirjoitettava.matka(i, i + 1) / (double) kirjoitettava.aika(i, i + 1);
                    properties.put("speed", vauhti);
                }

            }
            properties.put("lat", kirjoitettava.getLat()[i]);
            properties.put("lon", kirjoitettava.getLon()[i]);

            JSONObject pointFeature = new JSONObject();
            pointFeature.put("properties", properties);
            pointFeature.put("geometry", pisteenGeometry);
            pointFeature.put("type", "Feature");

            pistefeatures.put(pointFeature);
        }

        reittipisteet.put("features", pistefeatures);
        return reittipisteet;
    }

    public static JSONObject muunnaJsonReitti(Reitti kirjoitettava, String crs) {
        JSONObject reitti = perusJson(crs);

        JSONArray features = new JSONArray();
        JSONObject feature = new JSONObject();

        feature.put("type", "Feature");
        JSONObject properties = new JSONObject();
        feature.put("properties", properties);

        JSONObject geometry = new JSONObject();

        JSONArray coordinates = new JSONArray();

        for (int i = 0; i < kirjoitettava.getAika().length; i++) {

            double[] reittipiste = new double[] { kirjoitettava.getLon()[i], kirjoitettava.getLat()[i] };
            coordinates.put(new JSONArray(reittipiste));

        }

        geometry.put("coordinates", coordinates);

        geometry.put("type", "LineString");
        feature.put("geometry", geometry);
        features.put(feature);

        reitti.put("features", features);

        return reitti;

    }

}