Post on 06-Jul-2022
QuartzArcGIS Runtime SDK for Android
Quartz (beta)
• Ce ofera?
• Utilizarea OpenGL
• controale si functionalitati de performanta inalta;
• utilizarea de Vector Tile Package
• utilizarea Map Package;
• biblioteci de simbolizare imbunatatite
• Simboluri militare
• PictureMarkerSymbol imbunatatit
• Editarea offline, geocodare, rutar
IDE pentru Android
Automation Builder
Inte
gra
ted
de
ve
lop
me
nt
En
vir
on
me
nt
An
dro
id S
tud
io
Runtime IDE
• Android Studio
Automation Builder
• Gradle: compilator, packaging binary code,automated tests, cross platform
Runtime
• ArcGIS Runtime Quartz (beta): GIS Functionality
• ArcGIS Runtime SDK for Android: GIS Functionality
Programming Language
• JavaP
rog
ram
min
gla
ng
ua
ge
IDE pentru .NET In
teg
rate
dd
eve
lop
me
nt
En
vir
on
me
nt
Vis
ua
l S
tud
io
RuntimeIDE
• Visual Studio
Runtime
• ArcGIS Runtime Quartz (beta): GIS Functionality
• ArcGIS Runtime SDK for .NET: GIS Functionality
Programming Language
• C#, VB.NET, C++
Pro
gra
mm
ing
lan
gu
ag
es
Creare proiect in trei pasi
Runtime
Privilegii
MapView
Adaugare
aunuiM
apV
iew
Alocarea de privilegiile aplicatiei
asupra echpamentului
Accesarea Runtime-ului
Custom
App.
1
2
3
Pasul 1
Runtime
Privilegii
MapViewCustom
App.
1
2
3
Adaugarea Runtime in proiect
• Se foloseste Gradle Automation Builder:
• Runtime-ul va fi inglobat in proiect, in mod automat, de catre Gradle
maven {
url 'https://esri.bintray.com/arcgis'
}
dependencies {
compile 'com.esri.arcgisruntime:arcgis-android:100.0.0-beta-3'
}
Pasul 2
Runtime
Privilegii
MapViewCustom
App.
1
2
3
permissions-separated operating system
Privilegiile aplicatiei asupra echipamentului
• Privilegiile sunt date in proiectul Android Studio
- Acces la internet:
- Utilizarea OpenGL (versiunea 2.x)
<uses-feature android:glEsVersion="0x00020000"
android:required="true" />
<uses-permission android:name="android.permission.INTERNET"
/>
Permisiuni
• Acces la Internet (cele mai multe dintre aplicatiile mobile)
• Acces la fisierele de pe disk (unele aplicatii)
• Acces la GPS pentru aplicatiile de localizare a dispozitivului
mobile
• Aplicatiile desvoltate cu ArcGIS Runtime necesita utilizarea
OpenGL 2.x
Pasul 3
Runtime
Privilegii
MapViewCustom
App.
1
2
3
Adaugarea unui MapView
• Adaugarea unui MapView in proiectul Android Studio:
• Initializare continut MapView (basemap)
<com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</com.esri.arcgisruntime.mapping.view.MapView>
mMapView = (MapView) findViewById(R.id.mapView);
map = new ArcGISMap(Basemap.Type.IMAGERY, 44.436840, 26.097748,14);
mMapView.setMap(map);
Ce aduce nou?Quartz
Quartz (beta)
• ArcGIS Runtime SDK Quartz (beta) :
• controale si functionalitati de performanta
inalta;
• utilizarea de Vector Tile Package
• utilizarea Vector Tile Package;
• biblioteci de simbolizare imbunatatite
• Simboluri militare
• PictureMarkerSymbol imbunatatit
•Clasa ArcGISFeatureTable optimizata (esteredusa latenta si este imbunatatita afisarea);
•MapView dispune de metode noi
• Ex. setViewPoint, ListenableFuture
•Clasa GeometryEngine cu metode:
• geodesicDistance()
• geodesicMove()
• Clip()
Runtime SDK for Java vs Runtime SDK Quartz
Adaugare Runtime
Adaugare harta
Permisiuni
Adaugare Runtime
Adaugare harta
Permisiuni
<com.esri.arcgisruntime.mapping.view.MapView
android:id="@+id/mapView"
android:layout_width="fill_parent"
android:layout_height="fill_parent" >
</com.esri.arcgisruntime.mapping.view.MapView>
<com.esri.android.map.MapView
android:id="@+id/map"
android:layout_width="fill_parent"
android:layout_height="fill_parent"
mapoptions.MapType="Streets"
mapoptions.center="44.436840, 26.097748"
mapoptions.ZoomLevel="17">
</com.esri.android.map.MapView>
compile 'com.esri.arcgis.android:arcgis-
android:10.2.8-1'compile 'com.esri.arcgisruntime:arcgis-
android:100.0.0-beta-3'
Runtime SDK for Java Quartz
<uses-feature
android:glEsVersion="0x00020000"
android:required="true" />
Quartz for AndroidDemo
Quartz / Layere Operationale
• Adaugarea unui layer operational in map
mServiceFeatureTable = new ServiceFeatureTable(getResources().getString(R.string.urlFeatureLayer));
mFeaturelayer = new FeatureLayer(mServiceFeatureTable);
map.getOperationalLayers().add(mFeaturelayer);
1
Quartz / Identify
• Eveniment onTouch de pe MapView
• Metoda Identify de pe MapView
• Selectare in harta
mMapView.setOnTouchListener(new DefaultMapViewOnTouchListener(this, mMapView) {
@Override
public boolean onSingleTapConfirmed(MotionEvent e) {
Log.d("DEMO", "Atingere harta");
return super.onSingleTapConfirmed(e);
}
});
mClickPoint = new android.graphics.Point((int) e.getX(), (int) e.getY());
final ListenableFuture<IdentifyLayerResult> future = mMapView.identifyLayerAsync(mFeaturelayer,
mClickPoint, 5, 1);
future.addDoneListener(new Runnable() {
@Override
public void run() { Log.d("DEMO", "Eveniment Identify");}
});
if (resultGeoElements.get(0) instanceof ArcGISFeature) {
mSelectedArcGISFeature = (ArcGISFeature) resultGeoElements.get(0);
mFeaturelayer.selectFeature(mSelectedArcGISFeature);
}
2
3
4
Quartz / cautarea
• Interogarea FeatureTable
• Rezultat/Selectare
QueryParameters query = new QueryParameters();
//criteriu de interogare
query.setWhereClause("upper(nume) LIKE '%" + txt.toUpperCase() + "%'");
// apel pe serviciu creaza o lista
final ListenableFuture<FeatureQueryResult> future = mServiceFeatureTable.queryFeaturesAsync(query);
// listener - este declansat atunci cand clientul primeste rezultatul
future.addDoneListener(new Runnable() {
@Override
public void run() {
}
});
5
Feature feature = result.iterator().next();
// obtinem extentul
Envelope envelope = feature.getGeometry().getExtent();
mMapView.setViewpointGeometryWithPaddingAsync(envelope, 200);
//selectam elementul
mFeaturelayer.selectFeature(feature);
6
Quartz / Clasificarea datelor
• Stabilirea campului (campurilor) de simbolizare
• Crearea simbolurilor
• Crearea claselor de simbolizare
• Randarea
SimpleFillSymbol defaultFillSymbol = new SimpleFillSymbol(
SimpleFillSymbol.Style.NULL,
Color.BLACK,
new SimpleLineSymbol(SimpleLineSymbol.Style.SOLID, Color.GRAY, 2));
List clasa1 = new ArrayList();
clasa1.add("CASA");
uniqueValueRenderer.getUniqueValues().add(new UniqueValueRenderer.UniqueValue(null, null,
simbolClasa1, clasa1));
8
mFeaturelayer.setRenderer(uniqueValueRenderer);
9
UniqueValueRenderer uniqueValueRenderer = new UniqueValueRenderer();
uniqueValueRenderer.getFieldNames().add("categorie");
7
1 0
Quartz for .NETDemo
.NET / Layere Operationale
• Adaugarea unui layer operational in map
Uri serviceUri = new Uri("http://...");featureLayer; FeatureLayer featureLayer = new FeatureLayer(serviceUri);myMap.OperationalLayers.Add(featureLayer);
1
.NET / Clasificarea datelor
• Stabilirea campului (campurilor) de simbolizare
• Crearea simbolurilor
• Crearea claselor de simbolizare
• Randarea
UniqueValueRenderer featureRenderer= new UniqueValueRenderer();featureRenderer.FieldNames.Add("categorie");
7
var defaultFillSymbol = new SimpleFillSymbol(SimpleFillSymbolStyle.Null, Colors.Gray, null);featureRenderer.DefaultSymbol = defaultFillSymbol;featureRenderer.DefaultLabel = "Altele";
8
featureRenderer.UniqueValues.Add(new UniqueValue("CASA", "CASA", simbolClasa1, "CASA"));featureRenderer.UniqueValues.Add(new UniqueValue("DEPOZIT", "DEPOZIT", simbolClasa2, "DEPOZIT"));
9
featureLayer.Renderer = featureRenderer;
1 0
Va multumim