4

我从映射开始。我想查看一张法国地图,上面有一个可以个性化的图层。

我已经有了 shapefile 格式的自定义图层。我完全不知道我是否必须创建一个 OpenStreetMap 服务器,或者我是否可以直接使用 Web 应用程序。

你能给我一个使用我的额外图层 shapefile 格式映射显示的起点吗?

我想这个任务很复杂,但你必须从某个地方开始......

非常感谢您

4

4 回答 4

7

这取决于你想做什么。它是一个大的形状文件吗?

您可以在创建 openlayers 地图时做一些事情:

  • 使用公共的openstreetmap 服务器作为背景图块(默认的OSM 层实现),并将您的要素层(点、多边形,以及其中的任何内容)添加为OSM 中的矢量要素层。要从 shapefile 中获取矢量特征,您可以:
    • 以体面的基于 GIS 的格式将它们预加载到您的数据库中。这允许您在执行边界框查询时提供您的功能,如果您有超过 1000/10000 个功能,则需要此功能。
    • 将 shapefile 转换为 openlayers 可读的格式(在浏览器中使用https://github.com/wavded/js-shapefile-to-geojson或使用 ogr2ogr 等工具进行预转换)
  • 或者,如果您不需要与这些功能进行交互,您可以将您的数据与 OSM 数据结合起来,并创建您的自定义图块。这对于浏览器来说更轻量级,但它相当复杂(读取数据库中的所有 OSM 数据,使用 mapnik 生成图块)
于 2012-06-08T18:02:24.867 回答
2

如果您希望在 shapefile 图层上添加 OpenStreetMap (OSM),只需添加以下代码行,

var osm = new OpenLayers.Layer.OSM();
map.addLayer(osm);

虽然我不明白,为什么需要创建一个 OpenStreetMap 服务器呢?

于 2012-06-01T17:45:07.177 回答
1

You don't need to create an OpenStreetMap server by your own.

If you want to display your custom layer on a map then use google or openstreetmap as a base layer and display your layer (comes from shape file) on the map.

于 2012-06-07T13:17:04.667 回答
0

您可以使用gipong/shp2geojson:首先,将 shp 文件转换为 geojson 数据,然后将数据添加到地图中

   var map = new ol.Map({
    layers: [
        new ol.layer.Tile({
            source: new ol.source.OSM()
        })
    ],
    target: 'map',
    view: new ol.View({
        center: [0, 0],
        zoom: 5
    })
});

loadshp({
    url: 'demo/10tnvillage.zip',
    encoding: 'big5',
    EPSG: 3826
}, function(data) {
    var feature = new ol.format.GeoJSON().readFeatures(data, {
        featureProjection: 'EPSG:3857'
    });
    var layer = new ol.layer.Vector({
        source: new ol.source.Vector({
            features: feature
        })
    });
    map.addLayer(layer);

    var extent = layer.getSource().getExtent();
    map.getView().fit(extent, map.getSize());
});
于 2020-08-09T09:00:57.560 回答