Place QML Type

地点类型表示感兴趣的位置。更多

Import Statement: import QtLocation 6.9
Since: QtLocation 5.5

属性

方法

详细描述

地点(Place)类型代表一个物理位置,并带有描述该位置的附加元数据。与LocationAddresscoordinate 类型不同,它们用于描述位置的位置。地点的基本属性是namelocation

地点对象通常是从搜索模型中获取的,一般只设置了基本属性。detailsFetched 属性可用于测试是否需要从Plugin 获取更多属性值。这可通过调用getDetails() 方法来实现。获取操作的进度可通过status 属性进行监控,当获取详细信息时,该属性将设置为 Place.Fetching。

地点类型有许多属性,其中包含有关地点的信息。有关如何联系该地点的详细信息可通过contactDetails 属性获取。此外,还有用于获取主要phone,fax,emailwebsite 的便捷属性。

每个地点都分配有零个或多个categories 。分类通常用于搜索特定类型的地点,如餐厅或酒店。有些地方有一个ratings 对象,用于显示该地方的质量。

地点元数据由supplier 提供,后者可能要求在用户查看地点详细信息时向其显示attribution 消息。

地点有一个相关的icon ,可用于在地图上表示地点或在视图中装饰代表。

地点可以有与之相关的附加丰富内容。目前支持的丰富内容包括编辑描述、评论和图片。这些内容作为一组用于检索内容的模型公开。地点的编辑描述可通过editorialModel 属性获取。有关该地方的评论可通过reviewModel 属性获取。可通过imageModel 属性访问该地点的图片库。

地方可能还有一些正式 API 未涵盖的附加属性。通过extendedAttributes 属性可以访问这些属性。每个Plugin 都有特定的扩展属性类型。

位置几乎总是与plugin 绑定。在调用save() 、remove() 或getDetails() 之前,必须先设置plugin 属性。只有设置了plugin 属性,reviewModelimageModeleditorialModel 才有效。

保存位置

如果Plugin 支持,则可以使用 "地点 "类型来保存地点。首先创建一个新地点并设置其属性:

Place {
    id: myPlace
    plugin: myPlugin

    name: "Brisbane Technology Park"
    location: Location {
        address: Address {
            street: "53 Brandl Street"
            city: "Eight Mile Plains"
            postalCode: "4113"
            country: "Australia"
        }
        coordinate {
            latitude: -27.579646
            longitude: 153.100308
        }
    }

    visibility: Place.PrivateVisibility
}

然后调用save() 方法:

    myPlace.save();

status 属性将变为 Place.Saving,如果保存成功,则变为 Place.Ready,如果发生错误,则变为 Place.Error。

如果placeId 属性被设置,后台将更新现有位置,否则将创建一个新位置。成功后,placeId 属性将更新为新保存地点的标识符。

注意事项

地点 API 目前仅用于保存core 的详细信息。不支持保存图片和评论等丰富内容,也不支持保存供应商和评级等详细信息。通常情况下,管理器在保存时会忽略这些字段,如果填充了这些字段,可能会产生警告信息。

地点 API 仅支持保存以下核心详细信息

  • 名称
  • 地点 ID
  • 地点
  • 联系方式
  • 图标
  • 类别(描述地点的标签式名称)
  • 可见性范围

提供商可能只支持其中的一个子集。详情请查看插件文档

Places API 明确不支持保存评级、扩展属性、图片、评论、社论和供应商等属性。

在插件之间保存

在插件之间保存地点时,有一些事项需要注意。位置的某些字段(如 id、类别和图标)是特定于插件的实体。例如,一个管理器中的类别在另一个管理器中可能无法识别。因此,尝试将一个位置从一个插件直接保存到另一个插件是不可能的。

一般建议跨插件保存的处理方式是保存favorites ,如收藏夹部分所述。不过还有另一种方法,即创建一个新地点,设置其(目的地)插件,然后使用copyFrom() 方法复制原始地点的详细信息。使用copyFrom() 只复制目标插件支持的数据,而不会复制插件特定的数据,如地点标识符。复制完成后,地点就处于可以保存的适当状态。

下面的代码段提供了一个使用copyFrom 方法将地点保存到不同插件的示例:

var place = Qt.createQmlObject('import QtLocation; Place { }', parent);
place.plugin = destinationPlugin;
place.copyFrom(originalPlace);
place.save();

删除位置

要删除地点,请确保存在一个具有有效placeId 属性的地点对象,并调用其remove() 方法。status 属性将变为 Place.Removing,如果保存成功,则变为 Place.Ready,如果出现错误,则变为 Place.Error。

收藏夹

位置 API 支持收藏夹的概念。收藏夹一般通过使用两个插件来实现,第一个插件通常是只读的地点来源(起源插件),第二个读/写插件(目的地插件)用于将起源的地点存储为收藏夹。

每个 "地点 "都有一个 "收藏夹 "属性,该属性旨在包含来自目的地插件的相应地点(地点本身来自起源插件)。由于原始地点和收藏夹实例都可用,开发人员可以选择向用户显示哪些属性。例如,收藏夹可能有一个修改过的名称,应显示该名称而不是原始名称。

Text { text: place.favorite ? place.favorite.name : place.name }

下面演示了如何保存新的收藏夹实例。调用创建/初始化收藏实例,然后保存该实例。

place.initializeFavorite(destinationPlugin);
//if necessary customizations to the favorite can be made here.
//...
place.favorite.save();

下面演示如何删除收藏夹:

place.favorite.remove();
    ...
//check successful removal of the favorite by monitoring its status.
//once that is done we can assign null to the favorite
place.favorite = null;

PlaceSearchModel 有一个 favoritesPlugin 属性。如果设置了该属性,则会根据 favoritesPlugin 检查在搜索过程中发现的任何位置,看是否有相应的收藏夹。如果有,则设置该地点的收藏夹属性,否则收藏夹属性保持为空。

另请参阅 PlaceSearchModel

属性文档

attribution : string

该属性包含地点的富文本属性字符串。某些提供商可能会要求在显示地点时向用户显示属性。如果该属性不为空,则应向用户显示其内容。


categories : list<Category> [read-only]

该属性包含该地点所属的类别列表。可分配给地点的类别是每个plugin 所特有的。


contactDetails : ContactDetails [read-only]

该属性包含该地点的联系信息,例如电话号码或网站 URL。该属性是contactDetail 对象的地图。


detailsFetched : bool [read-only]

该属性表示是否已获取该地点的详细信息。如果该属性为 false,则表示尚未获取地点的详细信息。可通过调用getDetails() 方法获取信息。

另请参阅 getDetails().


editorialModel : EditorialModel [read-only]

该属性包含一个模型,可用于检索该地点的编辑描述。


extendedAttributes : ExtendedAttributes [read-only]

该属性包含地点的扩展属性。扩展属性是地点属性未涵盖的有关地点的附加信息。


favorite : Place

该属性包含地点的收藏实例。


icon : Icon

该属性包含一个可用于表示地点的图形图标。


imageModel : ImageModel [read-only]

该属性包含一个可用于检索地点图像的模型。


该属性包含地点的位置,可用于检索坐标、地址和边界框。


name : string

该属性包含地点名称,可用于表示该地点。


placeId : string

该属性包含地点的唯一标识符。地点标识符只对生成它的Plugin 有意义,不可在Plugins 之间转让。地点标识符不保证普遍唯一,但在生成该标识符的Plugin 中是唯一的。

如果只知道地点标识符,则可从Plugin 获取所有其他地点数据。

    place.plugin = myPlugin;
    place.placeId = "known-place-id";
    place.getDetails();

plugin : Plugin

该属性包含提供该地点的Plugin ,可用于检索有关该服务的更多信息。


primaryEmail : string [read-only]

该属性包含该地点的主要电子邮件地址。如果没有为该地点定义 "电子邮件 "联系详情,该属性将为空字符串。等同于

    var primaryEmail;
    if (place.contactDetails["email"].length > 0)
        primaryEmail = place.contactDetails["email"][0].value;

primaryFax : string [read-only]

该属性包含该地点的主要传真号码。如果没有为该地点定义 "传真 "详细联系信息,该属性将为空字符串。等同于

    var primaryFax;
    if (place.contactDetails["fax"].length > 0)
        primaryFax = place.contactDetails["fax"][0].value;

primaryPhone : string [read-only]

该属性包含该地点的主要电话号码。如果没有为该地点定义 "电话 "联系详情,该属性将为空字符串。等同于

    var primaryPhone;
    if (place.contactDetails["phone"].length > 0)
        primaryPhone = place.contactDetails["phone"][0].value;

primaryWebsite : string [read-only]

该属性包含该地点的主要网站网址。如果没有为该地点定义 "网站 "详细联系信息,该属性将为空字符串。等同于

    var primaryWebsite;
    if (place.contactDetails["website"].length > 0)
        primaryWebsite = place.contactDetails["website"][0].value;

ratings : Ratings

该属性包含该地点的评级。评级可显示一个地方的质量。


reviewModel : ReviewModel [read-only]

该属性包含一个模型,可用于检索有关该地点的评论。


status : enumeration [read-only]

该属性保存地点的状态。它可以是

Place.Ready上次操作未发生错误,可对该地点执行进一步操作。
地点.正在保存当前正在保存位置,在保存完成前不得执行其他操作。
地点.获取当前正在获取地点详细信息,完成前不得执行其他操作。
删除地点当前正在删除地点,在操作完成前不能执行其他操作。
地点错误上次操作过程中发生错误,但仍可对该地点执行其他操作。

可以通过将 status 属性连接到处理函数来检查地点的状态,然后让处理函数处理状态的变化。

place.statusChanged.connect(statusChangedHandler);
    ...
function statusChangedHandler() {
    if (statusChangedHandler.prevStatus === Place.Saving) {
        switch (place.status) {
        case Place.Ready:
            console.log('Save successful');
            break;
        case Place.Error:
            console.log('Save failed');
            break;
        default:
            break;
        }
    }
    statusChangedHandler.prevStatus = place.status;
}

supplier : Supplier

该属性包含地点数据的供应商。供应商通常是收集地点数据的企业或组织。


可见性枚举

这一属性代表着该地的知名度。它可以是

Place.UnspecifiedVisibility地点的可见性未指定,将使用Plugin 的默认可见性。
地点.设备可见性地点仅限于当前设备。该位置不会从设备上转移。
位置私人可见性该位置对当前用户是私有的。该位置可转移到在线服务,但只有当前用户可见。
地点公共可见性地点是公开的。

请注意,可见性并不影响地点在设备上应用程序的用户界面中的显示方式。相反,它定义了场所的共享语义。


方法文档

void copyFrom(Place original)

将数据从original 复制到此位置。只有该位置插件支持的数据才会被复制,位置标识符等插件特定数据不会被复制。


string errorString()

返回关于上次操作错误的字符串描述。如果上次操作成功完成,则字符串为空。


void getDetails()

本方法开始获取地点详细信息。

在获取过程中,status 属性将更改为 Place.Fetching。成功时,对象的属性将被更新,status 将被设置为 Place.Ready,detailsFetched 将被设置为 true。出错时,status 将被设置为 Place.Error。errorString() 方法可用于获取错误的详细信息。


void initializeFavorite(Plugin destinationPlugin)

为要保存到目的地插件destinationPlugin 中的地点创建收藏夹实例。如果收藏夹属性不是null ,则此方法不会执行任何操作。


void remove()

此方法对地点执行删除操作。

在保存操作过程中,status 属性将更改为 Place.Removing。成功时,status 将被设置为 Place.Ready。出错时,status 将被设置为 Place.Error。errorString() 方法可用于获取错误的详细信息。


void save()

该方法对位置执行保存操作。

在保存操作过程中,status 属性将更改为 Place.Saving。成功时,status 将被设置为 Place.Ready。如果出错,status 将被设置为 Place.Error。errorString() 方法可用于获取错误的详细信息。

如果placeId 属性之前为空,则会在成功保存操作期间自动分配一个有效值。

请注意,PlaceSearchModel 会在检测到更新的任何地方调用Place::getDetails 。这样做的结果是,每当PlaceSearchModel 中的一个地点被成功保存时,都会随之获取地点的详细信息,从而导致Saving,Ready,Fetching,Ready 的一系列状态变化。


© 2025 The Qt Company Ltd. Documentation contributions included herein are the copyrights of their respective owners. The documentation provided herein is licensed under the terms of the GNU Free Documentation License version 1.3 as published by the Free Software Foundation. Qt and respective logos are trademarks of The Qt Company Ltd. in Finland and/or other countries worldwide. All other trademarks are property of their respective owners.