हां, आप एंड्रॉइड मैप्स एपीआई v2 के साथ कस्टम टाइल्स का उपयोग कर सकते हैं - आप जीथब पर एंड्रॉइड ऐप के लिए हमारे ओपनट्रिपलनर में पूरी तरह से काम करने वाले उदाहरण देख सकते हैं । (आप Google Play से सीधे ऐप भी डाउनलोड कर सकते हैं )
हम निम्नलिखित टाइल प्रदाताओं का समर्थन करते हैं:
- LyrkOpenStreetMap
- MapQuestOpenStreetMap
- Mapnik
- CycleMap
- Google (सामान्य, उपग्रह, संकर, भूभाग)
हमारे CustomUrlTileProvider वर्ग को यहाँ Github पर देखा जा सकता है , और मैंने इसे नीचे भी चिपकाया है:
public class CustomUrlTileProvider extends UrlTileProvider {
private String baseUrl;
public CustomUrlTileProvider(int width, int height, String url) {
super(width, height);
this.baseUrl = url;
}
@Override
public URL getTileUrl(int x, int y, int zoom) {
try {
return new URL(baseUrl.replace("{z}", "" + zoom).replace("{x}", "" + x)
.replace("{y}", "" + y));
} catch (MalformedURLException e) {
e.printStackTrace();
}
return null;
}
}
और यहाँ उपयोगकर्ता वरीयता के आधार पर मैप टाइल प्रदाताओं के बीच स्विच करने वाला कोड है:
/**
* Changes the tiles used to display the map and sets max zoom level.
*
* @param overlayString tiles URL for custom tiles or description for
* Google ones
*/
public void updateOverlay(String overlayString) {
int tile_width = OTPApp.CUSTOM_MAP_TILE_SMALL_WIDTH;
int tile_height = OTPApp.CUSTOM_MAP_TILE_SMALL_HEIGHT;
if (overlayString == null) {
overlayString = mPrefs.getString(OTPApp.PREFERENCE_KEY_MAP_TILE_SOURCE,
mApplicationContext.getResources()
.getString(R.string.map_tiles_default_server));
}
if (mSelectedTileOverlay != null) {
mSelectedTileOverlay.remove();
}
if (overlayString.startsWith(OTPApp.MAP_TILE_GOOGLE)) {
int mapType = GoogleMap.MAP_TYPE_NORMAL;
if (overlayString.equals(OTPApp.MAP_TILE_GOOGLE_HYBRID)) {
mapType = GoogleMap.MAP_TYPE_HYBRID;
} else if (overlayString.equals(OTPApp.MAP_TILE_GOOGLE_NORMAL)) {
mapType = GoogleMap.MAP_TYPE_NORMAL;
} else if (overlayString.equals(OTPApp.MAP_TILE_GOOGLE_TERRAIN)) {
mapType = GoogleMap.MAP_TYPE_TERRAIN;
} else if (overlayString.equals(OTPApp.MAP_TILE_GOOGLE_SATELLITE)) {
mapType = GoogleMap.MAP_TYPE_SATELLITE;
}
mMap.setMapType(mapType);
mMaxZoomLevel = mMap.getMaxZoomLevel();
} else {
if (overlayString.equals(getResources().getString(R.string.tiles_mapnik))) {
mMaxZoomLevel = getResources().getInteger(R.integer.tiles_mapnik_max_zoom);
} else if (overlayString.equals(getResources().getString(R.string.tiles_lyrk))) {
mMaxZoomLevel = getResources().getInteger(R.integer.tiles_lyrk_max_zoom);
tile_width = OTPApp.CUSTOM_MAP_TILE_BIG_WIDTH;
tile_height = OTPApp.CUSTOM_MAP_TILE_BIG_HEIGHT;
} else {
mMaxZoomLevel = getResources().getInteger(R.integer.tiles_maquest_max_zoom);
}
mMap.setMapType(GoogleMap.MAP_TYPE_NONE);
CustomUrlTileProvider mTileProvider = new CustomUrlTileProvider(
tile_width,
tile_height, overlayString);
mSelectedTileOverlay = mMap.addTileOverlay(
new TileOverlayOptions().tileProvider(mTileProvider)
.zIndex(OTPApp.CUSTOM_MAP_TILE_Z_INDEX));
if (mMap.getCameraPosition().zoom > mMaxZoomLevel) {
mMap.moveCamera(CameraUpdateFactory.zoomTo(mMaxZoomLevel));
}
}
}
यहाँ MapQuest OpenStreetMap टाइल्स का एक स्क्रीनशॉट है:
अपनी खुद की टाइलें बनाने के बारे में अधिक जानकारी के लिए, टाइलवॉर्ले के साथ-साथ "अपनी खुद की टाइलें बनाना" के लिए OpenStreetMap विकी के लिए Google दस्तावेज़ देखें ।
विशेष रूप से, Google दस्तावेज़ कहता है:
ध्यान दें कि मानचित्र के -180 डिग्री और देशांतर के दाईं ओर (पूर्व) की ओर मानचित्र के बायीं ओर (पश्चिम) तरफ मर्केटर प्रोजेक्शन (देखें विकिपीडिया) का उपयोग करके दुनिया को 180 डिग्री के देशांतर के अनुरूप माना जाता है। नक्शा वर्गाकार बनाने के लिए, मानचित्र का शीर्ष (उत्तर) भाग अक्षांश के 85.0511 डिग्री से मेल खाता है और मानचित्र का निचला (दक्षिण) भाग अक्षांश के -85.0511 डिग्री से मेल खाता है। इस अक्षांश सीमा के बाहर के क्षेत्रों का प्रतिपादन नहीं किया गया है।
प्रत्येक ज़ूम स्तर पर, मानचित्र को टाइलों में विभाजित किया जाता है और स्क्रीन को ओवरलैप करने वाली केवल टाइलें डाउनलोड और प्रदान की जाती हैं। प्रत्येक टाइल वर्गाकार है और नक्शा टाइलों में विभाजित है:
ज़ूम स्तर 0 पर, एक टाइल पूरी दुनिया का प्रतिनिधित्व करती है। उस टाइल के निर्देशांक हैं (x, y) = (0, 0)।
ज़ूम स्तर 1 पर, दुनिया को 2 x 2 ग्रिड में व्यवस्थित 4 टाइलों में विभाजित किया गया है। ...
- ज़ूम स्तर N पर, दुनिया को 2N x 2N ग्रिड में व्यवस्थित 4N टाइलों में विभाजित किया गया है।
ध्यान दें कि कैमरा द्वारा समर्थित न्यूनतम ज़ूम स्तर (जो विभिन्न कारकों पर निर्भर हो सकता है) GoogleMap.getMinZoomLevel है और अधिकतम ज़ूम स्तर GoogleMap.getMaxZoomLevel है।
टाइल्स के निर्देशांक को नक्शे के ऊपरी बाएं (उत्तर-पश्चिम) कोने से मापा जाता है। ज़ूम स्तर N पर, टाइल के निर्देशांक x का मान 0 से 2N - 1 तक होता है और पश्चिम से पूर्व की ओर बढ़ता है और y मान 0 से 2N - 1 तक होता है और उत्तर से दक्षिण तक बढ़ता है।
प्रत्येक टाइल प्रदाता को संदर्भित करने के लिए OTP Android के भीतर उपयोग किए जाने वाले स्वरूपित URL जैसे दिखते हैं:
इसलिए, उपरोक्त प्रदाताओं के लिए टाइल चित्र पीएनजी फाइलें हैं जो Google प्रलेखन द्वारा इंगित निर्देशिका संरचना में व्यवस्थित हैं। आप अपने स्वयं के सर्वर पर होस्ट किए गए अपने मैप टाइल बनाने के लिए एक समान प्रारूप का पालन करेंगे। ध्यान दें कि ये URL / चित्र सार्वजनिक रूप से मोबाइल डिवाइस (यानी, पासवर्ड से सुरक्षित नहीं हो सकते हैं) तक पहुंच होना चाहिए।