将过滤条件应用于地图的最干净方法

Cleanest way to apply filter criteria to the map

本文关键字:方法 地图 过滤 条件 应用于      更新时间:2023-09-26

>我有一个页面,其中包含一个Google Maps V3映射和一个带有"过滤器"按钮的HTML表单。

我还有一个大的XML文件,它具有复杂的结构,其中包含有关每个标记的信息,我将在每个标记的信息框中解析为html。

我能够从 XML 文件中读取和生成标记并在地图上绘制它们,但我无法过滤地图上的标记。

按下"过滤"按钮后,在地图上过滤标记的最干净方法是什么,这将满足我在页面上的HTML表单指定的过滤条件?

到目前为止,我的表单有一个列表框:

Company - 根据您选择的公司名称,它应该在地图上显示其所有分支机构。XML文件包含所有这些信息(分行地址,纬度,液化天然气,电话号码,它所属的公司)。

XML结构:

<markers>
    <marker>
        <company name="ComapnyName">
            <branches>
                <branch>
                    <address>BranchAddress</address>
                    <phone>BranchAddress</phone>
                    <products>
                        <product>
                            <name>ProductName</name>
                            <url>ProductURL</url>
                        </product>
                        <product />
                        <product />
                        ...
                    </products>
                </branch>
                <branch />
                <branch />
                ...
            </branches>
        </company>
    </marker>
    <marker />
    <marker />
    ...
</markers>

实现您描述的过滤的直接方法是将标记放入Array中,在过滤器设置更改时遍历Array,然后关闭标记:

Marker.setMap( null );

Marker.setMap( map );

如果您将筛选器视为切换,则可能需要创建一些状态变量来跟踪筛选器设置,以便还可以编写类似于以下内容的代码:

var filterOptionAbcIsOn = false;
function toggleFilters() {
    if ( filterOptionAbcIsOn ) {
        // loop across the Array and turn the markers off
        filterOptionAbcIsOn = false;
    }
    else {
        // loop across the Array and turn the associated markers on
        filterOptionAbcIsOn = true;
    }
}