Skip to content

Commit

Permalink
Added downloading contour lines
Browse files Browse the repository at this point in the history
  • Loading branch information
extic committed May 27, 2023
1 parent 1067dea commit e9e24c9
Show file tree
Hide file tree
Showing 6 changed files with 47 additions and 2 deletions.
4 changes: 4 additions & 0 deletions packages/common/download.ts
Original file line number Diff line number Diff line change
Expand Up @@ -10,4 +10,8 @@ export type DownloadData = {
endCol: number;
mapName: string;
mapType: string;
layerMapWidth?: number;
layerMapHeight?: number;
layerStartX?: number;
layerStartY?: number;
};
2 changes: 1 addition & 1 deletion packages/common/maps/govmap.data.ts
Original file line number Diff line number Diff line change
Expand Up @@ -178,7 +178,7 @@ export const mapDataGovMap: MapData = {
const bottomRightCoordinates = mapDataGovMap.coordinateProvider!!(zoomLayer, bottomRightPixelCoordinates);
const layerCoordinates = `${topLeftCoordinates.x},${bottomRightCoordinates.y},${bottomRightCoordinates.x},${topLeftCoordinates.y}`

return `https://ags.govmap.gov.il/proxy/proxy.ashx?http://govmap/arcgis/rest/services/AdditionalData/MapServer/export?dynamicLayers=%5B%7B%22id%22%3A175%2C%22name%22%3A%22%D7%A7%D7%95%D7%95%D7%99%20%D7%92%D7%95%D7%91%D7%94%22%2C%22source%22%3A%7B%22type%22%3A%22mapLayer%22%2C%22mapLayerId%22%3A175%7D%2C%22minScale%22%3A50000%2C%22maxScale%22%3A0%7D%5D&dpi=96&transparent=true&format=png32&layers=show%3A175&bbox=${layerCoordinates}&bboxSR=2039&imageSR=2039&size=${mapWidth}%2C${mapHeight}&f=image`
return `https://ags.govmap.gov.il/proxy/proxy.ashx?http://govmap/arcgis/rest/services/AdditionalData/MapServer/export?dynamicLayers=%5B%7B%22id%22%3A179%2C%22name%22%3A%22%D7%A7%D7%95%D7%95%D7%99%20%D7%92%D7%95%D7%91%D7%94%22%2C%22source%22%3A%7B%22type%22%3A%22mapLayer%22%2C%22mapLayerId%22%3A179%7D%2C%22minScale%22%3A50000%2C%22maxScale%22%3A0%7D%5D&dpi=96&transparent=true&format=png32&layers=show%3A175&bbox=${layerCoordinates}&bboxSR=2039&imageSR=2039&size=${mapWidth}%2C${mapHeight}&f=image`
};
},
};
Expand Down
28 changes: 27 additions & 1 deletion packages/main/downloader.ts
Original file line number Diff line number Diff line change
Expand Up @@ -5,6 +5,7 @@ import crypto from "crypto";
import fetch from "electron-fetch";
import { MapData, maps, UrlResult, UrlUsageType } from "../common/maps/map.data";
import { DownloadData } from "../common/download";
import { Readable } from "stream";

export const downloadOptions = {
canceled: false,
Expand All @@ -31,6 +32,8 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
const overallImg = pimage.make(croppedWidth, croppedHeight, {});
const overallCtx = overallImg.getContext("2d");

const headers = map.getDownloaderHeaders ? map.getDownloaderHeaders() : {};

for (let y = 0; y < maxY; y++) {
for (let x = 0; x < maxX; x++) {
if (downloadOptions.canceled) {
Expand All @@ -46,7 +49,7 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
const { url, unsupported } = await getTileUrl(map, request.zoomLevel, request.startRow + y, request.startCol + x, request.mapType);
try {
if (!unsupported) {
const headers = map.getDownloaderHeaders ? map.getDownloaderHeaders() : {};


const response = await fetch(url, headers); //, { responseType: "arraybuffer" });
const arrayBuffer = await response.arrayBuffer();
Expand All @@ -65,6 +68,7 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
}
}
}

}
} catch (error) {
// if (error instanceof AxiosError && error.response) {
Expand All @@ -78,6 +82,24 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
}
}

const layerUrl = getLayerUrl(map, request.zoomLevel, request.layerMapWidth!, request.layerMapHeight!, request.layerStartX!, request.layerStartY!);
if (layerUrl) {
console.log(layerUrl);
const response = await fetch(layerUrl, headers); //, { responseType: "arraybuffer" });
const arrayBuffer = await response.arrayBuffer();
const buffer = Buffer.from(arrayBuffer);
const img1 = await pimage.decodePNGFromStream(Readable.from(buffer))
const ctx = img1.getContext("2d");
let imageData = ctx.getImageData(0, 0, request.layerMapWidth!, request.layerMapHeight!);
for (let j = 0; j < request.layerMapHeight!; j++) {
for (let i = 0; i < request.layerMapWidth!; i++) {
overallCtx.fillPixelWithColor(i, j, imageData.getPixelRGBA(i, j));
}
}
}



console.log(`Downloading done`);

const fileName = `map-${crypto.randomUUID()}.png`;
Expand All @@ -96,3 +118,7 @@ export const downloadMap = async (win: BrowserWindow, request: DownloadData) =>
const getTileUrl = async (map: MapData, zoomLevel: number, row: number, col: number, mapType: string): Promise<UrlResult> => {
return await map.urlProvider(UrlUsageType.DOWNLOAD, mapType, zoomLevel, row, col);
};

const getLayerUrl = (map: MapData, zoomLevel: number, mapWidth: number, mapHeight: number, posLeft: number, posTop: number): string | undefined => {
return map.layerUrlProvider?.(map.zoomLayers[zoomLevel], mapWidth, mapHeight, posLeft, posTop) || undefined;
};
4 changes: 4 additions & 0 deletions packages/renderer/src/components/DownloadDialog.vue
Original file line number Diff line number Diff line change
Expand Up @@ -81,6 +81,10 @@ export default defineComponent({
endY: store.downloadData.endY,
mapName: store.downloadData.mapName,
mapType: store.downloadData.mapType,
layerMapWidth: store.downloadData.layerMapWidth,
layerMapHeight: store.downloadData.layerMapHeight,
layerStartX: store.downloadData.layerStartX,
layerStartY: store.downloadData.layerStartY,
});
}
});
Expand Down
6 changes: 6 additions & 0 deletions packages/renderer/src/components/MapView.vue
Original file line number Diff line number Diff line change
Expand Up @@ -205,7 +205,13 @@ export default defineComponent({
endY: mod(startY + store.cropHeight, 256),
mapName: store.map.name,
mapType: store.mapType,
layerMapWidth: store.cropWidth,
layerMapHeight: store.cropHeight,
layerStartX: store.posLeft - mapWidth / 2 + store.cropWidth / 2 + store.cropLeft,
layerStartY: store.posTop - mapHeight / 2 + store.cropHeight / 2 + store.cropTop,
});
console.log(store.cropLeft, store.cropTop, store.cropWidth, store.cropHeight);
};
const instance = getCurrentInstance();
Expand Down
5 changes: 5 additions & 0 deletions packages/renderer/src/store/map-store.ts
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,10 @@ const resetDownloadData = (): DownloadData => ({
endY: 0,
mapName: '',
mapType: '',
layerMapWidth: undefined,
layerMapHeight: undefined,
layerStartX: undefined,
layerStartY: undefined,
});


Expand Down Expand Up @@ -120,6 +124,7 @@ export const useMapStore = defineStore("map", {

setDownloadData(downloadData: DownloadData): void {
this._downloadData = downloadData;
console.log("downloadData", downloadData);

const tilesX = downloadData.endCol - downloadData.startCol + 1;
const tilesY = downloadData.endRow - downloadData.startRow + 1;
Expand Down

0 comments on commit e9e24c9

Please sign in to comment.