如何放大到 cql_filter 功能?
Posted
技术标签:
【中文标题】如何放大到 cql_filter 功能?【英文标题】:How can I zoomed to the cql_filter feature? 【发布时间】:2019-10-29 09:10:46 【问题描述】:我正在使用地理服务器。我写了以下代码;
const mywms = L.tileLayer.wms("http://localhost:8080/geoserver/taj/wms",
layers: 'taj:country',
format: 'image/png',
CQL_FILTER: 'name=pana'
transparent: true,
opacity: 0.4,
version: '1.1.0',
attribution: "country layer"
);
一切都很好。图层被过滤。但我需要选择的功能来缩放完全扩展。
我尝试使用此代码将 mywms 层居中; map.fitBounds(mywms.GetBounds());
。但它显示了错误; mywms.getBOunds is not a function
。有什么帮助吗?
【问题讨论】:
平铺层没有边界。即使您已过滤 WMS 数据,该图层仍会覆盖整个世界。 那我怎样才能放大到选中的特征呢?有什么想法吗? 【参考方案1】:正如 cmets 中指出的那样,WMS 请求在请求中包含地图的边界框,因此将始终覆盖整个地图区域。
要获取单个要素的范围,您需要创建一个包含过滤器的WFS request,然后在返回该要素时缩放到该要素的范围。
【讨论】:
你的意思是cql_filter
的WFS请求直接返回那个选择过滤区域的绑定框?
不,它会返回一个带有可以缩放到的几何图形的要素
实际上我的数据集中有 100 多个地区。我想使用 cql_filter 添加它们。我正在尝试将所选功能完全缩放。有可能吗?
是的,获取返回(过滤)特征的几何形状并缩放到它的范围
感谢您的建议。万分感激。我根据本指南制作了WFS request。我无法在我的服务器中使用enable_jsonp
(我必须先启用_jsonp,然后才能请求WFS)。 I also asked for help in this link。请帮我找出解决办法。【参考方案2】:
非常感谢大家的帮助。并特别感谢Ina Turton先生帮助我找出实际问题并得到解决方案。我的 wfs 服务器网址如下所示;
http://localhost:8080/geoserver/tajikistan/ows?service=WFS&version=1.0.0&request=GetFeature&typeName=taj%3Acountry&maxFeatures=50&outputFormat=application%2Fjson
我编写以下代码来放大我的 cql_filter 区域:
//Geoserver Web Feature Service
$.ajax('http://localhost:8080/geoserver/wfs',
type: 'GET',
data:
service: 'WFS',
version: '1.1.0',
request: 'GetFeature',
typename: 'tajikistan:country',
CQL_FILTER: "name_rg='Centre'",
srsname: 'EPSG:4326',
outputFormat: 'text/javascript',
,
dataType: 'jsonp',
jsonpCallback:'callback:handleJson',
jsonp:'format_options'
);
function handleJson(data)
var requiredArea = L.geoJson(data).addTo(map);
map.fitBounds(requiredArea.getBounds())
在此代码中,CQL_FILTER
用于过滤出所需区域。在我的情况下,列名称为name_rg
的数据具有Centre
的属性。我使用此代码查询该区域。我使用 ajax 方法获取数据。我编写的代码有点棘手,因为常规的 ajax 调用不会回调 handleJson 函数并返回parseJson error
。最后我添加了名为requiredArea
的变量。获取该区域的边界并设置所需区域的边界并添加到地图中。
【讨论】:
以上是关于如何放大到 cql_filter 功能?的主要内容,如果未能解决你的问题,请参考以下文章