gpt4 book ai didi

ios - 使用 MBTiles 和矢量切片进行离线地理编码

转载 作者:行者123 更新时间:2023-11-30 12:08:12 29 4
gpt4 key购买 nike

我使用 carto-mobile SDK 加载我所在国家/地区的 MBTiles Vector Tile 数据源

    // Initialize base layer with a bundled styles
let baseLayer = NTCartoOnlineVectorTileLayer(style: NTCartoBaseMapStyle.CARTO_BASEMAP_STYLE_GRAY)

// Use the style for your own vector tile datasource (online, offline etc),
let tileDataSource = NTMBTilesTileDataSource(path: Bundle.main.path(forResource: "estonia_ntvt", ofType: "mbtiles"))

// Initialize offline layer & Grab vector tile layer from our base layer
let offlineLayer = NTVectorTileLayer(tileDataSource, baseLayer?.getTileDecoder())

mapView?.layers?.add(baseLayer)
mapView?.layers?.add(offlineLayer)

并且显示一切正常,所以我有我的 map 和所有功能。

现在我想搜索兴趣点街道名称

我知道 MBTiles 拥有其内部的所有信息,但我如何访问该信息?

这可能吗?如果可能的话,我该怎么做??

最佳答案

CARTO移动SDK的最新版本(4.1.0)具有使用mbtiles的NTVectorTileSearchService。目前还没有相应的用户文档,但可以从 AdvancedMap.Swift 找到示例代码。 。

// init search service with your mbtiles 
searchService = NTVectorTileSearchService(dataSource: baseSource, tileDecoder: baseLayer.getTileDecoder())

// prepare search request, set some conditions.
// This search is to find attractions within 500m from a route geometry

let request = NTSearchRequest()
request?.setProjection(contentView.baseSource.getProjection())
request?.setGeometry(geometry)
request?.setSearchRadius(500.0)
request?.setFilterExpression("class='attraction'")

// actual search
let results = contentView.searchService.findFeatures(request)
let count = Int((results?.getFeatureCount())!)

// go through found items
for i in 0..<count {
let item = results?.getFeature(Int32(i))!

if (item?.getGeometry() is NTPointGeometry) {
contentView.addPOI(feature: item!)
}
}

请注意,此搜索服务更适用于 POI 或街道几何搜索。另请注意,同一条街道通常在不同的图 block 中重复,并且大多边形在图 block 中通常是部分的。

通过地理编码,我们的意思有点不同 - 搜索人类可读的地址或搜索给定位置的地址(反向地理编码)。 MBTiles/Vector 切片没有这方面的完整数据,它针对视觉外观进行了优化。例如,建筑物或地址点可能有门牌号码标签,但其中几乎从来没有街道或城市和国家数据,因为它是多余的,并且对于可视 map 来说是不需要的。现在对于文字地理编码,CARTO SDK 也有解决方案:NTGeocodingService。您可以在线或离线使用此功能,只是对于离线情况,SDK 必须为每个国家(或城市,如果您需要)下载特殊的不同数据包。这些数据包具有完整的分层地址数据,因此真正的地理编码可以与它们一起使用。因此,对于完整的离线数据,您需要分别获取两个离线包:用于 map 的 mbtiles 和地理编码数据库。如果您还想要离线路由,则使用第三个数据集,因为这也无法仅通过 mbtiles/矢量图 block 正确完成。

这是非常新的功能,因此您需要使用 SDK 的预发布版本,但非常欢迎您提供反馈。

关于ios - 使用 MBTiles 和矢量切片进行离线地理编码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/46425663/

29 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com