对于大多数使用地理位置,地图和方向的应用程序,我更喜欢Google地图。 因为Google Maps具有广泛的功能集,完善的文档以及用于实现任何视觉和编程思想的出色Mapkit。 不幸的是,谷歌地图并不是解决所有可能任务的灵丹妙药。 问题是公司无法完全理解某些地区,城市等,因此,可能无法提供房屋编号,甚至整条街道。
在图。 1您可以考虑在Google Maps和图2中一个市区的样子。 2您可以看到同一区域仅在Yandex地图上的外观。
无花果 1个
无花果 2以我的观点,这种差异可以通过肉眼看到,可以立即看出,由于某些原因,Google的地图没有/可能/想要绘制出城市的这一部分,而且如您所见,它缺少门牌号和街道名称。
由于对于出租车应用程序而言,拥有有关城市及其街道(公司,机构等)的最可靠信息非常重要,因此决定使用Yandex卡。 不管我使用Yandex卡有多长时间,这种感觉都像是第一次,不幸的是,其中许多都不会引起积极的情绪。 也许有人可以修复我,但是mapkit的文档非常稀少,我不得不从它的外观中雕刻出许多必要的功能。
卡片样式
为了赋予卡片独特性或将卡片嵌入设计中,您需要为其赋予必要的样式。 我发现的唯一方法并没有真正吸引我,因为如何使用它来定制卡片非常不方便,而且据我所知,我只了解色相,饱和度和亮度这些参数。
String style = "[" + " {" + " \"featureType\" : \"all\"," + " \"stylers\" : {" + " \"hue\" : \"1\"," + " \"saturation\" : \"-1\"," + " \"lightness\" : \"0.78\"" + " }" + " }" + "]"; mapView.getMap().setMapStyle(style);
征求建议
在达到提示请求的最终版本之前,已重新检查了几种方法,这是通过AskedSession接收提示的最后也是最有效的方法。
首先,创建SearchManager对象的实例和
RecommendationSession对象的实例:
private SearchManager searchManager; private SuggestSession suggestSession = null;
在onCreate()方法中初始化searchManager
searchManager = SearchFactory.getInstance() .createSearchManager(SearchManagerType.COMBINED);
此外,在requestSuggest(字符串查询)方法中,我们初始化了describeSession对象,并且我们不会忘记我们不需要每次都创建一个新会话。
if (suggestSession == null) suggestSession = searchManager.createSuggestSession();
为了获得有关公司的提示,我们使用SuggestType.BIZ参数,并且为了获得有关用户区域的数据,您需要使用BoundigBox,其初始化如下:
private final BoundingBox BOUNDING_BOX = new BoundingBox( new Point(66.066191, 76.468435), new Point(66.149326, 76.824836));
其中第一个点是矩形扇形的左下角和第二个右上角。
suggestSession.suggest(query, BOUNDING_BOX, new SuggestOptions() .setSuggestTypes(SuggestType.BIZ.value) .setUserPosition(CENTER), new SuggestSession.SuggestListener() { @Override public void onResponse(@NonNull List<SuggestItem> list) { } @Override public void onError(@NonNull Error error) { } });
如果需要街道,房屋等,则可以使用SuggestType.BIZ参数:
suggestSession.suggest(query, BOUNDING_BOX, new SuggestOptions() .setSuggestTypes(SuggestType.GEO.value) .setUserPosition(CENTER), new SuggestSession.SuggestListener() { @Override public void onResponse(@NonNull List<SuggestItem> list) { } @Override public void onError(@NonNull Error error) { } });
另外,注意到的问题之一是,对于相同的名称,会出现几个相同的值,因此,我建议您立即对它进行排序。
我今天想分享的最后一件事是在列表中显示您的uggestItem。 最初,一切似乎都很清楚,因为对象具有几个属性:
getSearchText(); getDisplayText();
我认为,这意味着有一条完整的搜索行和一条显示行,但是在99%的情况下,这些行重合以便获得简单的街道名称而不使用正则表达式(这可能会损害显示,因为可以整理理解所需的数据:街道名称,门牌号,公寓等),使用了以下功能:
suggestItem.getTitle().getText();
奇怪的是,尽管起初这个选项似乎并不那么明显,但是此功能可以提供必要的结果。
实际上,这只是此应用程序中必须遇到的一些小事情。 为了不拉伸文章,我将其留给第二部分,因为构建路线,显示标记和! 在出租车等应用中,汽车在地图上的旋转及其移动同样重要。
马特维年科·亚历山大(Matvienko Alexander),侯赛因·法赫(Hossein Fakhr)。