Openlayers 无法传递 innerHTML 内容
Openlayers unable to pass innerHTML content
我是 OpenLayers 的新手。有一个图像列表及其顺序来构建完整图像。但是没有任何坐标。
所以我创建了两个 div:一个用于地图(作为外部 div),另一个用于显示图像 table。
使用地图时,页面变成空白。
下面html代码:
<body>
<div id="map" class="map" style="border: 1px;">
<div id="im"> </div>
</div>
<script src="main.js"></script>
</body>
main.js代码:
var imgSrc = [
image.a0, image.a1, image.a2, image.a3, image.a4, image.a5, image.a6, image.a7, image.a8, image.a9,
];
var image1 = getTable();
var map = new Map({
layers: [
new ImageLayer({
source: image1
}),
],
target: 'map',
view: new View({
center: [0,0],
zoom: 1,
maxZoom: 8,
}),
});
//---------
// getTable();
//document.getElementById('im').innerHTML = function(){
function getTable(){
var count = 0;
document.getElementById('im').innerHTML = function(){
function toTable(){
var i, html = "";
for(i=0; i<15; i++){
html += toTr(i);
}
return "<table cellspacing='0' cellpadding='0'>" + html +"</table>";
}
function toTr(rows){
return "<tr>" + toTd() + "</tr>";
}
function toTd(){
var i, td = "";
for(i=0; i<10; i++){
var filePath = count+"_Tile_2.bmp";
//alert(filePath)
td += "<td style='border:none;'><img src=\"" + imgSrc[count] + "\" /></td>";
count += 1;
}
return td;
}
return toTable();
}();
}
如果我只调用 getTable() 并注释掉 ol 代码,那么我就能正确获取图像。
感谢任何帮助。
您不能只将图像放入地图目标并期望它起作用。 OpenLayers 会为你做这件事。
我在下面做了一个例子,其中一张图片被分成四部分,并使用 OpenLayers 来显示它。请参阅末尾的代码和框 link 以了解工作实施。
您需要根据要显示的x/y/z个位置来命名图片。在这种情况下,我有 5 张图片。
sintel-0-0-0.png
sintel-1-0-0.png
sintel-1-0-1.png
sintel-1-1-0.png
sintel-1-1-1.png
第一张是低分辨率的图片,另外四张是裁剪后的完整图片。第一个数字是缩放级别,然后是 x 和 y 位置。
import "./styles.css";
import "ol/ol.css";
import Map from "ol/Map.js";
import TileGrid from "ol/tilegrid/TileGrid.js";
import View from "ol/View.js";
import { Projection } from "ol/proj.js";
import { Tile as TileLayer } from "ol/layer.js";
import { XYZ } from "ol/source.js";
import { getCenter } from "ol/extent.js";
const imageSize = [1920, 1080];
const extent = [0, 0, imageSize[0], imageSize[1]];
const projection = new Projection({
code: "custom-image",
units: "pixels",
extent: extent
});
const layer = new TileLayer({
source: new XYZ({
tileGrid: new TileGrid({
minZoom: 0,
maxZoom: 1,
resolutions: [2, 1],
tileSize: [imageSize[0] / 2, imageSize[1] / 2],
extent: extent
}),
url: "/data/sintel-{z}-{x}-{y}.png",
projection: projection
})
});
const map = new Map({
layers: [layer],
target: "map",
view: new View({
projection: projection,
center: getCenter(extent),
resolution: 1
})
});
https://codesandbox.io/s/image-tile-grid-ufqfo?file=/src/index.js
我是 OpenLayers 的新手。有一个图像列表及其顺序来构建完整图像。但是没有任何坐标。
所以我创建了两个 div:一个用于地图(作为外部 div),另一个用于显示图像 table。
使用地图时,页面变成空白。
下面html代码:
<body>
<div id="map" class="map" style="border: 1px;">
<div id="im"> </div>
</div>
<script src="main.js"></script>
</body>
main.js代码:
var imgSrc = [
image.a0, image.a1, image.a2, image.a3, image.a4, image.a5, image.a6, image.a7, image.a8, image.a9,
];
var image1 = getTable();
var map = new Map({
layers: [
new ImageLayer({
source: image1
}),
],
target: 'map',
view: new View({
center: [0,0],
zoom: 1,
maxZoom: 8,
}),
});
//---------
// getTable();
//document.getElementById('im').innerHTML = function(){
function getTable(){
var count = 0;
document.getElementById('im').innerHTML = function(){
function toTable(){
var i, html = "";
for(i=0; i<15; i++){
html += toTr(i);
}
return "<table cellspacing='0' cellpadding='0'>" + html +"</table>";
}
function toTr(rows){
return "<tr>" + toTd() + "</tr>";
}
function toTd(){
var i, td = "";
for(i=0; i<10; i++){
var filePath = count+"_Tile_2.bmp";
//alert(filePath)
td += "<td style='border:none;'><img src=\"" + imgSrc[count] + "\" /></td>";
count += 1;
}
return td;
}
return toTable();
}();
}
如果我只调用 getTable() 并注释掉 ol 代码,那么我就能正确获取图像。
感谢任何帮助。
您不能只将图像放入地图目标并期望它起作用。 OpenLayers 会为你做这件事。 我在下面做了一个例子,其中一张图片被分成四部分,并使用 OpenLayers 来显示它。请参阅末尾的代码和框 link 以了解工作实施。
您需要根据要显示的x/y/z个位置来命名图片。在这种情况下,我有 5 张图片。
sintel-0-0-0.png
sintel-1-0-0.png
sintel-1-0-1.png
sintel-1-1-0.png
sintel-1-1-1.png
第一张是低分辨率的图片,另外四张是裁剪后的完整图片。第一个数字是缩放级别,然后是 x 和 y 位置。
import "./styles.css";
import "ol/ol.css";
import Map from "ol/Map.js";
import TileGrid from "ol/tilegrid/TileGrid.js";
import View from "ol/View.js";
import { Projection } from "ol/proj.js";
import { Tile as TileLayer } from "ol/layer.js";
import { XYZ } from "ol/source.js";
import { getCenter } from "ol/extent.js";
const imageSize = [1920, 1080];
const extent = [0, 0, imageSize[0], imageSize[1]];
const projection = new Projection({
code: "custom-image",
units: "pixels",
extent: extent
});
const layer = new TileLayer({
source: new XYZ({
tileGrid: new TileGrid({
minZoom: 0,
maxZoom: 1,
resolutions: [2, 1],
tileSize: [imageSize[0] / 2, imageSize[1] / 2],
extent: extent
}),
url: "/data/sintel-{z}-{x}-{y}.png",
projection: projection
})
});
const map = new Map({
layers: [layer],
target: "map",
view: new View({
projection: projection,
center: getCenter(extent),
resolution: 1
})
});
https://codesandbox.io/s/image-tile-grid-ufqfo?file=/src/index.js