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

时间:2017-11-06 11:03:28

标签: xamarin geolocation maps cartodb carto-mobile

地图上的某些地方标有西里尔字母名称,但我只需要地图上的英文/拉丁文名称,但有时只有本地名称。我该如何实现呢? P.S。:我已经在白俄罗斯和部分俄罗斯地方发现了这个问题。

Screenshot

1 个答案:

答案 0 :(得分:0)

关于一般语言:毕竟,它取决于特定地名被标记的语言。 OpenStreetMap始终是" local"本地主要语言的变体,CARTO Mobile SDK默认使用它,但数据也有其他语言,因此您可以按照以下方式控制它。

CartoVectorTileLayerCartoOnlineVectorTileLayerCartoOfflineVectorTileLayer都是它的子类)有方法setLanguage(String)来选择语言,例如:

layer.setLanguage("en");

会给你英文语言地图。

在SDK 4.0.2 SDK和 nutiteq.osm 磁贴源中,您可以使用以下语言: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将回退到本地'默认情况下,语言不会为空。但是,如果当地的'语言仍然不可读,所以我更喜欢拉丁字母名称?在SDK 4.1.0中,您可以配置主要和辅助后备语言,例如你将主要语言设置为' de'对于德国人来说,那么为了避免奇怪的字母(比如希伯来语,希腊语,亚洲大部分地区),请设置“' en'作为主要后备;只有在缺少主要和英文名称时才使用local:

layer.FallbackLanguage = "en";

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