Skip to content

Commit

Permalink
Merge pull request #38 from sentinel-hub/fix/date-utc
Browse files Browse the repository at this point in the history
Use Moment.js for all findTiles/findFlyovers times
  • Loading branch information
zcernigoj authored Feb 28, 2020
2 parents 827c3f6 + ac5fcb6 commit 2425cab
Show file tree
Hide file tree
Showing 12 changed files with 60 additions and 39 deletions.
5 changes: 5 additions & 0 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

1 change: 1 addition & 0 deletions package.json
Original file line number Diff line number Diff line change
Expand Up @@ -9,6 +9,7 @@
"@turf/helpers": "^6.1.4",
"@types/xml2js": "^0.4.4",
"axios": "^0.18.1",
"moment": "^2.24.0",
"polygon-clipping": "^0.14.3",
"query-string": "^6.4.2",
"xml2js": "^0.4.19"
Expand Down
19 changes: 10 additions & 9 deletions src/layer/AbstractLayer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import axios from 'axios';
import { Moment } from 'moment';

import { GetMapParams, ApiType, PaginatedTiles, FlyoverInterval } from 'src/layer/const';
import { BBox } from 'src/bbox';
Expand Down Expand Up @@ -40,8 +41,8 @@ export class AbstractLayer {

public async findTiles(
bbox: BBox, // eslint-disable-line @typescript-eslint/no-unused-vars
fromTime: Date, // eslint-disable-line @typescript-eslint/no-unused-vars
toTime: Date, // eslint-disable-line @typescript-eslint/no-unused-vars
fromTime: Moment, // eslint-disable-line @typescript-eslint/no-unused-vars
toTime: Moment, // eslint-disable-line @typescript-eslint/no-unused-vars
maxCount: number = 50, // eslint-disable-line @typescript-eslint/no-unused-vars
offset: number = 0, // eslint-disable-line @typescript-eslint/no-unused-vars
): Promise<PaginatedTiles> {
Expand All @@ -50,8 +51,8 @@ export class AbstractLayer {

public async findFlyovers(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxFindTilesRequests: number = 50,
tilesPerRequest: number = 50,
): Promise<FlyoverInterval[]> {
Expand All @@ -62,7 +63,7 @@ export class AbstractLayer {
throw new Error('Currently, only EPSG:4326 in findFlyovers');
}

const orbitTimeMS = this.dataset.orbitTimeMinutes * 60 * 1000;
const orbitTimeS = this.dataset.orbitTimeMinutes * 60;
const bboxGeometry: Geom = this.roundCoordinates([
[
[bbox.minX, bbox.minY],
Expand Down Expand Up @@ -109,10 +110,10 @@ export class AbstractLayer {
}

// append the tile to flyovers:
const prevDateMS = flyovers[flyoverIndex].fromTime.getTime();
const currDateMS = tiles[tileIndex].sensingTime.getTime();
const diffMS = Math.abs(prevDateMS - currDateMS);
if (diffMS > orbitTimeMS) {
const prevDateS = flyovers[flyoverIndex].fromTime.unix();
const currDateS = tiles[tileIndex].sensingTime.unix();
const diffS = Math.abs(prevDateS - currDateS);
if (diffS > orbitTimeS) {
// finish the old flyover:
try {
flyovers[flyoverIndex].coveragePercent = this.calculateCoveragePercent(
Expand Down
7 changes: 4 additions & 3 deletions src/layer/AbstractSentinelHubV1OrV2Layer.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import axios from 'axios';
import { stringify } from 'query-string';
import moment, { Moment } from 'moment';

import { BBox } from 'src/bbox';
import { GetMapParams, ApiType, PaginatedTiles } from 'src/layer/const';
Expand Down Expand Up @@ -68,8 +69,8 @@ export class AbstractSentinelHubV1OrV2Layer extends AbstractLayer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount: number = 50,
offset: number = 0,
): Promise<PaginatedTiles> {
Expand Down Expand Up @@ -98,7 +99,7 @@ export class AbstractSentinelHubV1OrV2Layer extends AbstractLayer {
return {
tiles: responseTiles.map(tile => ({
geometry: tile.tileDrawRegionGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: this.extractFindTilesMeta(tile),
})),
hasMore: response.data.hasMore,
Expand Down
11 changes: 6 additions & 5 deletions src/layer/AbstractSentinelHubV3Layer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,5 @@
import axios, { AxiosRequestConfig } from 'axios';
import moment, { Moment } from 'moment';

import { getAuthToken, isAuthTokenSet } from 'src/auth';
import { BBox } from 'src/bbox';
Expand Down Expand Up @@ -150,16 +151,16 @@ export class AbstractSentinelHubV3Layer extends AbstractLayer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
const response = await this.fetchTiles(bbox, fromTime, toTime, maxCount, offset);
return {
tiles: response.data.tiles.map(tile => ({
geometry: tile.dataGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: {},
})),
hasMore: response.data.hasMore,
Expand All @@ -168,8 +169,8 @@ export class AbstractSentinelHubV3Layer extends AbstractLayer {

protected fetchTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount: number = 1,
offset: number = 0,
maxCloudCoverPercent?: number | null,
Expand Down
8 changes: 5 additions & 3 deletions src/layer/AbstractSentinelHubV3WithCCLayer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import moment, { Moment } from 'moment';

import { BBox } from 'src/bbox';
import { PaginatedTiles } from 'src/layer/const';
import { AbstractSentinelHubV3Layer } from './AbstractSentinelHubV3Layer';
Expand All @@ -22,8 +24,8 @@ export class AbstractSentinelHubV3WithCCLayer extends AbstractSentinelHubV3Layer

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
Expand All @@ -38,7 +40,7 @@ export class AbstractSentinelHubV3WithCCLayer extends AbstractSentinelHubV3Layer
return {
tiles: response.data.tiles.map(tile => ({
geometry: tile.dataGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: {
cloudCoverPercent: tile.cloudCoverPercentage,
},
Expand Down
8 changes: 5 additions & 3 deletions src/layer/BYOCLayer.ts
Original file line number Diff line number Diff line change
@@ -1,4 +1,6 @@
import { AxiosRequestConfig } from 'axios';
import moment, { Moment } from 'moment';

import { BBox } from 'src/bbox';
import { PaginatedTiles } from 'src/layer/const';
import { DATASET_BYOC } from 'src/layer/dataset';
Expand Down Expand Up @@ -51,8 +53,8 @@ export class BYOCLayer extends AbstractSentinelHubV3Layer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
Expand All @@ -78,7 +80,7 @@ export class BYOCLayer extends AbstractSentinelHubV3Layer {
tiles: response.data.tiles.map(tile => {
return {
geometry: tile.dataGeometry,
sensingTime: tile.sensingTime,
sensingTime: moment.utc(tile.sensingTime),
meta: {
cloudCoverPercent: tile.cloudCoverPercentage,
},
Expand Down
8 changes: 5 additions & 3 deletions src/layer/S1GRDAWSEULayer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import moment, { Moment } from 'moment';

import { BBox } from 'src/bbox';
import { BackscatterCoeff, PaginatedTiles } from 'src/layer/const';
import { ProcessingPayload } from 'src/layer/processing';
Expand Down Expand Up @@ -108,8 +110,8 @@ export class S1GRDAWSEULayer extends AbstractSentinelHubV3Layer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
Expand All @@ -135,7 +137,7 @@ export class S1GRDAWSEULayer extends AbstractSentinelHubV3Layer {
return {
tiles: response.data.tiles.map(tile => ({
geometry: tile.dataGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: {
orbitDirection: tile.orbitDirection,
polarization: tile.polarization,
Expand Down
8 changes: 5 additions & 3 deletions src/layer/S3OLCILayer.ts
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import moment, { Moment } from 'moment';

import { BBox } from 'src/bbox';
import { PaginatedTiles } from 'src/layer/const';
import { DATASET_S3OLCI } from 'src/layer/dataset';
Expand All @@ -8,16 +10,16 @@ export class S3OLCILayer extends AbstractSentinelHubV3Layer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
const response = await this.fetchTiles(bbox, fromTime, toTime, maxCount, offset);
return {
tiles: response.data.tiles.map(tile => ({
geometry: tile.dataGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: {},
})),
hasMore: response.data.hasMore,
Expand Down
7 changes: 4 additions & 3 deletions src/layer/S3SLSTRLayer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@ import { DATASET_S3SLSTR } from 'src/layer/dataset';
import { AbstractSentinelHubV3Layer } from 'src/layer/AbstractSentinelHubV3Layer';
import { OrbitDirection } from 'src';
import { ProcessingPayload } from 'src/layer/processing';
import moment, { Moment } from 'moment';

type S3SLSTRFindTilesDatasetParameters = {
type?: string;
Expand Down Expand Up @@ -48,8 +49,8 @@ export class S3SLSTRLayer extends AbstractSentinelHubV3Layer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
Expand All @@ -70,7 +71,7 @@ export class S3SLSTRLayer extends AbstractSentinelHubV3Layer {
return {
tiles: response.data.tiles.map(tile => ({
geometry: tile.dataGeometry,
sensingTime: new Date(tile.sensingTime),
sensingTime: moment.utc(tile.sensingTime),
meta: {
cloudCoverPercent: tile.cloudCoverPercentage,
orbitDirection: tile.orbitDirection,
Expand Down
7 changes: 4 additions & 3 deletions src/layer/S5PL2Layer.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,7 @@ import { PaginatedTiles } from 'src/layer/const';
import { DATASET_S5PL2 } from 'src/layer/dataset';
import { AbstractSentinelHubV3Layer } from 'src/layer/AbstractSentinelHubV3Layer';
import { ProcessingPayload } from 'src/layer/processing';
import moment, { Moment } from 'moment';

/*
S-5P is a bit special in that we need to supply productType when searching
Expand Down Expand Up @@ -63,8 +64,8 @@ export class S5PL2Layer extends AbstractSentinelHubV3Layer {

public async findTiles(
bbox: BBox,
fromTime: Date,
toTime: Date,
fromTime: Moment,
toTime: Moment,
maxCount?: number,
offset?: number,
): Promise<PaginatedTiles> {
Expand All @@ -89,7 +90,7 @@ export class S5PL2Layer extends AbstractSentinelHubV3Layer {
tiles: response.data.tiles.map(tile => {
return {
geometry: tile.tileDrawRegionGeometry,
sensingTime: tile.sensingTime,
sensingTime: moment.utc(tile.sensingTime),
meta: {},
};
}),
Expand Down
10 changes: 6 additions & 4 deletions src/layer/const.ts
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
import { BBox } from 'src/bbox';
import { Moment } from 'moment';
import { Polygon, MultiPolygon } from '@turf/helpers';

import { BBox } from 'src/bbox';

export type GetMapParams = {
bbox: BBox;
fromTime: Date;
Expand Down Expand Up @@ -50,7 +52,7 @@ export enum BackscatterCoeff {

export type Tile = {
geometry: Polygon | MultiPolygon;
sensingTime: Date;
sensingTime: Moment;
meta: Record<string, any>;
};

Expand All @@ -60,8 +62,8 @@ export type PaginatedTiles = {
};

export type FlyoverInterval = {
fromTime: Date;
toTime: Date;
fromTime: Moment;
toTime: Moment;
coveragePercent: number;
meta: Record<string, any>;
};
Expand Down

0 comments on commit 2425cab

Please sign in to comment.