Giter Club home page Giter Club logo

Comments (11)

mbcoder avatar mbcoder commented on May 31, 2024

@aminabvaal have you seen the section above in the document titled: Identify a map area to download

So have you already for a webmap set up with a pre-planned area?

To ensure I'm pointing you in the right direction it would be good to understand what you are trying to do.

If your data is stored in ArcGIS Online then have you decided to use pre-planned areas or on demand workflows?

If your data exists in files such as shapefile or geopackage then you should follow a different approach.

There are easy solutions but it would help if you clearly explained what you are trying to do:

  • Where is your data stored?
  • What does your application need to do? I've established it needs to work offline.
  • Do you need to update the data whilst offline and then sync it back?

It may help of you contact your local ESRI office, if you are totally stuck.

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

@mbcoder idon't need your above comment ..i just need a few code line or link to download .mmpk file for load all map of world

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

just like
\arcgis-runtime-samples-java\samples-data\mmpk\SanFrancisco.mmpk
i need all mmpk file for all world how to show all world in app when app is offline

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

i read this doc::

A mobile map package is a file object (.mmpk) created in ArcGIS Pro. It is a transport mechanism for maps, their layers, data, networks, and locators. A mobile map package can be sideloaded onto a device by email, or by platform-specific transfer mechanism, or it can be downloaded from a portal to the device.

how can i be download this mmpk file from a portal to my device

from arcgis-maps-sdk-java-samples.

mbcoder avatar mbcoder commented on May 31, 2024

mmpk files can be generated from 2 locations:

  • A you've pointed out above, you can use the ArcGIS Pro application to generate one for you.
  • Alternatively you can also publish your data in ArcGIS Online and download from a server

In the second approach (ArcGIS Online), your data will be in what is called a web map. You can extract this into an mmpk via the on-demand method (this sounds like what you should do), or pre-planned (which is well suited if you regularly want to download the same areas). The pre-planned areas need to be configured in ArcGIS Online.

In the on-demand method, you just get the SDK to ask for the offline map which once generated will be downloade as an mmpk.

The section titled "On-demand workflow" in this page (scroll down lots) explains how to download an mmpk: https://developers.arcgis.com/java/latest/guide/create-an-offline-map.htm

You mention that you are working with data for the entire world. Take great care that you don't ask the server to generate a mmpk with a basemap for all levels of detail. This will result in a massive dataset. Limit the levels of detail for your download in the basemap. I would also encourage you to set up your webmap so that it uses a vector basemap. Vector basemaps are much smaller when downloaded onto a device when you are working with a large area.

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

it looks you put me in infinite loop ...
https://developers.arcgis.com/java/latest/guide/create-an-offline-map.htm
my first message is about this page ...
in this line:
`
// create an offline map task OfflineMapTask offlineMapTask = new OfflineMapTask(map);

// create the job DownloadPreplannedOfflineMapJob downloadJob = inofflineMapTask.downloadPreplannedOfflineMap(mapArea, downloadPath)`

what is mapArea object and how to be initialized
how to specify an particular area such as a continent or country
in App I need all over the world how to specify thismapArea Object ??
thanks

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

@mbcoder

you put me in infinite loop ::
my first above msg is about this page you told recently
https://developers.arcgis.com/java/latest/guide/create-an-offline-map.htm

i read this doc
https://developers.arcgis.com/android/latest/guide/create-an-offline-map.htm
and i reach this lines ::
// create an offline map task OfflineMapTask offlineMapTask = new OfflineMapTask(map); // create the job DownloadPreplannedOfflineMapJob downloadJob = offlineMapTask.downloadPreplannedOfflineMap(mapArea, downloadPath);

in offlineMapTask.downloadPreplannedOfflineMap(mapArea, downloadPath)
what is mapArea object and how to be initialized
how to specify an particular area such as a continent or country
in App I need all over the world how to specify this mapArea Object ??

please put an code example of this mapArea initialized

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

i want just a code exapme that implement downloading map area and use it in offline mode

from arcgis-maps-sdk-java-samples.

aminabvaal avatar aminabvaal commented on May 31, 2024

Take great care that you don't ask the server to generate a mmpk with a basemap for all levels of detail.

which server ...which server you are talking about

just change your talking to clarified code to use that
i just want handle this issue not learn more

from arcgis-maps-sdk-java-samples.

tschie avatar tschie commented on May 31, 2024

@aminabvaal
Create a free account at https://www.arcgis.com/home/createaccount.html. You must do this to take maps offline.

Then use this code to download a map area for offline use. Change the file path to the directory you want to download to. Also play with the minScale and maxScale.

package com.esri.samples.map.generate_offline_map;

import javafx.application.Application;
import javafx.application.Platform;
import javafx.geometry.Point2D;
import javafx.geometry.Pos;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.control.Button;
import javafx.scene.control.ProgressBar;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import com.esri.arcgisruntime.concurrent.Job;
import com.esri.arcgisruntime.geometry.Envelope;
import com.esri.arcgisruntime.geometry.Point;
import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.ArcGISMap;
import com.esri.arcgisruntime.mapping.view.Graphic;
import com.esri.arcgisruntime.mapping.view.GraphicsOverlay;
import com.esri.arcgisruntime.mapping.view.MapView;
import com.esri.arcgisruntime.portal.Portal;
import com.esri.arcgisruntime.portal.PortalItem;
import com.esri.arcgisruntime.security.AuthenticationManager;
import com.esri.arcgisruntime.security.DefaultAuthenticationChallengeHandler;
import com.esri.arcgisruntime.symbology.SimpleLineSymbol;
import com.esri.arcgisruntime.tasks.offlinemap.GenerateOfflineMapJob;
import com.esri.arcgisruntime.tasks.offlinemap.GenerateOfflineMapParameters;
import com.esri.arcgisruntime.tasks.offlinemap.GenerateOfflineMapResult;
import com.esri.arcgisruntime.tasks.offlinemap.OfflineMapTask;

public class GenerateOfflineMapSample extends Application {

  private MapView mapView;

  @Override
  public void start(Stage stage) {

    try {
      // create stack pane and application scene
      StackPane stackPane = new StackPane();
      Scene scene = new Scene(stackPane);

      // set title, size, and add scene to stage
      stage.setTitle("Generate Offline Map Sample");
      stage.setWidth(800);
      stage.setHeight(700);
      stage.setScene(scene);
      stage.show();

      // create a button to take the map offline
      Button offlineMapButton = new Button("Take Map Offline");
      offlineMapButton.setDisable(true);

      // handle authentication with the portal
      AuthenticationManager.setAuthenticationChallengeHandler(new DefaultAuthenticationChallengeHandler());

      // create a portal item with the itemId of the web map
      Portal portal = new Portal("https://www.arcgis.com", true);
      PortalItem portalItem = new PortalItem(portal, "86265e5a4bbb4187a59719cf134e0018");

      // create a map with the portal item
      ArcGISMap map = new ArcGISMap(portalItem);
      map.addDoneLoadingListener(() -> {
        // enable the button when the map is loaded
        if (map.getLoadStatus() == LoadStatus.LOADED) {
          offlineMapButton.setDisable(false);
        }
      });

      // set the map to the map view
      mapView = new MapView();
      mapView.setMap(map);

      // create a graphics overlay for the map view
      GraphicsOverlay graphicsOverlay = new GraphicsOverlay();
      mapView.getGraphicsOverlays().add(graphicsOverlay);

      // create a graphic to show a box around the extent we want to download
      Graphic downloadArea = new Graphic();
      graphicsOverlay.getGraphics().add(downloadArea);
      SimpleLineSymbol simpleLineSymbol = new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, 0xFFFF0000, 2);
      downloadArea.setSymbol(simpleLineSymbol);

      // update the box whenever the viewpoint changes
      mapView.addViewpointChangedListener(viewpointChangedEvent -> {
        if (map.getLoadStatus() == LoadStatus.LOADED) {
          // upper left corner of the area to take offline
          Point2D minScreenPoint = new Point2D(50, 50);
          // lower right corner of the downloaded area
          Point2D maxScreenPoint = new Point2D(mapView.getWidth() - 50, mapView.getHeight() - 50);
          // convert screen points to map points
          Point minPoint = mapView.screenToLocation(minScreenPoint);
          Point maxPoint = mapView.screenToLocation(maxScreenPoint);
          // use the points to define and return an envelope
          if (minPoint != null && maxPoint != null) {
            Envelope envelope = new Envelope(minPoint, maxPoint);
            downloadArea.setGeometry(envelope);
          }
        }
      });

      // create progress bar to show download progress
      ProgressBar progressBar = new ProgressBar();
      progressBar.setProgress(0.0);
      progressBar.setVisible(false);

      // when the button is clicked, start the offline map task job
      offlineMapButton.setOnAction(e -> {
          // show the progress bar
          progressBar.setVisible(true);

          GenerateOfflineMapParameters params = new GenerateOfflineMapParameters(downloadArea.getGeometry(),
              mapView.getMapScale() + 10000, mapView.getMapScale());

          // create an offline map task with the map
          OfflineMapTask task = new OfflineMapTask(map);

          // create an offline map job with the download directory path and parameters and start the job
          GenerateOfflineMapJob job = task.generateOfflineMap(params, "C:/Users/tyle8552/Desktop/mmpk");
          job.start();
          job.addJobDoneListener(() -> {
            if (job.getStatus() == Job.Status.SUCCEEDED) {
              // replace the current map with the result offline map when the job finishes
              GenerateOfflineMapResult result = job.getResult();
              mapView.setMap(result.getOfflineMap());
              graphicsOverlay.getGraphics().clear();
              offlineMapButton.setDisable(true);
            } else {
              new Alert(Alert.AlertType.ERROR, job.getError().getAdditionalMessage()).show();
            }
            Platform.runLater(() -> progressBar.setVisible(false));
          });
          // show the job's progress with the progress bar
          job.addProgressChangedListener(() -> progressBar.setProgress(job.getProgress() / 100.0));
      });

      // add the map view, button, and progress bar to stack pane
      stackPane.getChildren().addAll(mapView, offlineMapButton, progressBar);
      StackPane.setAlignment(offlineMapButton, Pos.TOP_LEFT);
      StackPane.setAlignment(progressBar, Pos.TOP_RIGHT);
    } catch (Exception e) {
      // on any error, display the stack trace.
      e.printStackTrace();
    }
  }

  /**
   * Stops and releases all resources used in application.
   */
  @Override
  public void stop() {

    if (mapView != null) {
      mapView.dispose();
    }
  }

  /**
   * Opens and runs application.
   *
   * @param args arguments passed to this application
   */
  public static void main(String[] args) {

    Application.launch(args);
  }

}

Now that you have an offline map saved to your computer, you can use this app to read it back in for displaying offline:

package com.esri.samples.map.open_mobile_map_package;

import javafx.application.Application;
import javafx.scene.Scene;
import javafx.scene.control.Alert;
import javafx.scene.layout.StackPane;
import javafx.stage.Stage;

import com.esri.arcgisruntime.loadable.LoadStatus;
import com.esri.arcgisruntime.mapping.MobileMapPackage;
import com.esri.arcgisruntime.mapping.view.MapView;

public class OpenMobileMapPackageSample extends Application {

  private MapView mapView;

  @Override
  public void start(Stage stage) {

    try {
      // create stack pane and application scene
      StackPane stackPane = new StackPane();
      Scene scene = new Scene(stackPane);

      // set title, size, and add scene to stage
      stage.setTitle("Open Mobile Map Package Sample");
      stage.setWidth(800);
      stage.setHeight(700);
      stage.setScene(scene);
      stage.show();

      // create a map view
      mapView = new MapView();

      //load a mobile map package
      MobileMapPackage mobileMapPackage = new MobileMapPackage("C:/Users/tyle8552/Desktop/mmpk");

      mobileMapPackage.loadAsync();
      mobileMapPackage.addDoneLoadingListener(() -> {
        if (mobileMapPackage.getLoadStatus() == LoadStatus.LOADED && mobileMapPackage.getMaps().size() > 0) {
          //add the map from the mobile map package to the map view
          mapView.setMap(mobileMapPackage.getMaps().get(0));
        } else {
          Alert alert = new Alert(Alert.AlertType.ERROR, "Failed to load the mobile map package");
          alert.show();
        }
      });

      // add the map view to stack pane
      stackPane.getChildren().add(mapView);
    } catch (Exception e) {
      // on any error, display the stack trace.
      e.printStackTrace();
    }
  }

  /**
   * Stops and releases all resources used in application.
   */
  @Override
  public void stop() {

    if (mapView != null) {
      mapView.dispose();
    }
  }

  /**
   * Opens and runs application.
   *
   * @param args arguments passed to this application
   */
  public static void main(String[] args) {

    Application.launch(args);
  }

}

Hope that helps.

from arcgis-maps-sdk-java-samples.

tschie avatar tschie commented on May 31, 2024

Closing due to inactivity.

from arcgis-maps-sdk-java-samples.

Related Issues (20)

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.