
OpenLayers GeoJSON Mask 遮罩层
json
适用于现代 C++ 的 JSON。
项目地址:https://gitcode.com/gh_mirrors/js/json

·
使用 GeoJSON 遮罩只显示指定区域
效果如下图
方式一:使用矢量图层样式进行覆盖
缺点:
- 图层拖拽移动期间不能实时遮盖
- 不能指定遮罩的图层,只能全部遮罩
示例代码
<script>
import { Vector as VectorSource } from 'ol/source'
import { Vector as VectorLayer } from 'ol/layer'
import { Fill, Stroke, Style } from 'ol/style'
import { GeoJSON } from 'ol/format'
import { mask } from '@turf/turf'
import maskJson from '@/assets/json/100000.json'
export default {
methods: {
creatMask(){
// region 遮罩图层
let vectorSource
if (this.maskLayer) {
vectorSource = this.maskLayer.getSource()
vectorSource.clear()
}
else {
vectorSource = new VectorSource()
const vectorLayer = new VectorLayer({
source: vectorSource,
style: new Style({
stroke: new Stroke({
color: 'rgb(144,30,252)',
width: 3,
}),
fill: new Fill({ color: 'rgba(220,240,253,0.6)' }),
}),
zIndex: 9999,
})
this.maskLayer = vectorLayer
vectorLayer.setMap(this.map)
}
// endregion
// 其他区域遮罩 Feature 对象
// 此处注意坐标系问题, turf.mask方法中使用的是4326,应保证数据格式是4326
const maskFeature = new GeoJSON().readFeature(mask(maskJson), {
dataProjection: 'EPSG:4326', // json的坐标系
featureProjection: 'EPSG:3857', // 当前地图使用的坐标系
})
vectorSource.addFeature(maskFeature)
},
},
}
</script>
方式二:使用ol-ext
Filter
(推荐使用)
- 解决了
方式一
中的缺点
示例代码
<script>
import { Vector as VectorSource } from 'ol/source'
import { Vector as VectorLayer } from 'ol/layer'
import { Fill, Stroke, Style } from 'ol/style'
import { GeoJSON } from 'ol/format'
import Mask from 'ol-ext/filter/Mask'
import maskJson from '@/assets/json/100000.json'
export default {
methods: {
creatMask(){
// region 需要被遮罩的图层
let maskLayer = this.maskLayer
if (!maskLayer) {
maskLayer = new VectorLayer({
source: new VectorSource(),
style: new Style({
stroke: new Stroke({
color: 'rgb(144,30,252)',
width: 3,
}),
fill: new Fill({ color: 'rgba(220,240,253,0.6)' }),
}),
zIndex: 9999,
})
this.maskLayer = maskLayer
maskLayer.setMap(this.map)
}
// endregion
// 创建遮罩过滤, 此处注意坐标系问题
const maskFilter = new Mask({
feature: new GeoJSON().readFeature(maskJson, {
dataProjection: 'EPSG:4326', // json的坐标系
featureProjection: 'EPSG:3857', // 当前地图使用的坐标系
}),
wrapX: true,
inner: false,
fill: new Fill({ color: 'rgba(220,240,253,0.6)' }),
})
// 设置图层遮罩过滤
maskLayer.addFilter(maskFilter)
},
},
}
</script>




适用于现代 C++ 的 JSON。
最近提交(Master分支:4 个月前 )
f06604fc
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
* :page_facing_up: bump the copyright years
Signed-off-by: Niels Lohmann <niels.lohmann@gmail.com>
---------
Signed-off-by: Niels Lohmann <mail@nlohmann.me>
Signed-off-by: Niels Lohmann <niels.lohmann@gmail.com> 1 个月前
d23291ba
* add a ci step for Json_Diagnostic_Positions
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* Update ci.cmake to address review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* address review comment
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix typo in the comment
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix typos in ci.cmake
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* invoke the new ci step from ubuntu.yml
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* issue4561 - use diagnostic positions for exceptions
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_documentation check
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* address review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci check failures for unit-diagnostic-postions.cpp
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* improvements based on review comments
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix const correctness string
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* further refinements based on reviews
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* add one more test case for full coverage
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* ci check fix - add const
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* add unit tests for json_diagnostic_postions only
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_diagnostics
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
* fix ci_test_build_documentation check
Signed-off-by: Harinath Nampally <harinath922@gmail.com>
---------
Signed-off-by: Harinath Nampally <harinath922@gmail.com> 1 个月前
更多推荐
所有评论(0)