首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >基于向量块的MBTiles离线地理编码

基于向量块的MBTiles离线地理编码
EN

Stack Overflow用户
提问于 2017-09-26 11:46:03
回答 1查看 803关注 0票数 1

我使用carto-mobile SDK加载了我国的MBTiles Vector 数据源。

代码语言:javascript
复制
    // 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)

一切都很好,所以我有我的地图和所有的特征。

所以现在我想搜索一个POI或者一个街道名

我知道MBTiles里面有所有的信息,但是我如何才能访问这些信息呢?

这是可定位的吗?如果可能的话,我是怎么做到的?

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2017-09-27 09:54:58

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

代码语言:javascript
复制
// 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或街道几何搜索。也要注意,同一条街常常在不同的瓷砖中被复制,而大多边形在平铺中往往是局部的。

地理编码指的是一些不同的东西--搜索人类可读的地址或搜索给定位置的地址(反向地理代码)。MBTiles/Vector没有这方面的完整数据,它优化了可视化外观。例如,建筑物或地址点可能有房屋号标签,但几乎从来没有街道或城市和国家的数据,因为它将是多余的,不需要视觉地图。现在,对于文字地理编码,CARTO也有解决方案:NTGeocodingService.您可以在线或脱机使用此选项,仅对于脱机情况SDK必须下载每个国家(或城市,如果需要的话)的特殊不同的数据包。这些数据包具有完整的分层地址数据,因此真正的地理编码将与它们一起工作。因此,对于完整的脱机数据,您需要分别获得两个离线包:用于地图的mbtiles和地理编码数据库。如果您也希望离线路由,那么第三次数据集,因为这也不能正确地从mbtiles/向量块单独完成。

这是非常新的特性,所以您需要使用预发布版本的SDK,但您的反馈非常欢迎。

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/46425663

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档