首页 > 解决方案 > 带有西里尔街道名称的 Mapbox 地理编码

问题描述

我正在尝试使用 MapBox 地理编码进行地理编码。我在搜索西里尔文(塞尔维亚语)街道名称时遇到问题。当我搜索城市名称(显示为拉丁文)时,我可以找到它们。此外,MapBox 没有选项以塞尔维亚语(仅英语、法国、德国、西班牙语)显示地图。但是,我尝试将语言设置为塞尔维亚语,但没有帮助。

这是我的代码,但我认为代码没有问题,只是 MapBox 有问题,不提供对塞尔维亚的支持。

private void getCoordinatesFromAddress(String address) {
    progressDialog.setCancelable(false);
    progressDialog.setMessage("Pronalazenje lokacije...");
    progressDialog.show();


    MapboxGeocoding mapboxGeocoding = MapboxGeocoding.builder()
            .accessToken(getString(R.string.mapbox_access_token))
            .query(address)
            .mode(GeocodingCriteria.MODE_PLACES)
            .geocodingTypes(GeocodingCriteria.TYPE_ADDRESS, GeocodingCriteria.TYPE_PLACE)
            .proximity(Point.fromLngLat(21.895759,43.320902))
            .country("RS")
            .languages("sr")
            .build();

    mapboxGeocoding.enqueueCall(new Callback<GeocodingResponse>() {
        @Override
        public void onResponse(Call<GeocodingResponse> call, Response<GeocodingResponse> response) {

            List<CarmenFeature> results = response.body().features();

            if (results.size() > 0) {

                progressDialog.dismiss();

                Point firstResultPoint = results.get(0).center();
                publicFunctions.displayToast("Lokacija " + address + " pronadjena");
                move(firstResultPoint.latitude(),firstResultPoint.longitude());
            } else {
                publicFunctions.displayToast("Lokacija " + address + " nije pronadjena");
                progressDialog.dismiss();
            }
        }

        @Override
        public void onFailure(Call<GeocodingResponse> call, Throwable throwable) {
            throwable.printStackTrace();
            progressDialog.dismiss();
        }
    });
}

标签: mapboxgeocodingmapbox-android

解决方案


在https://docs.mapbox.com/api/search/#local-coverage提到了塞尔维亚语

您可以使用 Mapbox Geocoding Playground 进行探索。这是一个 URL,它将加载 Playground 的设置以匹配您上面的地理编码查询代码。确保在 Playground 中键入塞尔维亚语查询,因为正在应用塞尔维亚语过滤器。


推荐阅读