Procházet zdrojové kódy

Update bounds computation

Use D3's bounds computation per projection.
master
TheoryOfNekomata před 2 roky
rodič
revize
848a817436
12 změnil soubory, kde provedl 322 přidání a 16 odebrání
  1. +1
    -0
      .gitignore
  2. binární
      __fixtures__/gb.png
  3. binární
      __fixtures__/jp.png
  4. binární
      __fixtures__/mercator.png
  5. binární
      __fixtures__/ph.png
  6. binární
      __fixtures__/robinson.png
  7. binární
      __fixtures__/ru.png
  8. binární
      __fixtures__/sinusoidal.png
  9. binární
      __fixtures__/us.png
  10. binární
      __fixtures__/world.png
  11. +260
    -0
      assets/ne_10m_admin_0_countries.json
  12. +61
    -16
      src/index.ts

+ 1
- 0
.gitignore Zobrazit soubor

@@ -105,3 +105,4 @@ dist
.tern-port

.npmrc
assets/

binární
__fixtures__/gb.png Zobrazit soubor

Před Za
Šířka: 800  |  Výška: 406  |  Velikost: 112 KiB

binární
__fixtures__/jp.png Zobrazit soubor

Před Za
Šířka: 800  |  Výška: 406  |  Velikost: 108 KiB

binární
__fixtures__/mercator.png Zobrazit soubor

Před Za
Šířka: 461  |  Výška: 461  |  Velikost: 54 KiB

binární
__fixtures__/ph.png Zobrazit soubor

Před Za
Šířka: 200  |  Výška: 320  |  Velikost: 24 KiB Šířka: 800  |  Výška: 400  |  Velikost: 98 KiB

binární
__fixtures__/robinson.png Zobrazit soubor

Před Za
Šířka: 461  |  Výška: 234  |  Velikost: 54 KiB

binární
__fixtures__/ru.png Zobrazit soubor

Před Za
Šířka: 800  |  Výška: 406  |  Velikost: 112 KiB

binární
__fixtures__/sinusoidal.png Zobrazit soubor

Před Za
Šířka: 461  |  Výška: 231  |  Velikost: 46 KiB

binární
__fixtures__/us.png Zobrazit soubor

Před Za
Šířka: 800  |  Výška: 406  |  Velikost: 112 KiB

binární
__fixtures__/world.png Zobrazit soubor

Před Za
Šířka: 4608  |  Výška: 4608  |  Velikost: 7.1 MiB

+ 260
- 0
assets/ne_10m_admin_0_countries.json
Diff nebyl zobrazen, protože je příliš veliký
Zobrazit soubor


+ 61
- 16
src/index.ts Zobrazit soubor

@@ -1,6 +1,6 @@
import yargs from 'yargs';
import { hideBin } from 'yargs/helpers';
import { project, Bounds } from '@theoryofnekomata/orbis-core';
import { project, ProjectBounds } from '@theoryofnekomata/orbis-core';
import { writeFile } from 'fs/promises';
import { basename, dirname, resolve } from 'path';

@@ -8,10 +8,11 @@ type ProjectArgs = {
input: string,
projection: string,
output?: string,
bounds: Bounds,
bounds: ProjectBounds,
width?: number,
height?: number,
padding: [number, number],
country?: string,
};

const coerceNumber = (n?: string) => {
@@ -36,21 +37,62 @@ const coercePadding = (n?: string) => {
];
};

const coerceBounds = (n?: string): Bounds => {
const coerceBounds = (n?: string): ProjectBounds => {
if (typeof n !== 'string') {
return [
[-180, 90],
[180, -90],
] as Bounds;
return {
type: 'geojson',
value: {
type: 'Sphere',
},
};
}

return n
.split(';')
.map((p) => (
p
.split(',')
.map((c: string) => Number(c))
)) as Bounds;
const [boundsType, etcBounds] = n.split(':');

if (boundsType === 'geojson') {
const [geometryType, etcArgs] = etcBounds.split(';');

if (geometryType === 'Sphere') {
return {
type: boundsType,
value: {
type: geometryType,
},
};
}

if (geometryType === 'Polygon' || geometryType === 'MultiPolygon') {
return {
type: boundsType,
value: {
type: geometryType,
coordinates: JSON.parse(etcArgs),
},
};
}

return {
type: 'geojson',
value: {
type: 'Sphere',
},
};
}

if (boundsType === 'country') {
const [country] = etcBounds.split(';');
return {
type: boundsType,
value: country,
};
}

return {
type: 'geojson',
value: {
type: 'Sphere',
},
};
};

const main = async (argv: string | readonly string[]) => {
@@ -85,12 +127,15 @@ const main = async (argv: string | readonly string[]) => {
.coerce('height', coerceNumber)
.option('padding', {
alias: 'p',
default: [0, 0],
default: '0;0',
})
.coerce('padding', coercePadding)
.option('bounds', {
alias: 'b',
default: [[-180, 90], [180, -90]],
default: 'geojson:Sphere',
})
.option('country', {
alias: 'c',
})
.coerce('bounds', coerceBounds),
handler: async (projectArgvRaw) => {


Načítá se…
Zrušit
Uložit