Skip to content

Commit

Permalink
Added mapy
Browse files Browse the repository at this point in the history
  • Loading branch information
extic committed Dec 14, 2022
1 parent e0d4d4e commit 066300f
Show file tree
Hide file tree
Showing 13 changed files with 704 additions and 410 deletions.
1 change: 1 addition & 0 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -25,3 +25,4 @@ If you like this application, I would very much appriciate your donation as it g
- Galil Tahton - https://v5.gis-net.co.il/v5/GalilTachton
- Tel Aviv - https://gisn.tel-aviv.gov.il/iView2js4/index.aspx
- Haifa - https://gis.haifa.muni.il/haifa_html5/
- Mapy - https://en.mapy.cz/
837 changes: 462 additions & 375 deletions package-lock.json

Large diffs are not rendered by default.

18 changes: 13 additions & 5 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "map-downloader",
"productName": "MapDownloader",
"version": "1.0.1",
"version": "1.0.2",
"main": "dist/main/index.cjs",
"author": "Barak Levinson",
"license": "MIT",
Expand All @@ -23,17 +23,25 @@
"@vitejs/plugin-vue": "^2.3.2",
"@vue/eslint-config-typescript": "^11.0.0",
"electron": "19.0.7",
"electron-builder": "^23.0.3",
"electron-builder": "^23.3.3",
"electron-fetch": "^1.7.4",
"eslint": "^8.17.0",
"eslint-config-prettier": "^8.5.0",
"eslint-plugin-prettier": "^4.2.1",
"eslint-plugin-vue": "^9.1.1",
"eslint-plugin-vue": "^9.5.1",
"nano-staged": "^0.8.0",
"pinia": "^2.0.14",
"pinia": "^2.0.21",
"prettier": "^2.7.1",
"pureimage": "^0.3.8",
"pureimage": "^0.3.14",
<<<<<<< HEAD
<<<<<<< HEAD
"sass": "^1.52.3",
=======
"sass": "^1.54.8",
>>>>>>> 92c03320f67969e19cc49a3fa51eef2f36d3d9c3
=======
"sass": "^1.54.8",
>>>>>>> 92c03320f67969e19cc49a3fa51eef2f36d3d9c3
"simple-git-hooks": "^2.8.0",
"typescript": "^4.7.4",
"vite": "^2.9.12",
Expand Down
6 changes: 4 additions & 2 deletions packages/common/maps/galil-tahton.data.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as pimage from "pureimage";
import { Bitmap } from "pureimage/types/bitmap";
import { Readable } from "stream";
import { MapData } from "./map.data";
import { MapData, UrlUsageType } from "./map.data";

export const mapDataGalilTahton: MapData = {
name: "Galil Tahton",

urlProvider: (mapType: string, zoomLevel: number, row: number, col: number): string => {
urlProvider: async (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number): Promise<string> => {
const zoomLevelStr = (zoomLevel + 4).toString();
return `https://v5.gis-net.co.il/proxy/proxy.ashx?http://10.237.72.71:8080/geoserver/gwc/service/wmts?SERVICE=WMTS&VERSION=1.0.0&REQUEST=GetTile&LAYER=Galil_tachton_2020:2020&STYLE=raster&FORMAT=image/jpeg&TILEMATRIXSET=Galil_tachton&TILEMATRIX=Galil_tachton:${zoomLevelStr}&TILEROW=${row}&TILECOL=${col}`;
},
Expand All @@ -25,6 +25,8 @@ export const mapDataGalilTahton: MapData = {

supportedMapTypes: ["Satellite"],

showScale: true,

zoomLayers: [
{
scale: 32000,
Expand Down
6 changes: 4 additions & 2 deletions packages/common/maps/govmap.data.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as pimage from "pureimage";
import { Bitmap } from "pureimage/types/bitmap";
import { Readable } from "stream";
import { MapData } from "./map.data";
import { MapData, UrlUsageType } from "./map.data";

export const mapDataGovMap: MapData = {
name: "GovMap",

urlProvider: (mapType: string, zoomLevel: number, row: number, col: number): string => {
urlProvider: async (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number): Promise<string> => {
let zoomLevelStr = zoomLevel.toString(10).padStart(2, "0");
const rowStr = row.toString(16).padStart(8, "0");
const colStr = col.toString(16).padStart(8, "0");
Expand Down Expand Up @@ -36,6 +36,8 @@ export const mapDataGovMap: MapData = {

supportedMapTypes: ["Satellite", "Street & Buildings"],

showScale: true,

zoomLayers: [
{
scale: 3000000,
Expand Down
8 changes: 5 additions & 3 deletions packages/common/maps/haifa.data.ts
Original file line number Diff line number Diff line change
@@ -1,16 +1,16 @@
import * as pimage from "pureimage";
import { Bitmap } from "pureimage/types/bitmap";
import { Readable } from "stream";
import { MapData } from "./map.data";
import { MapData, UrlUsageType } from "./map.data";

export const mapDataHaifa: MapData = {
name: "Haifa",

urlProvider: (mapType: string, zoomLevel: number, row: number, col: number): string => {
urlProvider: async (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number): Promise<string> => {
let zoomLevelStr = zoomLevel.toString();
const rowStr = row.toString();
const colStr = col.toString();
return `https://gis.haifa.muni.il/arcgis/rest/services/haifa_orto_2020_new/MapServer/tile/${zoomLevelStr}/${rowStr}/${colStr}`;
return `https://gisserver.haifa.muni.il/arcgiswebadaptor/rest/services/Orthophoto_202204/MapServer/tile/${zoomLevelStr}/${rowStr}/${colStr}?blankTile=false`;
},

zoomLevelProvider: (zoomLevel: number): string => {
Expand Down Expand Up @@ -43,6 +43,8 @@ export const mapDataHaifa: MapData = {

supportedMapTypes: ["Satellite"],

showScale: false,

zoomLayers: [
{
scale: 0,
Expand Down
12 changes: 11 additions & 1 deletion packages/common/maps/map.data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,6 +3,8 @@ import { mapDataTelAviv } from "./tel-aviv.data"
import { mapDataGalilTahton } from "./galil-tahton.data"
import { mapDataHaifa } from "./haifa.data"
import { mapDataGovMap } from "./govmap.data"
import { mapDataMapy } from "./mapy.data"
import { viewDepthKey } from "vue-router"

export type ZoomLayer = {
readonly scale: number
Expand All @@ -12,13 +14,20 @@ export type ZoomLayer = {
readonly centerTileOffsetY: number
}

export enum UrlUsageType {
VIEW,
DOWNLOAD,
}

export type MapData = {
name: string;
urlProvider: (mapType: string, zoomLevel: number, row: number, col: number) => string;
urlProvider: (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number) => Promise<string>;
getDownloaderHeaders?: () => any,
zoomLevelProvider: (zoomLevel: number) => string,
zoomFactorProvider: (zoomLevel: number, zoomIn: boolean) => number,
decode: (mapType: string, buffer: Buffer) => Promise<Bitmap>
supportedMapTypes: string[],
showScale: boolean,
zoomLayers: ZoomLayer[];
}

Expand All @@ -27,4 +36,5 @@ export const maps = [
mapDataGalilTahton,
mapDataHaifa,
mapDataTelAviv,
mapDataMapy,
]
140 changes: 140 additions & 0 deletions packages/common/maps/mapy.data.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,140 @@
import * as pimage from "pureimage";
import { Bitmap } from "pureimage/types/bitmap";
import { Readable } from "stream";
import { MapData, UrlUsageType } from "./map.data";

export const mapDataMapy: MapData = {
name: "Mapy",

urlProvider: async (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number): Promise<string> => {
if (usageType === UrlUsageType.VIEW) {
return `https://mapserver.mapy.cz/base-en/${zoomLevel + 7}-${col}-${row}`;
}

if (mapType === "Street") {
return `https://mapserver.mapy.cz/base-en/${zoomLevel + 7}-${col}-${row}`;
} else {
return `https://mapserver.mapy.cz/bing/${zoomLevel + 7}-${col}-${row}`;

// return await ipcRenderer.invoke("http:request", `https://mapserver.mapy.cz/bing/${zoomLevel + 7}-${col}-${row}`)
}
},

getDownloaderHeaders: () => {
return {
headers: {
referer: "https://en.mapy.cz/",
},
};
},

zoomLevelProvider: (zoomLevel: number): string => {
return zoomLevel.toString();
},

zoomFactorProvider: (zoomLevel: number, zoomIn: boolean): number => {
return 2;
},

decode: async (mapType: string, buffer: Buffer): Promise<Bitmap> => {
return await (mapType === "Street" ? pimage.decodePNGFromStream(Readable.from(buffer)) : pimage.decodeJPEGFromStream(Readable.from(buffer)));
},

supportedMapTypes: ["Street", "Satellite (download only)"],

showScale: false,

zoomLayers: [
{
scale: 1,
centerTileX: 76,
centerTileY: 51,
centerTileOffsetX: 94,
centerTileOffsetY: 241,
},
{
scale: 2,
centerTileX: 152,
centerTileY: 103,
centerTileOffsetX: 201,
centerTileOffsetY: 178,
},
{
scale: 3,
centerTileX: 305,
centerTileY: 207,
centerTileOffsetX: 121,
centerTileOffsetY: 196,
},
{
scale: 4,
centerTileX: 610,
centerTileY: 415,
centerTileOffsetX: 241,
centerTileOffsetY: 136,
},
{
scale: 5,
centerTileX: 1221,
centerTileY: 831,
centerTileOffsetX: 235,
centerTileOffsetY: 19,
},
{
scale: 6,
centerTileX: 2443,
centerTileY: 1662,
centerTileOffsetX: 212,
centerTileOffsetY: 49,
},
{
scale: 7,
centerTileX: 4887,
centerTileY: 3324,
centerTileOffsetX: 169,
centerTileOffsetY: 98,
},
{
scale: 8,
centerTileX: 9775,
centerTileY: 6648,
centerTileOffsetX: 82,
centerTileOffsetY: 197,
},
{
scale: 9,
centerTileX: 19550,
centerTileY: 13297,
centerTileOffsetX: 164,
centerTileOffsetY: 140,
},
{
scale: 10,
centerTileX: 39101,
centerTileY: 26595,
centerTileOffsetX: 73,
centerTileOffsetY: 24,
},
{
scale: 11,
centerTileX: 78202,
centerTileY: 53190,
centerTileOffsetX: 191,
centerTileOffsetY: 12,
},
{
scale: 12,
centerTileX: 156405,
centerTileY: 106380,
centerTileOffsetX: 38,
centerTileOffsetY: 99,
},
{
scale: 13,
centerTileX: 312810,
centerTileY: 212760,
centerTileOffsetX: 70,
centerTileOffsetY: 212,
},
],
};
6 changes: 4 additions & 2 deletions packages/common/maps/tel-aviv.data.ts
Original file line number Diff line number Diff line change
@@ -1,12 +1,12 @@
import * as pimage from "pureimage";
import { Bitmap } from "pureimage/types/bitmap";
import { Readable } from "stream";
import { MapData } from "./map.data";
import { MapData, UrlUsageType } from "./map.data";

export const mapDataTelAviv: MapData = {
name: "Tel-Aviv",

urlProvider: (mapType: string, zoomLevel: number, row: number, col: number): string => {
urlProvider: async (usageType: UrlUsageType, mapType: string, zoomLevel: number, row: number, col: number): Promise<string> => {
let zoomLevelStr = zoomLevel + 13;
const rowStr = row.toString(10);
const colStr = col.toString(10);
Expand All @@ -27,6 +27,8 @@ export const mapDataTelAviv: MapData = {

supportedMapTypes: ["Satellite"],

showScale: true,

zoomLayers: [
{
scale: 72000,
Expand Down
13 changes: 7 additions & 6 deletions packages/main/downloader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@ import * as fs from "fs";
import { BrowserWindow } from "electron";
import crypto from "crypto";
import fetch from "electron-fetch";
import { MapData, maps } from "../common/maps/map.data";
import { MapData, maps, UrlUsageType } from "../common/maps/map.data";
import { DownloadData } from "../common/download";

export const downloadOptions = {
Expand Down Expand Up @@ -41,9 +41,11 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>

console.log(`Downloading images: ${(progress * 100).toFixed(2)}%, x=${x}/${maxX}, y=${y}/${maxY}`);

const url = getTileUrl(map, request.zoomLevel, request.startRow + y, request.startCol + x, request.mapType);
const url = await getTileUrl(map, request.zoomLevel, request.startRow + y, request.startCol + x, request.mapType);
try {
const response = await fetch(url); //, { responseType: "arraybuffer" });
const headers = map.getDownloaderHeaders ? map.getDownloaderHeaders() : {};

const response = await fetch(url, headers); //, { responseType: "arraybuffer" });
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const img1 = await map.decode(request.mapType, buffer);
Expand Down Expand Up @@ -87,7 +89,6 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
});
};

const getTileUrl = (map: MapData, zoomLevel: number, row: number, col: number, mapType: string) => {
// console.log(map.urlProvider(mapType, zoomLevel, row, col));
return map.urlProvider(mapType, zoomLevel, row, col);
const getTileUrl = async (map: MapData, zoomLevel: number, row: number, col: number, mapType: string) => {
return await map.urlProvider(UrlUsageType.DOWNLOAD, mapType, zoomLevel, row, col);
};
3 changes: 3 additions & 0 deletions packages/main/event-registrar.ts
Original file line number Diff line number Diff line change
@@ -1,5 +1,6 @@
import { BrowserWindow, ipcMain, App } from "electron";
import { downloadMap, downloadOptions } from "./downloader";
import { handleHttpRequest } from "./http-request.service";

export const eventRegistrar = {
registerEvents: (win: BrowserWindow, app: App) => {
Expand All @@ -14,5 +15,7 @@ export const eventRegistrar = {
ipcMain.on("get-app-version", () => {
win.webContents.send("app-version", app.getVersion());
});

ipcMain.handle('http:request', handleHttpRequest);
},
};
23 changes: 23 additions & 0 deletions packages/main/http-request.service.ts
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
import { IpcMainInvokeEvent } from "electron";
import fetch from "electron-fetch";

export async function handleHttpRequest(event: IpcMainInvokeEvent, url: string): Promise<ArrayBuffer> {
console.log("Getting", url);
const response = await fetch(url, {
headers: {
referer: "https://en.mapy.cz/"
}
});
const arrayBuffer = await response.arrayBuffer()
return arrayBuffer;

// const buffer = Buffer.from(await response.arrayBuffer());
// const base64String = buffer.toString('base64');


// // console.log("data:image/gif;base64," + base64String);


// return "data:image/gif;base64," + base64String;
}

Loading

0 comments on commit 066300f

Please sign in to comment.