Web映射环境中是否存在用于图例分析的FOSS解决方案?


14

我们的网络映射要求是相当标准的-一些基本的查询以及打印出结果图(或保存图像)的能力。通常,我们过去曾经使用过ESRI产品(现在我们正在使用GeoCortex),但是我们仍然无法解决如何解析图例信息以匹配地图上实际显示的问题。例如,如果地图上显示四个多边形,则该多边形应仅包含四个图例项。是否有针对此问题的开源解决方案?

编辑:让我们看看是否可以进一步澄清。目前,我们拥有一个包含33,000多个多边形的地质图层。该图层的图例是单个图像,包含数百个图例项(即,它是整个地质层的图例,存储在JPEG / PNG中)。

通常,用户将放大一个区域(例如单个NTS地图图,甚至更小),因此屏幕上将显示地质多边形的子集。然后,他们会将地图另存为由GeoCortex / ArcGIS Server生成的打印文档(PDF或图像)。打印文档将包含标题,地图图像和图例。但是,地质图层的图例将是整个地质图层的图例,而不是地图上实际显示的图例(即小得多的子集)。

因此,我正在寻找是否存在FOSS解决方案,以使我能够裁剪或动态生成地质图例的子集,以在屏幕上/地图上反映实际项目,并与打印文档一起使用。我希望这可以澄清问题;如果没有,我深表歉意!


1
您好ollyoop-我很难想像您想要的结果。您能否提供一个不好的传说的例子和一个好的传说的例子?我认为这可能会帮助我或其他人给出答案。谢谢
andytilia 2012年

此功能已包含在Arcgis服务器10.1中,我在介绍ESRI时就已经看到了。
geogeek 2012年

嗯,嗯,我们将看看实际效果如何。同时,是否有任何FOSS解决方案?
ollyoop

1
基于FOSS或ESRI,听起来您将需要自定义代码。
拉吉·亚瑟·伯姆

Latitude Geographics 当然可以做到这一点。您是否曾与他们讨论过(是否已经在Geocortex Essentials中,或者他们是否计划实施它)?
乍得·库珀

Answers:


3

根据某些条件,绝对有可能做您想做的事情。看一下我几年前开发的Flex应用程序:http : //india-wris.nrsc.gov.in/LULCApp.html

图例和统计信息根据当前范围内可见的数据而变化。该算法要求每个类具有不同的颜色。Flex应用程序知道类别及其颜色。在每次范围更改时,它将当前地图范围转换为位图,然后找出其中的颜色。使用此功能,您可以找出当前可见的颜色或类别。基于此信息,将动态创建图例。

当时我使用过Flex,但是使用HTML5中的Canvas也可以实现。或者,您可以使用任何服务器端代码对地图图像执行相同的操作,以获取动态创建的图例。


就是这样!很高兴在实践中看到一个例子。非常感激!!!
ollyoop

5

在FOSS4G或ESRI中的AFAIK,您将需要编写自定义代码来生成此层。

并不是那么困难,但是它将花费您多于几行代码。

对于ArcMap,这是使用Custom Element完成的。ESRI帮助站点中包含旧示例新示例

过去,我已经完成了一些与您使用Pagelayout Frame Elements描述的事情类似的事情。

如果您从未做过ArcObjects(但是已经编程过),则绘图代码可能会有些棘手,但是通常需要编写一个代码才能达到“啊哈!”的目的。时刻。

该算法很简单:

  • (1)获取要用作生成图例的参考的PageLayoutMap对象...您可能必须处理多个帧才能到达所需的地图,因为Pagelayout可以包含多个具有不同布局的Map对象如果您还没有执行任何自定义ArcMap Pagelayout编程,则该范围会有点不寻常(考虑一下您可以拥有的小插图)。

  • (2)获取所需地图的ActiveView 的可视范围

  • (3)使用,作为您查询过滤器的几何形状,以循环和搜索通过所有图层在地图上。

  • (4)如果该层返回任何记录,则必须按照我之前给您的示例中所示绘制它。

抱歉,我无法为您提供一个更简单的解决方案,但是至少以这种方式,您可以使它看起来像您想要的那样-仅需编码。

更新:

由于您想在Web应用程序的上下文中执行此操作,因此我检查了文档,并且有几种使用类似算法的方法。

其中之一是通过ArcGIS Server对象扩展。您将执行除(1)之外的所有步骤(在此情况下无需担心Pagelayout)。使用REST公开结果。

在这里,您有几个选项(基于您是否要使用Flex或Javascript),但是想法是相同的-在页面刷新时,调用您创建的REST Web服务并绘制图例。

与建议的其他方法相比,此方法的优点是您可以将任何符号系统与特征一起使用(并且功能的符号系统不限于不同的颜色)。您可以使用自己喜欢的网络语言作为客户端代码。您为图例生成的符号可以从地图自动生成。

缺点是,您将需要编写服务器对象扩展!幸运的是,有一个ESRI示例可以满足您已经需要的75%的需求,并且应该使您清楚地了解如何继续我上面的评论。

更新2:就此的FOSS4G解决方案而言,即使每种FOSS服务器的API略有不同,相同的方法也适用于任何FOSS服务器。


1
非常感谢您的回答!有一个称为Legend Limiter的工具已经在ArcGIS环境中执行此操作。我想做的就是将该功能移植到Web制图世界。
ollyoop

@ollyoop至少直到9.3,我知道对于ArcGIS Server来说,同样的方法可以完全正常工作。我知道自9.3版以来,服务器渲染体系结构已发生重大变化,但我承认并没有跟上该变化。如果将自定义元素从10.1中剔除,我会感到惊讶。
拉吉·亚瑟·伯洪

@ollyoop添加了一种可与ArcGIS Server配合使用的方法
Ragi Yaser Burhum,2012年

3

使用Geocortex Essentials导出到PDF时,图例由打印模板中的子报表生成。此子报表将接收用于创建地图图像的所有可见图层以及由ArcGIS Server生成的所有图例色板。它不会发出任何空间查询来确定图例中是否在打印区域范围内实际绘制了图层。

因此,如果您想更改图例的行为,则可以自定义图例子报表,也可以使用图像而不是子报表将图例放入打印模板。如果您已经以某种方式生成了图例图像以供查看器使用,则应该能够从打印引擎重新使用该服务。

图例已经包含一些嵌入式内联代码,这些代码可根据色板是用于图层还是图层中的类来切换图例文本的格式。切换到报表设计器中的“脚本”选项卡时,可以看到内联代码。

(我在纬度地理学院工作)


1

关于带有完整的“ FOSS解决方案”的“ Web映射” ...注意事项:

  • 为了安全,稳定等,“ FOSS解决方案”必须是“受欢迎的”(具有庞大且有组织的社区)。
  • FOSS和GIS中的一个关键概念是标准化:最好的解决方案采用标准,例如OGC
  • 如今,流行的“ Web解决方案”是OpenLayers,Mapserver,GeoServer,PostGIS等。它们都具有与OGC兼容的核心。“ GeoCortex / ArcGIS Server”解决方案不是FOSS,而是兼容OGC。

和技术上的考虑:您正在使用“覆盖”(?),因此WMS是检索空间信息的良好OGC标准。


一个兼容OGC-简单的解决问题的方法,是使用WMS 的GetCapabilitiesGetLegendGraphic服务,它返回一个标准图例描述成一个XML文件,并与传说中的形象。

注意:当您考虑某些GIS / FOSS解决方案时,可以首先考虑标准,然后将问题简化为“众所周知的乐高积木问题”,而这些积木来自任何供应商。

ArcGIS 10+ 具有GetLegendGraphic,但是请检查是否可以指定BBOX仅显示图例子集。


如果要使用图例构建地图布局,则此“ FOSS LEGO解决方案”还有另外一部分:

任何FOSS地图服务器(例如MapServer(我也认为ESRI解决方案也是如此))都可以提供JPEG图像作为WMS(非平铺)地图请求-请参阅WMS的GetMap服务

PS:这不是标准,但是也许您的服务器可以通过配置为提供带有图例的地图,由模板工具(例如MapServer)提供。

要构建“带有图例的地图”的布局,您可以使用Javascript,PHP或另一种对地图和图例进行(REST)Web服务请求的语言生成HTML(或“即时生成PDF文件”)。

我更喜欢从HTML生成PDF:您可以使用 wkHtmlToPdf(用于HTML到PDF转换的FOSS解决方案)。要生成较差的布局,请使用“即时JPEG布局”,可以在服务器上使用标准的FOSS工具包,例如 imagemagick

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.