将openlayers与本地底图一起使用?

将openlayers与本地底图一起使用?,openlayers,Openlayers,“OpenLayers库提供了一个JavaScript API,可以轻松地将各种来源的地图合并到您的网页或应用程序中。”然而,从扫描文档来看,各种来源似乎只包括基于web的地球地图提供商 是否可以使用OpenLayers在本地存储的底图(例如海图)或具有人工笛卡尔坐标的任意(非地球)光栅图像上显示特征 --编辑-- 下一页显示一个本地存储的图像,与此相反,该图像必须是web可访问的。但是,有没有办法将多个图像文件用作平铺,而不是单个文件 <html> <head>

“OpenLayers库提供了一个JavaScript API,可以轻松地将各种来源的地图合并到您的网页或应用程序中。”然而,从扫描文档来看,各种来源似乎只包括基于web的地球地图提供商

是否可以使用OpenLayers在本地存储的底图(例如海图)或具有人工笛卡尔坐标的任意(非地球)光栅图像上显示特征

--编辑--

下一页显示一个本地存储的图像,与此相反,该图像必须是web可访问的。但是,有没有办法将多个图像文件用作平铺,而不是单个文件

<html>
  <head>
    <title>OpenLayers Example</title>
    <script src="http://openlayers.org/api/OpenLayers.js"></script>
  </head>
  <body>
    <div style="width:640px; height:480px; border:3px solid" id="map"></div>
    <script defer="defer" type="text/javascript">
        var options = {
            maxResolution: 10,
            units: 'm',
            resolutions: [10, 5, 2, 1, .5],
        };
        var map = new OpenLayers.Map('map', options);
        var extent = new OpenLayers.Bounds(-4824, -3294, 4824, 3294);
        var size = new OpenLayers.Size(4824, 3294);
        var img = new OpenLayers.Layer.Image( "Basemap",
        "maps/map0.jpg", extent, size, {layers: 'basic'} );
        map.addLayer(img);
        map.zoomToMaxExtent();
    </script>
  </body>
</html>

OpenLayers示例
变量选项={
最高分辨率:10,
单位:'m',
决议:[10,5,2,1,5],
};
var map=new OpenLayers.map('map',选项);
var区段=新的OpenLayers.Bounds(-4824,-329448243294);
var size=新的OpenLayers.size(48243294);
var img=new OpenLayers.Layer.Image(“Basemap”,
“maps/map0.jpg”,范围、大小,{layers:'basic'});
map.addLayer(img);
zoomToMaxExtent();

是的,您可以加载您喜欢的任何投影,因为对WMS的调用将完全由发送到OpenLayer.Map构造函数的参数定义,即边界(最大范围)、单位(通常为度或米)以及可选的分辨率数组(以每像素的贴图单位表示)。如果没有分辨率数组(该数组将缩放级别固定为这些分辨率),则需要提供maxResolution和NumZoomLevel参数——默认值为16。请参见注释良好的,其中显示了许多其他参数以及一些示例贴图构造函数,例如:

  var options = {
        maxExtent: new OpenLayers.Bounds(0,0,700000,1300000),
        maxResolution: 200,
        units: 'm',
        projection: "EPSG:27700",
        resolutions: [ 200, 50, 10, 5, 1, 0.5, 0.1]
  };
  var map = new OpenLayers.Map("map", options);
它实际上是英国国家网格的一部分,以米为单位,但以度为单位,分辨率为每像素度

添加到地图中的其他图层(如WMS)将根据地图构造函数中的这些值进行计算。如果需要在另一个投影中加载矢量数据,也可以通过设置displayProjection来实现,但可能需要添加第三方投影库,以便进行转换——尽管尚未明确说明我被问到了

我不确定你的海图是在哪个投影中,大概是某种UTM或lat/lon,所以不能给你任何更合适的数字。

有一个例子是在本地使用OpenStreetMap互动程序,而不直接使用http。显然,你需要将互动程序放在XYZ格式中才能工作。下面是OSM层的示例。每个磁贴的xyz都是从中派生出来的,当然,这是为了简单和全局覆盖而设计的。但是,您可以使用自己的坐标系轻松创建自己的图层,以类似的方式工作

从装载角度看,相关线路为:

 var newLayer = new OpenLayers.Layer.OSM("Local Tiles", 
                   "tiles/${z}/${x}/${y}.png",
                   {numZoomLevels: 19, 
                    alpha: true, 
                    isBaseLayer: false}
);   
注意:一般来说,我发现示例和源代码比文档更能提供信息。我毫不批评地说,OpenLayers与大多数开源项目一样,开发人员资源有限,因此,没有文档记录并不意味着它无法完成。

使用OpenLayers 3:

var newLayer = new ol.layer.Tile({
    source: new ol.source.OSM({
            url: 'maps/{z}/{x}/{y}.png'
    })
});

var map = new ol.Map({
    layers: [
    newLayer
    ],
  controls: [],
  target: 'map',
  view: new ol.View({
    center: ol.proj.transform([4.666389, 50.009167], 'EPSG:4326', 'EPSG:3857'),
    zoom: 4,
    minZoom: 1,
    maxZoom: 20
  })
});

请参阅上面编辑的示例。感谢您的提示,但我没有看到任何文档说明如何将OpenLayers.Layer.WMS()与非http文件规范一起使用,尽管它确实可以工作。所谓“工作”,我的意思是WMS()将显示来自本地文件的可识别图像,但与image()不同如上所示,它不适用于文件,并且在没有WMS服务器的情况下无法正确平移或缩放。@Dave,根据您更新的问题,我添加了第二个答案。谢谢-这似乎是我要找的。您感兴趣的是,您使用的坐标系是什么?我曾经使用过一些海洋数据,并且知道它可以我有点奇怪。