如何在 Carto 服务中启用某些地方的拉丁名称而不是本地名称?

How to enable Latin names for places in some places instead of local ones in Carto Services?

地图上有些地方标有西里尔文名称,但我只需要 English/Latin 地图上的地方名称,但有时只有当地名称。我该如何实施? P.S.: 我在白俄罗斯和部分俄罗斯地方发现了这个问题。

Screenshot

关于一般语言:毕竟,这取决于特定地名标记的语言。 OpenStreetMap一直有"local"当地主要语言的变体,CARTO Mobile SDK默认使用这个,但数据也有其他语言,所以你可以控制它如下。

CartoVectorTileLayerCartoOnlineVectorTileLayerCartoOfflineVectorTileLayer 都是它的子类)有方法 setLanguage(String) 到 select 语言,所以例如:

layer.setLanguage("en");

会给你英文地图。

在 SDK 4.0.2 SDK 和 nutiteq.osm tile source 你可以使用以下语言: local/default, en, es, de, fr, it , ru, zh(中文),tr(土耳其语)和 et(爱沙尼亚语)作为语言

使用最新的 CARTO SDK 4.1.0 和新的 carto.streets 源,您可以使用任何 OSM 语言。我建议根据设备语言设置配置地图,例如:

// Android
layer.setLanguage(Locale.getDefault().getLanguage());

// iOs / Xamarin
layer.Language = Foundation.NSLocale.PreferredLanguages[0].Substring(0, 2);

如果特定名称在给定语言中不可用怎么办?然后 MapView 将默认回退到 'local' 语言,地图不会为空。但是如果 'local' 语言仍然不可读,那么我更喜欢拉丁字母名称?在 SDK 4.1.0 中,您可以配置主要和次要后备语言,例如您将德国人的主要语言设置为 'de',然后为了避免出现奇怪的字母表(比如希伯来语、希腊语、亚洲大部分地区),将 'en' 设置为主要后备语言;那么仅当您的主要姓名和英文姓名都缺失时才使用本地:

layer.FallbackLanguage = "en";

现在我知道你想要自动音译/罗马化的名字,所以即使来自 OpenStreetMap 的源数据有,例如只有西里尔字母的名字(俄罗斯、白俄罗斯等),然后它会用拉丁字符显示它们。它与翻译不完全相同,例如Moscow 将成为罗马化的 Moskva,但在许多情况下会有所帮助,实际上对于所有 none-拉丁文字,尤其是来自亚洲(中文等)的情况。这里的问题是,包括俄语在内的许多语言都有许多相互竞争的罗马化规则,因此即使我们愿意,也无法在通用 SDK 地图渲染级别上做到这一点。我们的 CARTO SDK 可能会为应用程序提供 API 以应用您首选的翻译 table,但无论如何我们都没有。 SDK是开源的,欢迎您提供功能补丁。我为此项目添加了问题:https://github.com/CartoDB/mobile-sdk/issues/147