private List<KmlPosition> extractPositionsFromGeometry( JAXBElement<? extends AbstractGeometryType> geometryType) { List<KmlPosition> positions = new ArrayList<>(); AbstractGeometryType geometryTypeValue = geometryType.getValue(); if (geometryTypeValue instanceof PointType) { PointType point = (PointType) geometryTypeValue; positions.addAll(asKmlPositions(point.getCoordinates())); } if (geometryTypeValue instanceof LineStringType) { LineStringType lineString = (LineStringType) geometryTypeValue; positions.addAll(asKmlPositions(lineString.getCoordinates())); } if (geometryTypeValue instanceof MultiGeometryType) { MultiGeometryType multiGeometryType = (MultiGeometryType) geometryTypeValue; List<JAXBElement<? extends AbstractGeometryType>> geometryTypes = multiGeometryType.getAbstractGeometryGroup(); for (JAXBElement<? extends AbstractGeometryType> geometryType2 : geometryTypes) { positions.addAll(extractPositionsFromGeometry(geometryType2)); } } if (geometryTypeValue instanceof MultiTrackType) { MultiTrackType multiTrackType = (MultiTrackType) geometryTypeValue; List<TrackType> tracks = multiTrackType.getTrack(); for (TrackType track : tracks) { positions.addAll(extractPositions(track)); } } if (geometryTypeValue instanceof TrackType) { TrackType trackType = (TrackType) geometryTypeValue; positions.addAll(extractPositions(trackType)); } return positions; }
private PlacemarkType createMark(int kiloMeter, double longitude, double latitude) { ObjectFactory objectFactory = new ObjectFactory(); PlacemarkType placeMark = objectFactory.createPlacemarkType(); placeMark.setName(kiloMeter + ". Km"); placeMark.setVisibility(FALSE); PointType point = objectFactory.createPointType(); point .getCoordinates() .add(formatPositionAsString(longitude) + "," + formatPositionAsString(latitude) + ",0"); placeMark.setAbstractGeometryGroup(objectFactory.createPoint(point)); return placeMark; }
private FolderType createWayPoints(KmlRoute route, int startIndex, int endIndex) { ObjectFactory objectFactory = new ObjectFactory(); FolderType folderType = objectFactory.createFolderType(); folderType.setName(WAYPOINTS); folderType.setDescription(asDescription(route.getDescription())); List<KmlPosition> positions = route.getPositions(); for (int i = startIndex; i < endIndex; i++) { KmlPosition position = positions.get(i); PlacemarkType placemarkType = objectFactory.createPlacemarkType(); folderType.getAbstractFeatureGroup().add(objectFactory.createPlacemark(placemarkType)); placemarkType.setName(asName(isWriteName() ? position.getDescription() : null)); placemarkType.setDescription(asDesc(isWriteDesc() ? position.getDescription() : null)); if (position.hasTime()) { TimeStampType timeStampType = objectFactory.createTimeStampType(); timeStampType.setWhen(formatDate(position.getTime())); placemarkType.setAbstractTimePrimitiveGroup(objectFactory.createTimeStamp(timeStampType)); } PointType pointType = objectFactory.createPointType(); placemarkType.setAbstractGeometryGroup(objectFactory.createPoint(pointType)); pointType.getCoordinates().add(createCoordinates(position, false)); } return folderType; }