অফলাইন ব্যবহারের সাথে অ্যান্ড্রয়েড ম্যাপ অ্যাপের জন্য সমাধান?


14

আমি এম্বেড থাকা মানচিত্রের সাথে অ্যান্ড্রয়েডের জন্য একটি অ্যাপ্লিকেশন বিকাশের উপায় অনুসন্ধান করছি যা কোনও ইন্টারনেট সংযোগ ছাড়াই কাজ করতে পারে (যেমন আমি অফলাইন ব্যবহারের জন্য উন্মুক্ত স্ট্রিটম্যাপের টাইলগুলি পেতে পারি?)।

গুগল ম্যাপস এপিআই ভি 3 ব্যবহার করে আমি এর আগে ওয়েব অ্যাপস তৈরি করেছি। আমার নির্দিষ্ট উত্তর হিসাবে আমার একটি সাধারণ উত্তর প্রয়োজন I আমি যে ধারণাগুলি এবং প্রযুক্তিগুলি শিখতে হবে তা সন্ধান করার চেষ্টা করছি :)

(ইতিমধ্যে আমি ওসড্রয়েড পেয়েছি it এটি কি অফলাইনে কাজ করে?)


এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি কি অন্য কিছু প্রশ্ন থাকে, তাহলে আপনি এটি ক্লিক করে অনুরোধ করতে পারেন প্রশ্ন জিজ্ঞাসা করুন । আপনি এটিও করতে পারেন একটি খয়রাত যোগ একবার আপনি যথেষ্ট আছে এই প্রশ্নের আরো দৃষ্টি আকর্ষণ করতে খ্যাতি
জেসন শিয়েরার

ওসমান ব্যবহারকারীর ইচ্ছায় কোনও কাস্টমাইজড মানচিত্র আমদানি করার অনুমতি দেয় না তবে এটি কেবল অফলাইনে ব্যবহারের জন্য অ্যাপ্লিকেশন থেকে সরাসরি মানচিত্র ডাউনলোড করার অনুমতি দেয়। আমার ক্ষেত্রে যেমন আমার টপোশিটগুলি (রাস্টার মানচিত্র) ওভারলে করা দরকার যা * .kmz তে রূপান্তরিত হয়েছিল। আমার প্রয়োজনীয়তা অফলাইন ব্যবহারের জন্য। আমি এই জাতীয় অফলাইন মানচিত্র সমর্থন অ্যান্ড্রয়েড অ্যাপ্লিকেশন বিকাশ জন্য একটি সঠিক দিকনির্দেশ খুঁজছি।
সুরাপ করুন

এটি কোথায় এবং কীভাবে অফলাইনে ব্যবহারের জন্য মানচিত্র পাবেন তার মূল প্রশ্নের উত্তর দেয় না।
মেরিবেথ

এটি আসলে প্রশ্নের উত্তর দেয় না। আপনি কি অন্য কিছু প্রশ্ন থাকে, তাহলে আপনি এটি ক্লিক করে অনুরোধ করতে পারেন প্রশ্ন জিজ্ঞাসা করুন । আপনি এটিও করতে পারেন একটি খয়রাত যোগ একবার আপনি যথেষ্ট আছে এই প্রশ্নের আরো দৃষ্টি আকর্ষণ করতে খ্যাতি । - পর্যালোচনা থেকে
জন পাওয়েল

উত্তর:


8

আপনি কি মোবাইল / সেল অ্যাপের জন্য বিকাশ খুঁজছেন? নতুন গুগল ট্যাবলেটটি রাস্টার টাইলগুলির পরিবর্তে ভেক্টর ফর্ম্যাটে অফলাইন গুগল ম্যাপের সাথে আসে।

গুগল হানিকম্ব (ট্যাবলেট) এর গুগল ম্যাপস অফলাইন (ভেক্টর) এর সম্পূর্ণ সমর্থন রয়েছে

http://androidandme.com/2010/12/news/andy-rubin-demos-honeycomb-running-on-a-dual-core-motorola-tablet/

নীচের ভিডিওটি অ্যাপ্লিকেশনটি ব্যাখ্যা করে এবং দেখায়।


13

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

package com.main.utilinspect;

import java.io.File;
import java.io.FileNotFoundException;
import java.io.IOException;
import java.io.RandomAccessFile;
import java.util.List;

import org.codehaus.jackson.JsonFactory;
import org.codehaus.jackson.JsonParser;

import android.content.Context;
import android.util.Log;
import android.database.Cursor;
import android.database.sqlite.SQLiteDatabase;

import com.esri.core.internal.c.d;
import com.esri.core.internal.c.h;
import com.esri.core.internal.c.l;

import com.esri.android.map.TiledServiceLayer;

public class OfflineDbTiledLayer extends TiledServiceLayer {

File workingDirectory;
String mapDefinition;
String databaseName;
private SQLiteDatabase database;
File blankImage;

byte[] blankImageBytes;

private final Object lock = new Object();


private static final String TAG = "OfflineTiledLayer";  


public OfflineDbTiledLayer(Context paramContext, File workingDirectory, String mapDefinition, String databaseName)  {
    super("required");
    this.workingDirectory = workingDirectory;
    this.mapDefinition = mapDefinition;
    this.databaseName = databaseName;

    String databasePath = workingDirectory.getAbsolutePath() + File.separator + databaseName;

    this.database = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 

    this.blankImage = new File(workingDirectory.getAbsolutePath() + File.separator + "blank.png");

    RandomAccessFile raFile = null;

    try {
        raFile = new RandomAccessFile(this.blankImage, "r");

        blankImageBytes = new byte[(int) raFile.length()];
        raFile.readFully(blankImageBytes);

    } catch (FileNotFoundException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    } catch (IOException e) {
        // TODO Auto-generated catch block
        e.printStackTrace();
    }       
    finally {
        if(raFile != null) {
            try {
                raFile.close();
            } catch (IOException e) {
                // TODO Auto-generated catch block
                e.printStackTrace();
            }
        }
    }   

    h h1 = null;

    try
    {

    JsonParser paramJsonParser = new JsonFactory()
    .createJsonParser(new File(workingDirectory.getAbsolutePath() + File.separator + mapDefinition));
    paramJsonParser.nextToken();    

    h1 = h.a(paramJsonParser, "test");
    }
    catch(Exception ex){

    }       


    setFullExtent(h1.f());      
    setDefaultSpatialReference(h1.c());
    setInitialExtent(h1.e());

    l l1;
    List list;
    int i;
    double ad[] = new double[i = (list = (l1 = h1.d()).h).size()];
    double ad1[] = new double[i];
    for(int j = 0; j < list.size(); j++)
    {
        ad[j] = ((d)list.get(j)).b();
        ad1[j] = ((d)list.get(j)).a();
    }

    setTileInfo(new com.esri.android.map.TiledServiceLayer.TileInfo(l1.f, ad, ad1, i, l1.c, l1.b, l1.a));

    super.initLayer();
    return;     
}   

private void openDatabase(){
    if(!database.isOpen()){
        String databasePath = workingDirectory.getAbsolutePath() + File.separator + databaseName;
        this.database = SQLiteDatabase.openDatabase(databasePath, null, SQLiteDatabase.NO_LOCALIZED_COLLATORS); 
    }
}

private void closeDatabase(){
    if(database.isOpen()){
        this.database.close();
    }
}

@Override
protected byte[] getTile(int level, int column, int row) throws Exception {
    byte[] tileImage;       

    Log.i(TAG, "getTile");

    Log.i(TAG, "getTile - retrieving tile");            

    synchronized(lock) {

        Log.i(TAG, "getTile - entered synchronized block");

        openDatabase();     

        // First check to see if the tile exists in the database
        Cursor tileCursor = database.rawQuery("SELECT image FROM tiles WHERE level = " + Integer.toString(level) + " AND row = " + Integer.toString(row) + " AND column = " + Integer.toString(column), null);

        if(tileCursor != null && tileCursor.getCount() > 0) {
            tileCursor.moveToFirst();
            tileImage = tileCursor.getBlob(0);
            Log.i(TAG, "getTile - tile found, returning image");                        
        }
        else {
            // The tile does not exist in the database, read the blank placeholder tile and serve it
            tileImage = blankImageBytes;
            Log.i(TAG, "getTile - tile not found returning blank");
        }   

        tileCursor.close();     
        this.database.close();
    }

    Log.i(TAG, "getTile - exited synchronized block");

    return tileImage;   
}

}


আপনি কিছু কোড শেয়ার করতে পারেন?
গ্রেগম

আমি আমার কাস্টম লেয়ার ক্লাস যুক্ত করেছি যা কাজ করে।
Eptiliom

7

আমি অ্যান্ড্রয়েডের জন্য অফলাইন মানচিত্র সহ একটি অ্যাপ্লিকেশন তৈরি করেছি। আপনি কেবলমাত্র মুক্ত সরঞ্জামটি ব্যবহার করতে চান সেটি হ'ল ওএসএমড্রয়েড, অন্যথায় ইএসআরআই। ওএসএমড্রয়েড এপিআই গুগলের সমতুল্য, তাই আপনি যদি একে অপর থেকে অন্যটিতে যেতে চান তবে এটি বাতাস।

ওএসএমড্রয়েডে গুগল ম্যাপকে কীভাবে সংহত করা যায় তার নমুনা সহ এই পোস্টটি দেখুন ((এটি সাধারণভাবে কীভাবে ব্যবহার করতে হয় এটি আপনাকে একটি ধারণা দেয়)।


2

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

মূলত তারা xGPS কী করে এবং আপনি কী করতে চান তা হ'ল আপনার ফোনে স্থানীয়ভাবে মানচিত্রের টাইলগুলি ক্যাশে করা। এই মোবাইল ফোনে স্থান সীমিত। হ্যাঁ আপনার ফোনে 32 জিবি থাকলেও সমস্ত জুম স্তরের (আইশের) ছোট দেশকে ক্যাশে দেওয়ার জন্য এটি যথেষ্ট। এই ফোনগুলির কোনওটিরই (যদি না কোনওভাবে বাহ্যিক স্টোরেজের সাথে সংযুক্ত থাকে) সমস্ত জুম স্তরে বিশ্বকে ক্যাশে করার জন্য পর্যাপ্ত জায়গা থাকবে না। আমি ভাবছি এটির জন্য পেটবাইট সংগ্রহের প্রয়োজন হবে।

সুতরাং আপনার অনলাইন ব্যবহারের সময় আপনার ব্যবহারকারীকে "অঞ্চলগুলি" বা মানচিত্রগুলি ক্যাশে করতে বলার প্রয়োজন হবে যাতে সে সেগুলিকে অফলাইনে ব্যবহার করতে পারে। এক্সজিপিএসের সাহায্যে আমি আমার আগ্রহের অঞ্চলে একটি বহুভুজ আঁকতে সক্ষম হয়েছি এবং আমি কী জুম স্তরগুলি ক্যাশে করতে চাই তা নির্দিষ্ট করতে পারি। তারপরে এটি ফোন থেকে আমার কম্পিউটারে বা কোনও প্রোগ্রাম থেকেই আমার ফোনে আমার জন্য এটি ডাউনলোড করা শুরু করবে। তারপরে অ্যাপটিতে একটি বোতাম রয়েছে যা আমি যখন ইন্টারনেট সংযোগটি looseিলে করি তখন আমাকে "অফলাইন" মোডে স্যুইচ করতে দেয়।


2

নেক্সটজিআইএস মোবাইল এসডিকে ব্যবহার করার চেষ্টা করুন। অনলাইন / অফলাইন মোডে সার্ভার (নেক্সটজিআইএস ওয়েব) এর সাথে সম্পাদনা এবং অটোসিঙ্ক অন্তর্ভুক্ত। রাস্টার এবং ভেক্টর স্তরগুলি, কাস্টম ইনপুট ফর্মগুলি, জ্যামিতির সমস্ত ধরণের সমর্থন।

অ্যাপ্লিকেশন নেক্সটজিআইএস মোবাইল গুগল প্লে স্টোরটিতে পাওয়া যাবে - https://play.google.com/store/apps/details?id=com.nextgis.mobile

সূত্রগুলি এখানে: https://github.com/nextgis/android_gisapp

ডকুমেন্টেশন: http://docs.nextgis.com/docs_ngmobile/source/toc.html

আর একটি সহজ অ্যাপ্লিকেশন হ'ল: https://github.com/nextgis/android_muni_gisconf

এসডিকে ডকুমেন্টেশন: http://docs.nextgis.com/ngmobile_dev/toc.html


1

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


1

আমি নুটিটেক থ্রিডি ম্যাপস এসডিকে ঘুরে দেখার পরামর্শ দিচ্ছি যার অফলাইন ক্ষমতা এবং 3 ডি সমর্থনের মতো আকর্ষণীয় অতিরিক্ত রয়েছে। এটি এর পিছনে বিশেষায়িত বিকাশকারী সংস্থা তৈরি করেছে, তাই এটি বাণিজ্যিক বিক্রেতাদের সরবরাহের চেয়ে বাণিজ্যিক সমর্থন এবং আরও নমনীয়তা নিবেদিত করেছে। দাবি অস্বীকার: আমি এর বিকাশকারী।

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