无法使用 openlayer 6 显示矢量图层
can' t display a vector layer using openlayer 6
我正在做一个openlayers地图,在Vuejs项目中添加一个源为本地geojson和gpx文件的矢量图层,但是矢量图层显示不出来。
我在 Vue.js 之外进行了测试,我遇到了同样的问题。
语音代码:
// classes required to display the map
import Map from 'ol/Map'
import View from 'ol/View'
import TileLayer from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
// Feature format for reading and writing data in the GPX format.
import GPX from 'ol/format/GPX'
// Feature format for reading and writing data in the GeoJSON format.
import GeoJSON from 'ol/format/GeoJSON'
// Provides a source of features for vector layers.
import VectorSource from 'ol/source/Vector'
// Vector data that is rendered client-side.
import VectorLayer from 'ol/layer/Vector'
// Openstreet Map Standard
const openStreetMapLayer = new TileLayer({
source: new OSM(),
})
// Vector data source in GeoJSON format
const vectorGeoJSON = new VectorLayer({
source: new VectorSource({
url: 'data/pays.geojson',
format: new GeoJSON()
})
})
// Vector data source in GPX format
const vectorGPX = new VectorLayer({
source: new VectorSource({
url: 'data/capitales.gpx',
format: new GPX()
})
})
// declare the map
new Map({
layers: [openStreetMapLayer, vectorGPX, vectorGeoJSON],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2
})
})
对于 geojson 文件收到此错误:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at getObject (JSONFeature.js:197)
at GeoJSON.JSONFeature.readFeatures (JSONFeature.js:53)
at VectorSource.<anonymous> (featureloader.js:94)
对于 gpx 文件没有错误,但没有显示任何内容。
我尝试添加样式,但结果还是一样。
我用 parcel + openlayers 创建了一个重现问题的简单示例ici
我查看了文档 + openlayers 示例,但没有看到是什么导致了我的代码中的问题?
是的,我已经尝试指定完整路径。
我也在 .json
中重命名,但它不起作用。
该代码似乎是正确的,因为我尝试使用以下代码并且它有效。
我不明白为什么它不适用于本地文件。也许你需要在 parcel 甚至 webpack 或 vuejs 中添加配置?
这行得通:
// Vector data source in GeoJSON format
const vectorGeoJSON = new VectorLayer({
source: new VectorSource({
url: 'https://raw.githubusercontent.com/sandix34/Openlayers-test-workshop/master/data/pays.geojson',
format: new GeoJSON()
})
})
// Vector data source in GPX format
const vectorGPX = new VectorLayer({
source: new VectorSource({
url: 'https://raw.githubusercontent.com/sandix34/Openlayers-test-workshop/master/data/capitales.gpx',
format: new GPX()
})
})
只需将 data
文件夹和里面的文件复制到 dist
文件夹即可。
出现此问题是因为您的应用程序找不到 data
文件夹。 npm run start
在 localhost:1234
上提供您的应用程序构建(dist
文件夹)。问题是 "Is there any data folder in localhost:1234 ?" 或 "Can I access my data via localhost:1234/data ?".
要解决上述问题,您需要将整个 data
文件夹复制到 dist
文件夹中。
在 vue.js 中,我将 data
文件夹移动到 public
文件夹,正确的相对路径是 url: '../data/pays.geojson'
。我使用 netlify 部署了应用程序,它可以正常工作。
感谢您的回答,帮助我找到了解决方案。
我正在做一个openlayers地图,在Vuejs项目中添加一个源为本地geojson和gpx文件的矢量图层,但是矢量图层显示不出来。 我在 Vue.js 之外进行了测试,我遇到了同样的问题。
语音代码:
// classes required to display the map
import Map from 'ol/Map'
import View from 'ol/View'
import TileLayer from 'ol/layer/Tile'
import OSM from 'ol/source/OSM'
// Feature format for reading and writing data in the GPX format.
import GPX from 'ol/format/GPX'
// Feature format for reading and writing data in the GeoJSON format.
import GeoJSON from 'ol/format/GeoJSON'
// Provides a source of features for vector layers.
import VectorSource from 'ol/source/Vector'
// Vector data that is rendered client-side.
import VectorLayer from 'ol/layer/Vector'
// Openstreet Map Standard
const openStreetMapLayer = new TileLayer({
source: new OSM(),
})
// Vector data source in GeoJSON format
const vectorGeoJSON = new VectorLayer({
source: new VectorSource({
url: 'data/pays.geojson',
format: new GeoJSON()
})
})
// Vector data source in GPX format
const vectorGPX = new VectorLayer({
source: new VectorSource({
url: 'data/capitales.gpx',
format: new GPX()
})
})
// declare the map
new Map({
layers: [openStreetMapLayer, vectorGPX, vectorGeoJSON],
target: 'map',
view: new View({
center: [0, 0],
zoom: 2
})
})
对于 geojson 文件收到此错误:
Uncaught SyntaxError: Unexpected token < in JSON at position 0
at JSON.parse (<anonymous>)
at getObject (JSONFeature.js:197)
at GeoJSON.JSONFeature.readFeatures (JSONFeature.js:53)
at VectorSource.<anonymous> (featureloader.js:94)
对于 gpx 文件没有错误,但没有显示任何内容。
我尝试添加样式,但结果还是一样。
我用 parcel + openlayers 创建了一个重现问题的简单示例ici
我查看了文档 + openlayers 示例,但没有看到是什么导致了我的代码中的问题?
是的,我已经尝试指定完整路径。
我也在 .json
中重命名,但它不起作用。
该代码似乎是正确的,因为我尝试使用以下代码并且它有效。
我不明白为什么它不适用于本地文件。也许你需要在 parcel 甚至 webpack 或 vuejs 中添加配置?
这行得通:
// Vector data source in GeoJSON format
const vectorGeoJSON = new VectorLayer({
source: new VectorSource({
url: 'https://raw.githubusercontent.com/sandix34/Openlayers-test-workshop/master/data/pays.geojson',
format: new GeoJSON()
})
})
// Vector data source in GPX format
const vectorGPX = new VectorLayer({
source: new VectorSource({
url: 'https://raw.githubusercontent.com/sandix34/Openlayers-test-workshop/master/data/capitales.gpx',
format: new GPX()
})
})
只需将 data
文件夹和里面的文件复制到 dist
文件夹即可。
出现此问题是因为您的应用程序找不到 data
文件夹。 npm run start
在 localhost:1234
上提供您的应用程序构建(dist
文件夹)。问题是 "Is there any data folder in localhost:1234 ?" 或 "Can I access my data via localhost:1234/data ?".
要解决上述问题,您需要将整个 data
文件夹复制到 dist
文件夹中。
在 vue.js 中,我将 data
文件夹移动到 public
文件夹,正确的相对路径是 url: '../data/pays.geojson'
。我使用 netlify 部署了应用程序,它可以正常工作。
感谢您的回答,帮助我找到了解决方案。