mirror of
https://github.com/dbgate/dbgate
synced 2024-11-07 20:26:23 +00:00
fixed No mapping #575
This commit is contained in:
parent
a98d5d29ca
commit
731c4c046c
@ -393,7 +393,7 @@
|
|||||||
import { apiCall } from '../utility/api';
|
import { apiCall } from '../utility/api';
|
||||||
import getElectron from '../utility/getElectron';
|
import getElectron from '../utility/getElectron';
|
||||||
import { isCtrlOrCommandKey, isMac } from '../utility/common';
|
import { isCtrlOrCommandKey, isMac } from '../utility/common';
|
||||||
import { selectionCouldBeShownOnMap } from '../elements/SelectionMapView.svelte';
|
import { createGeoJsonFromSelection, selectionCouldBeShownOnMap } from '../elements/SelectionMapView.svelte';
|
||||||
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
|
import ErrorMessageModal from '../modals/ErrorMessageModal.svelte';
|
||||||
import EditCellDataModal, { shouldOpenMultilineDialog } from '../modals/EditCellDataModal.svelte';
|
import EditCellDataModal, { shouldOpenMultilineDialog } from '../modals/EditCellDataModal.svelte';
|
||||||
import { getDatabaseInfo, useDatabaseStatus } from '../utility/metadataLoaders';
|
import { getDatabaseInfo, useDatabaseStatus } from '../utility/metadataLoaders';
|
||||||
@ -682,13 +682,21 @@
|
|||||||
showModal(ErrorMessageModal, { message: 'There is nothing to be shown on map' });
|
showModal(ErrorMessageModal, { message: 'There is nothing to be shown on map' });
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
const geoJson = createGeoJsonFromSelection(selection);
|
||||||
|
if (!geoJson) {
|
||||||
|
showModal(ErrorMessageModal, { message: 'There is nothing to be shown on map' });
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
openNewTab(
|
openNewTab(
|
||||||
{
|
{
|
||||||
title: 'Map',
|
title: 'Map',
|
||||||
icon: 'img map',
|
icon: 'img map',
|
||||||
tabComponent: 'MapTab',
|
tabComponent: 'MapTab',
|
||||||
},
|
},
|
||||||
{ editor: selection.map(x => _.omit(x, ['engine'])) }
|
{ editor: geoJson }
|
||||||
);
|
);
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
@ -17,6 +17,7 @@
|
|||||||
|
|
||||||
function addObjectToMap() {
|
function addObjectToMap() {
|
||||||
if (!map) return;
|
if (!map) return;
|
||||||
|
if (!geoJson) return;
|
||||||
|
|
||||||
for (const layer of layers) {
|
for (const layer of layers) {
|
||||||
layer.remove();
|
layer.remove();
|
||||||
|
@ -11,10 +11,10 @@
|
|||||||
return res;
|
return res;
|
||||||
}
|
}
|
||||||
export function findLatPaths(obj) {
|
export function findLatPaths(obj) {
|
||||||
return findLatLonPaths(obj, x => x.includes('lat'));
|
return findLatLonPaths(obj, x => x.toLowerCase()?.includes('lat'));
|
||||||
}
|
}
|
||||||
export function findLonPaths(obj) {
|
export function findLonPaths(obj) {
|
||||||
return findLatLonPaths(obj, x => x.includes('lon') || x.includes('lng'));
|
return findLatLonPaths(obj, x => x.toLowerCase()?.includes('lon') || x.toLowerCase()?.includes('lng'));
|
||||||
}
|
}
|
||||||
export function findAllObjectPaths(obj) {
|
export function findAllObjectPaths(obj) {
|
||||||
return findLatLonPaths(obj, (_k, v) => v != null && !_.isNaN(Number(v)));
|
return findLatLonPaths(obj, (_k, v) => v != null && !_.isNaN(Number(v)));
|
||||||
@ -33,21 +33,6 @@
|
|||||||
}
|
}
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
</script>
|
|
||||||
|
|
||||||
<script lang="ts">
|
|
||||||
import _ from 'lodash';
|
|
||||||
import 'leaflet/dist/leaflet.css';
|
|
||||||
import wellknown from 'wellknown';
|
|
||||||
import { isWktGeometry, stringifyCellValue } from 'dbgate-tools';
|
|
||||||
import MapView from './MapView.svelte';
|
|
||||||
|
|
||||||
export let selection;
|
|
||||||
|
|
||||||
export let latitudeField = '';
|
|
||||||
export let longitudeField = '';
|
|
||||||
|
|
||||||
let geoJson;
|
|
||||||
|
|
||||||
function createColumnsTable(cells) {
|
function createColumnsTable(cells) {
|
||||||
if (cells.length == 0) return '';
|
if (cells.length == 0) return '';
|
||||||
@ -56,9 +41,10 @@
|
|||||||
.join('\n')}</table>`;
|
.join('\n')}</table>`;
|
||||||
}
|
}
|
||||||
|
|
||||||
function createGeoJson() {
|
export function createGeoJsonFromSelection(selection, latitudeFieldDef = null, longitudeFieldDef = null) {
|
||||||
const selectedRows = _.groupBy(selection || [], 'row');
|
const selectedRows = _.groupBy(selection || [], 'row');
|
||||||
|
|
||||||
|
console.log('ROWS', selectedRows);
|
||||||
const features = [];
|
const features = [];
|
||||||
|
|
||||||
for (const rowKey of _.keys(selectedRows)) {
|
for (const rowKey of _.keys(selectedRows)) {
|
||||||
@ -66,6 +52,9 @@
|
|||||||
|
|
||||||
const geoValues = cells.map(x => x.value).filter(isWktGeometry);
|
const geoValues = cells.map(x => x.value).filter(isWktGeometry);
|
||||||
|
|
||||||
|
const latitudeField = latitudeFieldDef ?? findLatPaths(cells[0].rowData)[0];
|
||||||
|
const longitudeField = longitudeFieldDef ?? findLonPaths(cells[0].rowData)[0];
|
||||||
|
|
||||||
const lat = latitudeField ? Number(_.get(cells[0].rowData, latitudeField)) : NaN;
|
const lat = latitudeField ? Number(_.get(cells[0].rowData, latitudeField)) : NaN;
|
||||||
const lon = longitudeField ? Number(_.get(cells[0].rowData, longitudeField)) : NaN;
|
const lon = longitudeField ? Number(_.get(cells[0].rowData, longitudeField)) : NaN;
|
||||||
|
|
||||||
@ -97,14 +86,37 @@
|
|||||||
}
|
}
|
||||||
|
|
||||||
if (features.length == 0) {
|
if (features.length == 0) {
|
||||||
return;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
geoJson = {
|
return {
|
||||||
type: 'FeatureCollection',
|
type: 'FeatureCollection',
|
||||||
features,
|
features,
|
||||||
};
|
};
|
||||||
}
|
}
|
||||||
|
</script>
|
||||||
|
|
||||||
|
<script lang="ts">
|
||||||
|
import _ from 'lodash';
|
||||||
|
import 'leaflet/dist/leaflet.css';
|
||||||
|
import wellknown from 'wellknown';
|
||||||
|
import { isWktGeometry, stringifyCellValue } from 'dbgate-tools';
|
||||||
|
import MapView from './MapView.svelte';
|
||||||
|
|
||||||
|
export let selection;
|
||||||
|
|
||||||
|
export let latitudeField = '';
|
||||||
|
export let longitudeField = '';
|
||||||
|
|
||||||
|
let geoJson;
|
||||||
|
|
||||||
|
function createGeoJson() {
|
||||||
|
const res = createGeoJsonFromSelection(selection, latitudeField, longitudeField);
|
||||||
|
|
||||||
|
if (res) {
|
||||||
|
geoJson = res;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
$: {
|
$: {
|
||||||
selection;
|
selection;
|
||||||
|
Loading…
Reference in New Issue
Block a user