Skip to content

Commit 5ce4ed9

Browse files
committed
Add temporarily named function for dealing with projection matching
Tests not working, some problems with custom projections.
1 parent 72cc6bb commit 5ce4ed9

File tree

1 file changed

+124
-128
lines changed

1 file changed

+124
-128
lines changed

src/mapml/layers/MapMLLayer.js

+124-128
Original file line numberDiff line numberDiff line change
@@ -1398,6 +1398,12 @@ export var MapMLLayer = L.Layer.extend({
13981398
}
13991399
function _processContent(content) {
14001400
var mapml = this.responseXML || content;
1401+
var base = new URL(
1402+
mapml.querySelector('map-base')
1403+
? mapml.querySelector('map-base').getAttribute('href')
1404+
: mapml.baseURI || this.responseURL,
1405+
this.responseURL
1406+
).href;
14011407
if (mapml.querySelector && mapml.querySelector('map-feature'))
14021408
layer._content = mapml;
14031409
if (!this.responseXML && this.responseText)
@@ -1406,147 +1412,137 @@ export var MapMLLayer = L.Layer.extend({
14061412
layer.error = 'true';
14071413
throw new Error('Error parsing content');
14081414
} else if (this.readyState === this.DONE && mapml.querySelector) {
1409-
// if everything is ok, continue with the processing
1410-
if (
1411-
this.readyState === this.DONE &&
1412-
mapml.querySelector &&
1413-
!mapml.querySelector('parsererror')
1414-
) {
1415-
setLayerTitle();
1416-
var serverExtent = mapml.querySelectorAll('map-extent'),
1417-
projection,
1418-
projectionMatch,
1419-
serverMeta;
1420-
1421-
if (!serverExtent.length) {
1422-
serverMeta = mapml.querySelector('map-meta[name=projection]');
1423-
}
1415+
setLayerTitle();
1416+
thinkOfAGoodName();
1417+
parseLicenseAndLegend();
1418+
setZoomInOrOutLinks();
1419+
resetTemplatedLayers();
1420+
processTiles();
1421+
M._parseStylesheetAsHTML(mapml, base, layer._container);
1422+
getExtentLayerControls();
1423+
layer._styles = getAlternateStyles();
1424+
layer._validateExtent();
1425+
copyRemoteContentToShadowRoot();
1426+
// update controls if needed based on mapml-viewer controls/controlslist attribute
1427+
if (layer._layerEl.parentElement) {
1428+
// if layer does not have a parent Element, do not need to set Controls
1429+
layer._layerEl.parentElement._toggleControls();
1430+
}
1431+
layer.fire('extentload', layer, false);
1432+
layer._layerEl.dispatchEvent(
1433+
new CustomEvent('extentload', { detail: layer, bubbles: true })
1434+
);
1435+
}
1436+
// local functions
1437+
function thinkOfAGoodName() {
1438+
var serverExtent = mapml.querySelectorAll('map-extent'),
1439+
projection,
1440+
projectionMatch,
1441+
serverMeta;
14241442

1425-
// check whether all map-extent elements have the same units
1426-
if (serverExtent.length >= 1) {
1427-
for (let i = 0; i < serverExtent.length; i++) {
1428-
if (
1429-
serverExtent[i].tagName.toLowerCase() === 'map-extent' &&
1430-
serverExtent[i].hasAttribute('units')
1431-
) {
1432-
projection = serverExtent[i].getAttribute('units');
1433-
}
1434-
projectionMatch =
1435-
projection && projection === layer.options.mapprojection;
1436-
if (!projectionMatch) {
1437-
break;
1438-
}
1439-
}
1440-
} else if (serverMeta) {
1443+
if (!serverExtent.length) {
1444+
serverMeta = mapml.querySelector('map-meta[name=projection]');
1445+
}
1446+
1447+
// check whether all map-extent elements have the same units
1448+
if (serverExtent.length >= 1) {
1449+
for (let i = 0; i < serverExtent.length; i++) {
14411450
if (
1442-
serverMeta.tagName.toLowerCase() === 'map-meta' &&
1443-
serverMeta.hasAttribute('content')
1451+
serverExtent[i].tagName.toLowerCase() === 'map-extent' &&
1452+
serverExtent[i].hasAttribute('units')
14441453
) {
1445-
projection = M._metaContentToObject(
1446-
serverMeta.getAttribute('content')
1447-
).content;
1448-
projectionMatch =
1449-
projection && projection === layer.options.mapprojection;
1454+
projection = serverExtent[i].getAttribute('units');
1455+
}
1456+
projectionMatch =
1457+
projection && projection === layer.options.mapprojection;
1458+
if (!projectionMatch) {
1459+
break;
14501460
}
1451-
} else {
1452-
// default projection set to parent projection when no map-meta projection element present
1453-
projection = layer.options.mapprojection;
1454-
projectionMatch = true;
1455-
serverMeta = projection;
1456-
console.log(
1457-
`A projection was not assigned to the '${layer._title}' Layer. Please specify a projection for that layer using a map-meta element. See more here - https://maps4html.org/web-map-doc/docs/elements/meta/`
1458-
);
1459-
// TODO: Add a more obvious warning.
14601461
}
1461-
1462-
var metaExtent = mapml.querySelector('map-meta[name=extent]'),
1463-
selectedAlternate =
1464-
!projectionMatch &&
1465-
mapml.querySelector(
1466-
'map-head map-link[rel=alternate][projection=' +
1467-
layer.options.mapprojection +
1468-
']'
1469-
),
1470-
base = new URL(
1471-
mapml.querySelector('map-base')
1472-
? mapml.querySelector('map-base').getAttribute('href')
1473-
: mapml.baseURI || this.responseURL,
1474-
this.responseURL
1475-
).href;
1476-
1462+
} else if (serverMeta) {
14771463
if (
1478-
!projectionMatch &&
1479-
selectedAlternate &&
1480-
selectedAlternate.hasAttribute('href')
1464+
serverMeta.tagName.toLowerCase() === 'map-meta' &&
1465+
serverMeta.hasAttribute('content')
14811466
) {
1482-
layer.fire(
1483-
'changeprojection',
1484-
{
1485-
href: new URL(selectedAlternate.getAttribute('href'), base).href
1486-
},
1487-
false
1467+
projection = M._metaContentToObject(
1468+
serverMeta.getAttribute('content')
1469+
).content;
1470+
projectionMatch =
1471+
projection && projection === layer.options.mapprojection;
1472+
}
1473+
} else {
1474+
// default projection set to parent projection when no map-meta projection element present
1475+
projection = layer.options.mapprojection;
1476+
projectionMatch = true;
1477+
serverMeta = projection;
1478+
console.log(
1479+
`A projection was not assigned to the '${layer._title}' Layer. Please specify a projection for that layer using a map-meta element. See more here - https://maps4html.org/web-map-doc/docs/elements/meta/`
1480+
);
1481+
// TODO: Add a more obvious warning.
1482+
}
1483+
1484+
var metaExtent = mapml.querySelector('map-meta[name=extent]'),
1485+
selectedAlternate =
1486+
!projectionMatch &&
1487+
mapml.querySelector(
1488+
'map-head map-link[rel=alternate][projection=' +
1489+
layer.options.mapprojection +
1490+
']'
14881491
);
1489-
return;
1490-
} else if (!serverMeta) {
1491-
layer._extent = {};
1492-
if (projectionMatch) {
1493-
layer._extent.crs = M[projection];
1494-
}
1495-
layer._extent._mapExtents = []; // stores all the map-extent elements in the layer
1496-
layer._extent._templateVars = []; // stores all template variables coming from all extents
1497-
for (let j = 0; j < serverExtent.length; j++) {
1498-
if (
1499-
serverExtent[j].querySelector(
1500-
'map-link[rel=tile],map-link[rel=image],map-link[rel=features],map-link[rel=query]'
1501-
) &&
1502-
serverExtent[j].hasAttribute('units')
1503-
) {
1504-
layer._extent._mapExtents.push(serverExtent[j]);
1505-
projectionMatch = projectionMatch || selectedAlternate;
1506-
let templateVars = _initTemplateVars.call(
1507-
layer,
1508-
serverExtent[j],
1509-
metaExtent,
1510-
projection,
1511-
mapml,
1512-
base,
1513-
projectionMatch
1514-
);
1515-
layer._extent._mapExtents[j]._templateVars = templateVars;
1516-
layer._extent._templateVars =
1517-
layer._extent._templateVars.concat(templateVars);
1518-
}
1519-
}
1520-
} else {
1521-
if (typeof serverMeta === 'string') {
1522-
// when map-meta projection not present for layer
1523-
layer._extent = { serverMeta };
1524-
} else {
1525-
// when map-meta projection present for layer
1526-
layer._extent = serverMeta;
1492+
1493+
if (
1494+
!projectionMatch &&
1495+
selectedAlternate &&
1496+
selectedAlternate.hasAttribute('href')
1497+
) {
1498+
layer.fire(
1499+
'changeprojection',
1500+
{
1501+
href: new URL(selectedAlternate.getAttribute('href'), base).href
1502+
},
1503+
false
1504+
);
1505+
return;
1506+
} else if (!serverMeta) {
1507+
layer._extent = {};
1508+
if (projectionMatch) {
1509+
layer._extent.crs = M[projection];
1510+
}
1511+
layer._extent._mapExtents = []; // stores all the map-extent elements in the layer
1512+
layer._extent._templateVars = []; // stores all template variables coming from all extents
1513+
for (let j = 0; j < serverExtent.length; j++) {
1514+
if (
1515+
serverExtent[j].querySelector(
1516+
'map-link[rel=tile],map-link[rel=image],map-link[rel=features],map-link[rel=query]'
1517+
) &&
1518+
serverExtent[j].hasAttribute('units')
1519+
) {
1520+
layer._extent._mapExtents.push(serverExtent[j]);
1521+
projectionMatch = projectionMatch || selectedAlternate;
1522+
let templateVars = _initTemplateVars.call(
1523+
layer,
1524+
serverExtent[j],
1525+
metaExtent,
1526+
projection,
1527+
mapml,
1528+
base,
1529+
projectionMatch
1530+
);
1531+
layer._extent._mapExtents[j]._templateVars = templateVars;
1532+
layer._extent._templateVars =
1533+
layer._extent._templateVars.concat(templateVars);
15271534
}
15281535
}
1529-
parseLicenseAndLegend();
1530-
setZoomInOrOutLinks();
1531-
resetTemplatedLayers();
1532-
processTiles();
1533-
M._parseStylesheetAsHTML(mapml, base, layer._container);
1534-
getExtentLayerControls();
1535-
layer._styles = getAlternateStyles();
1536-
layer._validateExtent();
1537-
copyRemoteContentToShadowRoot();
1538-
// update controls if needed based on mapml-viewer controls/controlslist attribute
1539-
if (layer._layerEl.parentElement) {
1540-
// if layer does not have a parent Element, do not need to set Controls
1541-
layer._layerEl.parentElement._toggleControls();
1536+
} else {
1537+
if (typeof serverMeta === 'string') {
1538+
// when map-meta projection not present for layer
1539+
layer._extent = { serverMeta };
1540+
} else {
1541+
// when map-meta projection present for layer
1542+
layer._extent = serverMeta;
15421543
}
15431544
}
1544-
layer.fire('extentload', layer, false);
1545-
layer._layerEl.dispatchEvent(
1546-
new CustomEvent('extentload', { detail: layer, bubbles: true })
1547-
);
15481545
}
1549-
// local functions
15501546
function getExtentLayerControls() {
15511547
// add multiple extents
15521548
if (layer._extent._mapExtents) {

0 commit comments

Comments
 (0)