Package org.locationtech.geogig.osm.internal

Source Code of org.locationtech.geogig.osm.internal.OSMUtils

/* Copyright (c) 2013-2014 Boundless and others.
* All rights reserved. This program and the accompanying materials
* are made available under the terms of the Eclipse Distribution License v1.0
* which accompanies this distribution, and is available at
* https://www.eclipse.org/org/documents/edl-v10.html
*
* Contributors:
* Victor Olaya (Boundless) - initial implementation
*/
package org.locationtech.geogig.osm.internal;

import java.util.Collection;
import java.util.Iterator;

import javax.annotation.Nullable;

import org.geotools.data.DataUtilities;
import org.geotools.referencing.CRS;
import org.opengis.feature.simple.SimpleFeatureType;
import org.opengis.referencing.crs.CoordinateReferenceSystem;
import org.openstreetmap.osmosis.core.domain.v0_6.Tag;
import org.slf4j.Logger;
import org.slf4j.LoggerFactory;

import com.google.common.base.Throwables;
import com.google.common.collect.Lists;

public class OSMUtils {

    private static final Logger LOGGER = LoggerFactory.getLogger(OSMUtils.class);

    public static final String OSM_FETCH_BRANCH = "OSM_FETCH";

    public static final String DEFAULT_API_ENDPOINT = "http://overpass-api.de/api/interpreter";

    public static final String FR_API_ENDPOINT = "http://api.openstreetmap.fr/oapi/interpreter/";

    public static final String RU_API_ENDPOINT = "http://overpass.osm.rambler.ru/";

    public static final String NODE_TYPE_NAME = "node";

    public static final String WAY_TYPE_NAME = "way";

    public static final String NAMESPACE = "www.openstreetmap.org";

    private static SimpleFeatureType NodeType;

    public synchronized static SimpleFeatureType nodeType() {
        if (NodeType == null) {
            String typeSpec = "visible:Boolean,version:Integer,timestamp:java.lang.Long,tags:String,"
                    + "changeset:java.lang.Long,user:String,location:Point:srid=4326";
            try {
                SimpleFeatureType type = DataUtilities.createType(NAMESPACE,
                        OSMUtils.NODE_TYPE_NAME, typeSpec);
                boolean longitudeFirst = true;
                CoordinateReferenceSystem forceLonLat = CRS.decode("EPSG:4326", longitudeFirst);
                NodeType = DataUtilities.createSubType(type, null, forceLonLat);
            } catch (Exception e) {
                throw Throwables.propagate(e);
            }
        }
        return NodeType;
    }

    private static SimpleFeatureType WayType;

    public synchronized static SimpleFeatureType wayType() {
        if (WayType == null) {
            String typeSpec = "visible:Boolean,version:Integer,timestamp:java.lang.Long,tags:String,"
                    + "changeset:java.lang.Long,user:String,nodes:String,way:LineString:srid=4326";
            try {
                SimpleFeatureType type = DataUtilities.createType(NAMESPACE,
                        OSMUtils.WAY_TYPE_NAME, typeSpec);
                boolean longitudeFirst = true;
                CoordinateReferenceSystem forceLonLat = CRS.decode("EPSG:4326", longitudeFirst);
                WayType = DataUtilities.createSubType(type, null, forceLonLat);
            } catch (Exception e) {
                throw Throwables.propagate(e);
            }
        }
        return WayType;
    }

    /**
     * @param collection
     * @return
     */
    @Nullable
    public static String buildTagsString(Collection<Tag> collection) {
        if (collection.isEmpty()) {
            return null;
        }
        StringBuilder sb = new StringBuilder();
        for (Iterator<Tag> it = collection.iterator(); it.hasNext();) {
            Tag e = it.next();
            String key = e.getKey();
            if (key == null || key.isEmpty()) {
                continue;
            }
            String value = e.getValue();
            sb.append(key).append(':').append(value);
            if (it.hasNext()) {
                sb.append('|');
            }
        }
        return sb.toString();
    }

    public static Collection<Tag> buildTagsCollectionFromString(String tagsString) {
        Collection<Tag> tags = Lists.newArrayList();
        if (tagsString != null) {
            String[] tokens = tagsString.split("\\|");
            for (String token : tokens) {
                int idx = token.lastIndexOf(':');
                if (idx != -1) {
                    Tag tag = new Tag(token.substring(0, idx), token.substring(idx + 1));
                    tags.add(tag);
                } else {
                    LOGGER.info("found tag token '{}' with no value in tagString '{}'", token,
                            tagsString);
                }
            }
        }
        return tags;
    }
}
TOP

Related Classes of org.locationtech.geogig.osm.internal.OSMUtils

TOP
Copyright © 2018 www.massapi.com. All rights reserved.
All source code are property of their respective owners. Java is a trademark of Sun Microsystems, Inc and owned by ORACLE Inc. Contact coftware#gmail.com.