অ্যান্ড্রয়েডের জন্য গুগল ম্যাপ এপিআই ভি 2 দিয়ে কাস্টম মানচিত্র টাইলস ব্যবহার করা।


10

আমি অ্যান্ড্রয়েডের জন্য গুগল ম্যাপ এপিআই ভি 2 দিয়ে কাস্টম মানচিত্র টাইল ব্যবহার করার উপায় খুঁজছি।

আমি একটি অ্যাপ্লিকেশন লিখছি যা কোনও রোবট থেকে আগত ডেটার সাথে রিয়েল টাইমে এটির নিজস্ব মানচিত্র তৈরি করবে।

অ্যাপ্লিকেশনটির এই মানচিত্রটি অপারেটরকে দেখানো দরকার। অপারেটরকে এই মানচিত্রের সাথে যোগাযোগ করতে হবে, ওয়ে পয়েন্টগুলি প্রদান করা ইত্যাদি need

এই পৃষ্ঠায় একই কাজ করতে আমি গুগলম্যাপ ইঞ্জিনটি ব্যবহার করতে চাই:

http://cdn.mikecouturier.com/blog.mikecouturier.com/tilesgenerator/index.html

সমস্যাটি হ'ল যখন আমি অ্যান্ড্রয়েড এপিআই ব্যবহার করতে চাই তখন সে জাভাস্ক্রিপ্ট এপিআই ব্যবহার করেছিল

গুগল ম্যাপস ইঞ্জিনের সাথে অ্যান্ড্রয়েডে কাস্টম টাইলস মানচিত্র ব্যবহার করার কোনও উপায় আছে কি?

আমি ইতিমধ্যে আর্কজিআইএস কীভাবে ব্যবহার করব তা দেখছি তবে, আমি লাইসেন্সের জন্য অর্থ প্রদান না করে কোনও এপিআই ব্যবহার করতে পছন্দ করি।

উত্তর:


8

হ্যাঁ, আপনি অ্যান্ড্রয়েড মানচিত্রের এপিআই v2 এর সাথে কাস্টম টাইলস ব্যবহার করতে পারেন - আপনি গিথুবের অ্যান্ড্রয়েড অ্যাপের জন্য আমাদের ওপেনট্রিপপ্ল্যানারে একটি সম্পূর্ণ কার্যকারিতা উদাহরণ দেখতে পাচ্ছেন । (আপনি সরাসরি গুগল প্লে থেকে অ্যাপটি ডাউনলোড করতে পারেন )

আমরা নিম্নলিখিত টাইল সরবরাহকারীদের সমর্থন করি:

  • LyrkOpenStreetMap
  • MapQuestOpenStreetMap
  • Mapnik
  • CycleMap
  • গুগল (সাধারণ, উপগ্রহ, হাইব্রিড, অঞ্চল)

আমাদের 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));
        }
    }
}

এখানে ম্যাপকোয়েস্ট ওপেনস্ট্রিটম্যাপ টাইলগুলির একটি স্ক্রিনশট রয়েছে: এখানে চিত্র বর্ণনা লিখুন

নিজের টাইলস তৈরির বিষয়ে আরও তথ্যের জন্য, "নিজের নিজস্ব টাইলস তৈরি করার" জন্য টাইলওভারলে গুগল ডকুমেন্টেশন পাশাপাশি ওপেনস্ট্রিটম্যাপ উইকি দেখুন

বিশেষত, গুগল ডকুমেন্টেশন বলে:

নোট করুন যে পৃথিবীটি দ্রাঘিমাংশের -180 ডিগ্রি এবং মানচিত্রের ডান (পূর্ব) পাশের দ্রাঘিমাংশের 180 ডিগ্রিটির সাথে সামঞ্জস্য রেখে মানচিত্রের বাম (পশ্চিম) পাশ দিয়ে মার্কেটর প্রক্ষেপণ (উইকিপিডিয়া দেখুন) ব্যবহার করে অনুমান করা হয়েছে। মানচিত্রটিকে বর্গক্ষেত্র তৈরি করতে মানচিত্রের শীর্ষ (উত্তর) পাশটি 85.0511 ডিগ্রি অক্ষাংশ এবং ম্যাপের নীচে (দক্ষিণ) পাশের সাথে অক্ষাংশের -85.0511 ডিগ্রির সাথে সামঞ্জস্য রয়েছে। এই অক্ষাংশের সীমার বাইরে অঞ্চলগুলি রেন্ডার করা হয় না।

প্রতিটি জুম স্তরে, মানচিত্রটি টাইলগুলিতে বিভক্ত হয় এবং কেবল স্ক্রিনগুলি ওভারল্যাপ করে এমন টাইলগুলি ডাউনলোড এবং রেন্ডার হয়। প্রতিটি টাইল বর্গক্ষেত্র এবং মানচিত্রটি টাইলগুলিতে নিম্নরূপে বিভক্ত:

  • জুম স্তরে 0, একটি টাইল পুরো বিশ্বকে উপস্থাপন করে। এই টাইলের স্থানাঙ্কগুলি হ'ল (x, y) = (0, 0)।

  • জুম স্তর 1 এ, বিশ্বের 2 x 2 গ্রিডে সাজানো 4 টি টাইল বিভক্ত। ...

  • জুম স্তরে এন, বিশ্বের 2N x 2N গ্রিডে সাজানো 4N টাইলগুলিতে বিভক্ত।

নোট করুন যে ক্যামেরাটি সর্বনিম্ন জুম স্তরটি সমর্থন করে (যা বিভিন্ন কারণের উপর নির্ভর করতে পারে) হ'ল গুগলম্যাপ.সেটমিনজুমলেভ এবং সর্বোচ্চ জুম স্তর হ'ল গুগল্যাপ get

টাইলগুলির স্থানাঙ্কগুলি মানচিত্রের উপরের বাম (উত্তর পশ্চিম) কোণ থেকে পরিমাপ করা হয়। জুম স্তরে এন, টাইল স্থানাঙ্কের এক্স মানগুলি 0 থেকে 2N - 1 এবং পশ্চিম থেকে পূর্ব দিকে বৃদ্ধি পায় এবং y মান 0 থেকে 2N - 1 এবং উত্তর থেকে দক্ষিণে বৃদ্ধি পায়।

প্রতিটি টালি সরবরাহকারীর রেফারেন্স হিসাবে OTP অ্যান্ড্রয়েডের মধ্যে ব্যবহৃত ফর্ম্যাট URL গুলি দেখতে:

সুতরাং, উপরোক্ত সরবরাহকারীদের জন্য টাইল চিত্রগুলি হ'ল গুগল ডকুমেন্টেশন দ্বারা নির্দেশিত ডিরেক্টরি কাঠামোয় সাজানো পিএনজি ফাইল। আপনি নিজের সার্ভারে হোস্ট করা আপনার নিজস্ব মানচিত্র টাইলস তৈরি করতে অনুরূপ ফর্ম্যাটটি অনুসরণ করবেন। নোট করুন যে এই ইউআরএল / চিত্রগুলি অবশ্যই মোবাইল ডিভাইসে সর্বজনীনভাবে অ্যাক্সেসযোগ্য (যেমন, পাসওয়ার্ড সুরক্ষিত হতে পারে না)।


আপনার সময় জন্য ধন্যবাদ। আমার দ্বারা সম্পূর্ণরূপে নির্মিত চিত্রগুলি ব্যক্তিগত ভাণ্ডারে ব্যবহার করা সম্ভব? সেই টাইলের ফর্ম্যাট কী? আর আরবোরেসেন্স?
MonkeyJLuffy

@ মনকিজেফুলি আমি এর জন্য আমার উত্তরের নীচে কিছু তথ্য যুক্ত করেছি। এটি পড়ার পরেও আপনার যদি এখনও প্রশ্ন থাকে তবে আমাকে জানান let
শান বারবেউ

1

আমি সর্বাধিক বিস্তৃত সমাধানটি খুঁজে পেয়েছি এটি হ'ল এই স্ট্যাকওভারফ্লো উত্তর :

মূলত আপনার নিজের টাইলপ্রভাইডার প্রয়োগ করতে হবে এবং এটি একটি টাইলওভারলে হিসাবে ব্যবহার করতে হবে

বেশ কয়েকটি অ্যাপ্লিকেশনটিতে আমরা মানচিত্রে টাইলগুলি দেখানোর জন্য এই ধরণের স্তর ব্যবহার করেছি তবে আমরা দেখতে পেলাম যে টাইলগুলি অনেক বেশি জায়গা নিয়েছে। তাই আমরা মানচিত্রে এমবটাইলস থেকে ডেটা প্রদর্শন করতে এমবাইলস এবং এই লাইব্রেরিটি ব্যবহার করে স্থানান্তরিত করেছি ।

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.