Google Maps Android API v2 в Китае - загрузка карты заняла около часа
Что у меня есть: нативное приложение для Android, которое использует Android Maps API v2 (нативная библиотека)
Все хорошо работает в Гонконге и Украине. Проблемы возникли, как только мы вступили в китайскую границу. У нас есть следующие проблемы:
- Карта загружается от 30 минут до часа.
- Даже при загрузке разрешение карты очень низкое http://i.gyazo.com/d4f40e1a225bd48a90087c39a502e4a6.png
- Google Map работает самостоятельно: http://i.gyazo.com/dc85e3618c285ced5bba799053dd0306.png
Что я знаю о Китае:
- Google там не очень дружелюбен, но наше приложение не является тем, которое использует карты Google в Китае, поэтому моя проблема, вероятно, не новая.
- Существует возможность использовать карты Google, размещенные локально в Китае, - ditu.google.cn, но, как только мы используем собственное приложение, теперь нет возможности использовать веб-вид карты вместо собственной реализации (у нас есть много настроек)
- Я знаю, что лучше не использовать HTTPS с картами Google (вы можете прочитать об этом здесь: Google Maps Geolocation API для Китая)
Вопрос в том:
- Можем ли мы как-то улучшить загрузку карты? Можем ли мы как-то переопределить источник карты Google, чтобы использовать ditu.google.cn?
- Можем ли мы как-то отключить HTTPS в Map API?
- Любое другое решение этой проблемы, которое может быть применено на основе сервисов Google. Может быть, есть какие-то недокументированные функции?
То, что не ожидал в качестве ответа, является чем-то вроде "Используйте Baidu". Я знаю Baidu, и это вариант резервной копии, как только у них есть api docs на китайском языке.
Стоит добавить, что API геокодирования на основе ditu.google.cn работает хорошо.
С нетерпением жду, спасибо!
2 ответа
Может быть, вы не можете переопределить исходный источник плитки. Но вы можете использовать TileOverlay для получения плитки карт с внешнего сервера.
Пример использования:
TileProvider tileProvider = new UrlTileProvider(256, 256) {
//...
@Override
public URL getTileUrl(int x, int y, int zoom) {
/* Define the URL pattern for the tile images */
String s = String.format("http://my.image.server/images/%d/%d/%d.png",
zoom, x, y);
if (!checkTileExists(x, y, zoom)) {
return null;
}
try {
return new URL(s);
} catch (MalformedURLException e) {
throw new AssertionError(e);
}
}
//...
}
Вы можете заменить my.image.server
с ditu.google.cn
и использовать API внешнего сервера для получения изображений тайлов. В Картах вы можете установить OnCameraChangeListener, чтобы приложение загружало плитки с внешнего сервера при масштабировании или панорамировании карты.
Подробнее: https://developers.google.com/maps/documentation/android/tileoverlay
У Google до сих пор нет лицензии на публикацию карт в Китае (по крайней мере, как гласит моя последняя информация). Вполне возможно, что в ближайшем будущем сервисы Google Map будут заблокированы.
Многие китайские веб-сайты, в том числе и наши, используют Google JS и API своих сервисов. Среди них API-интерфейсы геокодирования Google. в Китае baidu (NASDAQ:BIDU) и sogou [второстепенная поисковая система, часть sohu (NASDAQ:SOHU)] предоставили онлайн-карты, а также API,
Главная страница API-интерфейса baidu: http://dev.baidu.com/wiki/map/in...
карта API sogou дома является http://map.sogou.com/api/
на самом деле, в Китае, на данный момент, API Google Maps все еще доступны сейчас. Начиная с недавних новостей chinatech.us, Google China прошла ежегодную проверку и получила больше возможностей для получения бизнес-лицензии на онлайн-карту, поэтому 3 API есть и доступны.