当前位置: 首页 > 知识库问答 >
问题:

将传单功能隐藏在指定区域之外

公孙宸
2023-03-14

我试图隐藏一些传单功能以外的定义区域。

我有一张传单地图,显示河流作为河流层的特征,还有一个圆圈,用于在地图的当前中心周围绘制一个区域。

在我的数据库中,每条河流被分成多个部分,我只检索与当前圆形区域相交的部分。

计算每个有关部分的交点以调整坐标将是一个解决方案,但是一个复杂的问题。

事实上,我更愿意简单地在客户端隐藏这些溢出,但我找不到解决方案。

传单有可能做这样的事情吗?

谢谢你的时间

共有1个答案

沈单弓
2023-03-14

我在一个简单的基本HTML和普通JS上做了这个示例。我在“river”上添加了另一个linestring来模拟圈外的river


var mymap = L.map('mapid').setView([43.63458105967136, 1.1613321304321291], 13);

L.tileLayer('https://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
    maxZoom: 20,
    attribution: 'Map data &copy; <a href="https://www.openstreetmap.org/">OpenStreetMap</a> contributors',
}).addTo(mymap);

var center = [43.63458105967136, 1.1613321304321291];
var radius = 1500;

// L.circle(center, radius, {
//     color: '#ff4081', fillColor: '#ff4081', fillOpacity: 0.5
// }).addTo(mymap);

var riverGeoJSON = [
    { "type": "Feature", "geometry": { "coordinates": [[1.159444487444759, 43.633815447205706], [1.160243520516838, 43.634633600388156], [1.160731009187281, 43.6350432633719], [1.161774921971743, 43.63541373375439], [1.162079879908259, 43.63564209781788], [1.162320030539753, 43.635959368371424], [1.162373764624914, 43.636409391647234], [1.161800286153361, 43.637212422659154], [1.160910734693605, 43.63832601539633], [1.160651867030764, 43.63886255455486], [1.160332394101095, 43.639317964879666], [1.159189872203288, 43.640743176542664], [1.158053840843969, 43.641810274789506], [1.156922548158863, 43.642651534145514], [1.155851918485514, 43.64349381183714], [1.155156982509935, 43.644214650781954], [1.15326441791592, 43.64594659208024], [1.152374775964331, 43.6470151231795], [1.151428904349222, 43.64790448439313], [1.151107886218696, 43.64840394819371]], "type": "LineString" } },
    { "type": "Feature", "geometry": { "coordinates": [[1.156570800342349, 43.632121495293006], [1.158291185472127, 43.63272397754135], [1.158901458643683, 43.633090727638866], [1.159444487444759, 43.633815447205706]], "type": "LineString" } },
    { "type": "Feature", "geometry": { "coordinates": [[1.168152938761366, 43.62917262321181], [1.167467920251437, 43.62939958202886], [1.166101976396903, 43.62960874939632], [1.164673843635074, 43.629863651007135], [1.163738326615552, 43.63021236020524], [1.163236303364402, 43.630566588076604], [1.162728104605807, 43.63119071739829], [1.161282685092185, 43.632253508072225], [1.160336935333006, 43.633151033736986], [1.159444487444759, 43.633815447205706]], "type": "LineString" } },
    {
        "type": "Feature",
        "properties": {},
        "geometry": {
            "type": "LineString",
            "coordinates": [
                [
                    1.0526275634765625,
                    43.550289946081115
                ],
                [
                    1.07940673828125,
                    43.63334186269
                ],
                [
                    1.0764884948730469,
                    43.6336524704596
                ]
            ]
        }
    }
];
// L.geoJSON(riverGeoJSON, {}).addTo(mymap);

var centerGeoJSON = [center[1], center[0]];
var radiusGeoJSON = radius / 1000;
var options = { steps: 50, units: 'kilometers' };
var circleGeoJSON = turf.circle(centerGeoJSON, radiusGeoJSON, options);

L.geoJSON(circleGeoJSON, {}).addTo(mymap);

var riverClipped = {}

for (let index = 0; index < riverGeoJSON.length; index++) {
    const feature = riverGeoJSON[index];
    var within = turf.booleanWithin(feature, circleGeoJSON);
    console.log({ within });
    var split = turf.lineSplit(feature, circleGeoJSON);
    console.log({ split });
    if (within && split.features.length === 0) {
        L.geoJSON(feature, {}).addTo(mymap);
    } else {
        L.geoJSON(split.features[0], {}).addTo(mymap);
    }


}


用turfJS计算圆,以具有有效的GeoJSON特性。然后将此特性用作拆分器。

当line完全在圆内时,inne函数返回true,split函数不返回split特性。

JSFiddle的完整源代码:https://jsfiddle.net/tsamaya/6sc58m7u/

 类似资料:
  • 此处将公开Dism++未在UI中呈现的设置,你可以修改Config\Config.ini,让这些设置生效。 启用方式 功能 [Dism++] NotLoadWofadk=1 添加后Dism++将不会在启动时加载Wof驱动,默认情况下Dism++会在Win8以上系统自动加载Wof驱动。如果你的环境比较特殊,可以开启此选项。开启后,WIMBoot以及Compact相关功能可能会受限。 [WUA] Di

  • 问题内容: 已锁定 。该问题及其答案被锁定,因为该问题是题外话,但具有历史意义。它目前不接受新的答案或互动。 我从事Microsoft SQL Server 已有多年,但直到最近才开始在我的Web应用程序中使用MySQL,而且我渴望获得知识。 为了继续回答“隐藏功能”问题,我想知道MySQL的任何隐藏或方便功能,这些功能有望改善我对这个开源数据库的了解。 问题答案: 既然您悬赏,我将分享我的来之不

  • 问题内容: Python的隐藏功能 问题答案: 链接比较运算符: 如果你以为它在做,它显示为,然后比较,它也是,那么不,那实际上不是什么事情(请参阅最后一个示例。)它实际上是翻译成但键入和每个输入较少该术语仅评估一次。

  • 问题内容: 看完C#的隐藏功能后,我想知道Java的一些隐藏功能是什么? 问题答案: 几个月前,Double Brace Initialization让我惊讶,以前从未听说过它。 ThreadLocals通常并不广为人知,它是一种存储每个线程状态的方法。 由于JDK 1.5 Java除了锁以外,还具有非常好的实现和健壮的并发工具,因此它们位于java.util.concurrent中,并且一个特别

  • 问题内容: 我正在尝试使用复选框和过滤器选项创建多选下拉列表。我试图隐藏列表,但我在外面单击却无法弄清楚。感谢你的帮助。 http://plnkr.co/edit/tw0hLz68O8ueWj7uZ78c 问题答案: 请注意,打开第二个弹出窗口(在具有多个选择的页面上)时,您的解决方案(问题中提供的Plunker)不会关闭其他框的弹出窗口。 通过单击一个框打开一个新的弹出窗口,单击事件将始终停止。

  • 本文向大家介绍Android实现bitmap指定区域滑动截取功能,包括了Android实现bitmap指定区域滑动截取功能的使用技巧和注意事项,需要的朋友参考一下 突然不知道什么心态,说要做这个,网上找了半天没找到合适的,就自己做了一个。 先上效果图: 透明区域为将要截取的区域,其他阴影部位为舍弃区域 图片资源我写死储存在了raw中,有需要可以自己写获取bitmap。 界面layout: Scre