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

main.java.de.k3b.geo.api.GeoPointDto Maven / Gradle / Ivy

/*
 * Copyright (c) 2015-2016 by k3b.
 *
 * This file is part of k3b-geoHelper library.
 *
 * Licensed under the Apache License, Version 2.0 (the "License");
 * you may not use this file except in compliance with the License.
 * You may obtain a copy of the License at
 *
 *      http://www.apache.org/licenses/LICENSE-2.0
 *
 * Unless required by applicable law or agreed to in writing, software
 * distributed under the License is distributed on an "AS IS" BASIS,
 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
 * See the License for the specific language governing permissions and
 * limitations under the License.
 */

package de.k3b.geo.api;

import java.util.Date;

/**
 * A minimal location or trackpoint implementation of {@link ILocation}, {@link IGeoPointInfo}.
 *
 * Created by k3b on 07.01.2015.
 */
public class GeoPointDto implements ILocation, IGeoPointInfo, Cloneable   {
    /** Latitude, in degrees north. {@link #NO_LAT_LON} means "not set" */
    private double latitude = NO_LAT_LON;

    /** Longitude, in degrees east. {@link #NO_LAT_LON} means "not set" */
    private double longitude = NO_LAT_LON;

    /** Date when the measurement was taken. Null if unknown. */
    private Date timeOfMeasurement = null;

    /** Short non-unique text used as marker label. Null means "not set". */
    private String name = null;

    /** Detailed descript of the point displayed in popup on long-click . Null means "not set". */
    private String description = null;

    /** Filter: This item is only shown if current zoom-level is >= this value.
     * NO_ZOOM means no lower bound. */
    private int zoomMin = NO_ZOOM;

    /** Filter: This item is only shown if current zoom-level is <= this value.
     * NO_ZOOM means no upper bound. */
    private int zoomMax = NO_ZOOM;

    /** If not null: A unique id for this item. */
    private String id = null;

    /** Optional: If not null: Link-url belonging to this item.
     *
     * In show view after clicking on ">" in marker: opens this url.
     *
     * Persistet in geo-uri as geo:...&link=https://path/to/file.html. */
    private String link = null;

    /** Optional: If not null: Url to an icon belonging to this item.
* Persistet in geo-uri as geo:...&s=https://path/to/file.html . */ private String symbol = null; public GeoPointDto() { } public GeoPointDto(double latitude, double longitude, String name, String description) { this(latitude, longitude,name, null, null, null, description, NO_ZOOM, NO_ZOOM, null); } public GeoPointDto(double latitude, double longitude,int zoomMin) { this(latitude, longitude,null, null, null, null, null, zoomMin, NO_ZOOM, null); } public GeoPointDto(double latitude, double longitude, String name, String link, String symbol, String id, String description, int zoomMin, int zoomMax, Date timeOfMeasurement) { this.latitude = latitude; this.longitude = longitude; this.name = name; this.link = link; this.symbol = symbol; this.id = id; this.description = description; this.zoomMin = zoomMin; this.zoomMax = zoomMax; this.timeOfMeasurement = timeOfMeasurement; } public GeoPointDto(IGeoPointInfo src) { if (src != null) { this.latitude = src.getLatitude(); this.longitude = src.getLongitude(); this.name = src.getName(); this.link = src.getLink(); this.symbol = src.getSymbol(); this.id = src.getId(); this.description = src.getDescription(); this.zoomMin = src.getZoomMin(); this.zoomMax = src.getZoomMax(); this.timeOfMeasurement = src.getTimeOfMeasurement(); } } /** Latitude, in degrees north. * * {@link #NO_LAT_LON} means "not set". */ public GeoPointDto setLatitude(double latitude) { this.latitude = latitude; return this; } /** Latitude, in degrees north. * * {@link #NO_LAT_LON} means "not set". */ @Override public double getLatitude() { return latitude; } /** Longitude, in degrees east. * * {@link #NO_LAT_LON} means "not set". */ public GeoPointDto setLongitude(double longitude) { this.longitude = longitude; return this; } /** Longitude, in degrees east. * * {@link #NO_LAT_LON} means "not set". */ @Override public double getLongitude() { return longitude; } /** Date when the measurement was taken. * * Null means unknown. */ public GeoPointDto setTimeOfMeasurement(Date timeOfMeasurement) { this.timeOfMeasurement = timeOfMeasurement; return this; } /** * Date when the measurement was taken. Null if unknown. */ @Override public Date getTimeOfMeasurement() { return timeOfMeasurement; } /** * Short non-unique text used as marker label. Null means "not set". */ public GeoPointDto setName(String name) { this.name = name; return this; } /** * Short non-unique text used as marker label. Null means "not set". */ @Override public String getName() { return name; } /** * Detailed descript of the point displayed in popup on long-click . Null means "not set". */ public GeoPointDto setDescription(String description) { this.description = description; return this; } /** * Detailed descript of the point displayed in popup on long-click . Null means "not set". */ @Override public String getDescription() { return description; } /** * Filter: This item is only shown if current zoom-level is >= this value. NO_ZOOM means no lower bound. */ @Override public int getZoomMin() { return zoomMin; } /** * Filter: This item is only shown if current zoom-level is >= this value. NO_ZOOM means no lower bound. */ public GeoPointDto setZoomMin(int zoomMin) { this.zoomMin = zoomMin; return this; } /** * Filter: This item is only shown if current zoom-level is <= this value. NO_ZOOM means no upper bound. */ @Override public int getZoomMax() { return zoomMax; } /** * Filter: This item is only shown if current zoom-level is <= this value. NO_ZOOM means no upper bound. */ public GeoPointDto setZoomMax(int zoomMax) { this.zoomMax = zoomMax; return this; } /** * If not null: A unique id for this item. */ @Override public String getId() { return id; } /** * If not null: A unique id for this item. */ public GeoPointDto setId(String id) { this.id = id; return this; } /** Optional: If not null: Link-url belonging to this item. * * After clicking on ">"-button in "show view" of a marker: opens this url. * * Persistet in geo-uri as geo:...&link=https://path/to/file.html. */ @Override public String getLink() { return link; } /** Optional: If not null: Link-url belonging to this item. * * After clicking on ">"-button in "show view" of a marker: opens this url. * * Persistet in geo-uri as geo:...&link=https://path/to/file.html. */ public GeoPointDto setLink(String link) { this.link = link; return this; } /** Optional: If not null: Icon-url belonging to this item. * * Persistet in geo-uri as geo:...&s=https://path/to/file.png */ @Override public String getSymbol() { return symbol; } /** Optional: If not null: Icon-url belonging to this item. * * Persistet in geo-uri as geo:...&s=https://path/to/file.png */ public GeoPointDto setSymbol(String symbol) { this.symbol = symbol; return this; } /** Sets all members back to defaultvalue to allow reuse of class. * * {@link #clone()} and {@link #clear()} are used as factory method when reading a list. * * @return this to to allow chains */ public GeoPointDto clear() { this.latitude = GeoPointDto.NO_LAT_LON; this.longitude = GeoPointDto.NO_LAT_LON; this.name = null; this.link = null; this.symbol = null; this.id = null; this.description = null; this.zoomMin = NO_ZOOM; this.zoomMax = NO_ZOOM; this.timeOfMeasurement = null; return this; } /** Create a copy. * * {@link #clone()} and {@link #clear()} are used as factory method when reading a list. */ @Override public GeoPointDto clone() { try { GeoPointDto result = (GeoPointDto) super.clone(); return result; } catch (CloneNotSupportedException e) { e.printStackTrace(); return null; } } /** For display/debugging: Either the {@link #getName()} * or #{@link #getId()}. */ @Override public String toString() { if (this.name != null) return this.name; if (this.id != null) return "#" + this.id; return super.toString(); } /** return true if either lat or lon is not set (NaN) or if both are 0. */ public static boolean isEmpty(ILocation point) { if (point != null) { return (isEmpty(point.getLatitude(), point.getLongitude())); } return true; } public static boolean isEmpty(double value) { return (value == NO_LAT_LON); // (Double.isNaN(value)|| (value == NO_LAT_LON) || (value < -180) || (value > 180)); } /** return true if either lat or lon is not set (NaN) or if both are 0. */ public static boolean isEmpty(double latitude, double longitude) { if (isEmpty(latitude) || isEmpty(longitude)) return true; return ((latitude == 0.0f) && (longitude == 0.0f)); } @Override public boolean equals(Object other) { if ((other == null) || !(other instanceof IGeoPointInfo)) return false; return equals(this, (IGeoPointInfo) other); } public static boolean equals(IGeoPointInfo lhs, IGeoPointInfo rhs) { if ((lhs == null) && (rhs == null)) return true; if ((lhs == null) || (rhs == null)) return false; if (lhs.getId() != null) return lhs.getId().compareTo(rhs.getId()) == 0; return (lhs.getLatitude() == rhs.getLatitude()) && (lhs.getLongitude() == rhs.getLongitude()); } }




© 2015 - 2025 Weber Informatics LLC | Privacy Policy