All Downloads are FREE. Search and download functionalities are using the official Maven repository.

com.mapbox.services.commons.geojson.MultiLineString Maven / Gradle / Ivy

There is a newer version: 2.2.10
Show newest version
package com.mapbox.services.commons.geojson;

import com.google.gson.GsonBuilder;
import com.mapbox.services.commons.geojson.custom.PositionDeserializer;
import com.mapbox.services.commons.geojson.custom.PositionSerializer;
import com.mapbox.services.commons.models.Position;

import java.util.ArrayList;
import java.util.List;

/**
 * A MultiLineString is a type of {@link Geometry}.
 *
 * @see Official GeoJSON MultiLineString Specifications
 * @since 1.0.0
 */
public class MultiLineString implements Geometry>> {

  private final String type = "MultiLineString";
  private List> coordinates;

  /**
   * Private constructor.
   *
   * @param coordinates List of {@link Position} making up the MultiLineString.
   * @since 1.0.0
   */
  private MultiLineString(List> coordinates) {
    this.coordinates = coordinates;
  }

  /**
   * Should always be "MultiLineString".
   *
   * @return String "MultiLineString".
   * @since 1.0.0
   */
  @Override
  public String getType() {
    return type;
  }

  /**
   * Get the list of {@link Position} making up the MultiLineString.
   *
   * @return List of {@link Position}.
   * @since 1.0.0
   */
  @Override
  public List> getCoordinates() {
    return coordinates;
  }

  @Override
  public void setCoordinates(List> coordinates) {
    this.coordinates = coordinates;
  }

  /**
   * Creates a {@link MultiLineString} from a list of coordinates.
   *
   * @param coordinates List of {@link Position} coordinates.
   * @return {@link MultiLineString}.
   * @since 1.0.0
   */
  public static MultiLineString fromCoordinates(List> coordinates) {
    return new MultiLineString(coordinates);
  }

  public static MultiLineString fromCoordinates(double[][][] coordinates) {
    List> converted = new ArrayList<>(coordinates.length);
    for (int i = 0; i < coordinates.length; i++) {
      List innerList = new ArrayList<>(coordinates[i].length);
      for (int j = 0; j < coordinates[i].length; j++) {
        innerList.add(Position.fromCoordinates(coordinates[i][j]));
      }
      converted.add(innerList);
    }

    return fromCoordinates(converted);
  }

  /**
   * Create a GeoJSON MultiLineString object from JSON.
   *
   * @param json String of JSON making up a MultiLineString.
   * @return {@link MultiLineString} GeoJSON object.
   * @since 1.0.0
   */
  public static MultiLineString fromJson(String json) {
    GsonBuilder gson = new GsonBuilder();
    gson.registerTypeAdapter(Position.class, new PositionDeserializer());
    return gson.create().fromJson(json, MultiLineString.class);
  }

  /**
   * Convert feature into JSON.
   *
   * @return String containing MultiLineString JSON.
   * @since 1.0.0
   */
  @Override
  public String toJson() {
    GsonBuilder gson = new GsonBuilder();
    gson.registerTypeAdapter(Position.class, new PositionSerializer());
    return gson.create().toJson(this);
  }
}




© 2015 - 2024 Weber Informatics LLC | Privacy Policy