在地图中编辑地理对象几何形状

地图扩展组件支持对地理对象的几何形状进行可视化编辑。与之前只能在输入字段中编辑文本不同,现在用户可以直接在地图上与几何图形交互。用户可以在这个界面中可视化地移动几何形状,修改形状并执行其他编辑,从而简化了地理数据管理过程。

VectorSource 和 DataVectorSource 都支持以下编辑模式:

  • 选择模式:用户可以选择地图上的要素。

  • 拖拽模式:用户可以拖拽地图要素至新的位置。

  • 编辑模式:用户可以修改要素的几何图形,例如顶点和边。

  • 删除模式: 用户可以删除地图上的要素。

选择模式

启用选择模式:设置 矢量源 的 featureSelectEnabled 属性为 true。

<maps:vector id="layer">
    <maps:dataVectorSource id="source"
                           featureSelectEnabled="true"
                           dataContainer="regionsDc"
                           property="area"/>
</maps:vector>

该模式启用后,用户可以通过点击地图上的要素进行选择。需要多选时,可按下 Shift 并进行选择。

layers select example
当选择模式与拖拽或编辑模式同时启用时,仅所选择的要素可以进行拖拽或编辑。

选择模式提供了一个选择事件,可以用来处理要素的选择或反选。参阅 源事件。

还可以对所选的要素定制不同的样式进行突出显示。参阅 选择模式样式。

拖拽模式

启用拖拽模式:设置 矢量源 的 featureDragEnabled 属性为 true。这样可以激活地图上的控制按钮 layers drag icon,可用于拖拽。

<maps:vector id="layer">
    <maps:dataVectorSource id="source"
                           featureDragEnabled="true"
                           dataContainer="regionsDc"
                           property="area"/>
</maps:vector>

下面是启用拖拽模式的效果:

layers drag example

该模式提供了处理开始拖拽和结束拖拽的事件,参阅 源事件。

编辑模式

启用编辑模式:设置 矢量源 的 featureModifyEnabled 属性为 true。

<maps:vector id="layer">
    <maps:dataVectorSource id="source"
                           featureModifyEnabled="true"
                           dataContainer="regionsDc"
                           property="area"/>
</maps:vector>

该设置将激活地图上的一个控制按钮 layers modify icon,用于启用修改模式。在此模式下,会渲染一个顶点,可以通过拖动顶点修改要素,或点击将其移除。

下面是启用编辑模式的效果:

layers modify example

该模式提供修改开始和结束的事件。参考 源事件 部分。

还可以为生成的顶点设置样式。参考 编辑模式样式 部分。

删除模式

Jmix 3.1+

如需启用删除要素的功能,将 矢量源 的 featureDeleteEnabled 属性设置为 true。删除不依赖修改模式,可以分别启用。

<maps:vector id="featureLayer">
    <maps:vectorSource id="featureSource"
                       featureModifyEnabled="true"
                       featureDeleteEnabled="true"/>
</maps:vector>

该设置将激活地图上的一个控制按钮 layers delete icon,用于启用删除模式。在此模式下,用户可以点击某个要素,删除前会显示确认对话框。如果地图上至少有一个源启用了删除功能,则显示该按钮。

当要素被删除时,源会触发一个事件。参考 SourceFeatureDeleteEvent。

如果未设置 featureDeleteEnabled,默认禁用删除。如果 jmix.maps.ui.feature-modify-includes-delete 应用程序属性为 true,则修改模式也会为此类源启用删除功能。这是 Jmix 3.1 之前的行为,当时 featureModifyEnabled="true" 总是同时启用删除。该应用程序属性的默认值为 false。从早期版本升级项目时,Studio 会将其设置为 true 以保留以前的行为。如需分别控制每个源的删除,请在需要删除功能的源上设置 featureDeleteEnabled,并移除该应用程序属性。

下表显示了源的删除功能何时启用:

featureDeleteEnabled jmix.maps.ui.feature-modify-includes-delete featureModifyEnabled 删除功能

未设置

false

任意值

禁用

未设置

true

false 或未设置

禁用

未设置

true

true

启用

false

任意值

任意值

禁用

true

任意值

任意值

启用