【问题标题】:Geotools StreamingRenderer point probleme when using Simplefeaturecollection instead of Simplefeaturesource using postgis databaseGeotools StreamingRenderer 点问题时使用 Simplefeaturecollection 而不是 Simplefeaturesource 使用 postgis 数据库
【发布时间】:2021-02-20 18:56:43
【问题描述】:

我正在后端使用传单和 GeoTools 开发自己的制图服务器,我使用流式渲染在给定的 bbox 中绘制地图,所有几何图形都在 3857 坐标参考系统中,这是来自传单 http:/ 的简单请求/localhost:8080/server/tile/mymap/12/2083/1598.png where z = 12 and x=2083 and y=1598 在后端收到此类请求时,我将 zxy 转换为参考信封,到目前为止一切正常,当我使用SimpleFeatureSource 时,带有 leflet 的前端的结果看起来不错

ReferencedEnvelope env = new ReferencedEnvelope(this.getBounds(tile), this.webMercator);
for (MapLayer mapLayer : mapLayers) {
            try {
                SimpleFeatureSource featureSource = postgisDataStore.getFeatureSource(mapLayer.getLayer().getSlug());
                    Style style = createFromSLD(mapLayer);
        mapContent.addLayer(new FeatureLayer(source, style));
            } catch (IOException e) {
                log.error(e.getMessage());
            }
        }

saveMap(mapContent, os, mapBounds);

结果没有问题:

但是当我使用FeatureCollection 而不是SimpleFeatureSource 时,我遇到了点问题,它们以某种方式被裁剪,有人可以解释发生了什么吗:

ReferencedEnvelope env = new ReferencedEnvelope(this.getBounds(tile), this.webMercator);

for (MapLayer mapLayer : mapLayers) {
            try {
                SimpleFeatureCollection fc = featureService.getTile(mapLayer.getLayer(), tile, env);
                Style style = createFromSLD(mapLayer);
                mapContent.addLayer(new FeatureLayer(source, style));
            } catch (IOException e) {
                log.error(e.getMessage());
            }
        }

saveMap(mapContent, os, mapBounds);

【问题讨论】:

    标签: postgis geotools


    【解决方案1】:

    两张图片之间最明显的区别是缩放级别和边界框。

    标记在图像边缘被裁剪是几乎所有图块引擎中的常见问题。由于每个请求都是使用单独的请求(可能是对单独的机器)发出的,因此 GeoTools 无法知道边界外的内容并允许它。

    GeoServer 使用“排水沟”系统来处理这个问题,因此每个图块都被绘制了多个像素(基于最大符号的大小),然后被剪裁到确切的图块边界以允许它绘制附近符号的“其他”一半。当您尝试处理标签时,这会变得更加复杂,因为标签引擎不喜欢绘制超出图像边缘的标签,因此只会绘制图块中心的特征,同样值得看看 GeoServer 如何实现 partials 供应商选项来处理这个问题。

    在一天结束时,我想知道当您可以直接使用 GeoWebCache 和 GeoServer 并避免重新发明这些轮子时,滚动您自己的切片服务器是否值得。如果您需要某些特定的制图元素,可能会与 GeoServer 开发人员交谈,他们会允许您将其添加到 GeoServer。

    【讨论】:

    • 我不认为 geoserver 是专门用于开发 WebMapping 应用程序的解决方案,因为 geoserver 不能让您完全控制要在地图上显示的元素 geoserver 仅限于用于渲染地图的 WMS 协议因此,如果您需要特定功能,例如使用特定规则在 java 应用程序中的业务逻辑端对 fature 集合进行一些过滤,并将该功能集合提供给稍后渲染的 gt,WMS 具有 cql 过滤器,但它们非常有限。 geowebcache 也可以为一小层生成大量的切片缓存。
    • 问题不在于缩放级别,就像我之前说的那样,当您使用 featureSource 而不是 featurecollection 时它可以正常工作,即使标记它也可以工作,重要的一点是问题与点有关多边形一切都很好。
    • 我已经阅读了 WMS 代码的 geoserver 源代码,它使用 featureSource 和流式渲染我没有看到其中使用的任何排水沟方法。我认为 tric 是使用 geotools 而不是 geoserver,geotools 正在做一些技术无论如何管理这个的引擎盖我想我只会使用特征源并放弃这个案例,另一种方法是使用带有特征源的虚拟表,但我将仅限于 sql 查询,所以我不能在java端,只能使用sql查询
    • 我认为逻辑在于创建被裁剪的 metaTile here
    • 谢谢 ian turton,我会看看,希望能找到解决方案。
    猜你喜欢
    • 2012-04-20
    • 2011-08-16
    • 1970-01-01
    • 1970-01-01
    • 2022-11-29
    • 1970-01-01
    • 1970-01-01
    • 2016-06-05
    • 2021-01-25
    相关资源
    最近更新 更多