package com.anychart.sample.charts; import android.os.Bundle; import androidx.appcompat.app.AppCompatActivity; import com.anychart.AnyChart; import com.anychart.AnyChartView; import com.anychart.chart.common.dataentry.DataEntry; import com.anychart.charts.Map; import com.anychart.core.map.series.Connector; import com.anychart.core.map.series.Marker; import com.anychart.enums.Anchor; import com.anychart.enums.MarkerType; import com.anychart.enums.SelectionMode; import com.anychart.graphics.vector.SolidFill; import com.anychart.sample.R; import java.util.ArrayList; import java.util.List; public class ConnectorMapActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); setContentView(R.layout.activity_chart_common); AnyChartView anyChartView = findViewById(R.id.any_chart_view); anyChartView.setProgressBar(findViewById(R.id.progress_bar)); Map map = AnyChart.connector(); map.unboundRegions() .enabled(true) .fill(new SolidFill("#E1E1E1", 1)) .stroke("1 #D2D2D2"); map.geoData("anychart.maps.united_kingdom"); map.interactivity().selectionMode(SelectionMode.NONE); map.title().enabled(true); map.title().useHtml(true); map.title().text("Journey Route: the United Kingdom Roundtrip
" + " Example shows sample of usage a multistage connector.
" + " All data are fictitious.
"); Connector connectorSeries = map.connector(getCarData()); connectorSeries.startSize(0) .endSize(0) .stroke("2 #64b5f6") .name("Rent a Car"); connectorSeries.curvature(0); connectorSeries.legendItem("{" + " iconType: 'circle'," + " fill: '#64b5f6'," + " iconStroke: '2 #E1E1E1'" + " }"); connectorSeries.hovered().stroke("1.5 #212121"); connectorSeries.tooltip() .padding(8, 13, 10, 13) .fontSize(12) .fontColor("#fff") .format("{%full}") .titleFormat("{%number}. {%short}") .useHtml(true); connectorSeries = map.connector(getShipData()); connectorSeries.startSize(0) .endSize(0) .stroke("2 #1976d2") .name("Ferry"); connectorSeries.curvature(0); connectorSeries.legendItem("{\n" + " iconType: 'circle',\n" + " fill: '#1976d2',\n" + " iconStroke: '2 #E1E1E1'\n" + " }"); connectorSeries.hovered().stroke("1.5 #212121"); connectorSeries.tooltip() .padding(8, 13, 10, 13) .fontSize(12) .fontColor("#fff") .format("{%full}") .titleFormat("{%number}. {%short}") .useHtml(true); connectorSeries = map.connector(getAirData()); connectorSeries.startSize(0) .endSize(0) .stroke("2 #ef6c00") .name("Airplane"); connectorSeries.curvature(0); connectorSeries.legendItem("{\n" + " iconType: 'circle',\n" + " fill: '#ef6c00',\n" + " iconStroke: '2 #E1E1E1'\n" + " }"); connectorSeries.hovered().stroke("1.5 #212121"); connectorSeries.tooltip() .padding(8, 13, 10, 13) .fontSize(12) .fontColor("#fff") .format("{%full}") .titleFormat("{%number}. {%short}") .useHtml(true); map.legend(true); Marker citiesSeries = map.marker(getCitiesData()); citiesSeries.type(MarkerType.CIRCLE) .size(4) .fill(new SolidFill("#64b5f6", 1)) .stroke("2 #E1E1E1") .tooltip(false); // citiesSeries.hovered() .size(4) .fill(new SolidFill("#64b5f6", 1)) .stroke("2 #E1E1E1"); citiesSeries.labels().enabled(true); citiesSeries.labels().position("center-bottom"); citiesSeries.labels().fontColor("#263238"); citiesSeries.labels() .offsetX(5) .offsetY(0) .anchor(Anchor.LEFT_CENTER) .format("{%name}"); citiesSeries.legendItem().enabled(false); anyChartView.addScript("file:///android_asset/united_kingdom.js"); anyChartView.addScript("file:///android_asset/proj4.js"); anyChartView.setChart(map); } private List getCitiesData() { List data = new ArrayList<>(); data.add(new CitiesDataEntry(51.507315, -0.127901, "London")); data.add(new CitiesDataEntry(50.908579, -1.404370, "Southampton", new LabelDataEntry(10, "#7c868e"))); data.add(new CitiesDataEntry(51.453568, -2.588353, "Bristol")); data.add(new CitiesDataEntry(52.484899, -1.890637, "Birmingham", new LabelDataEntry("right", 10, "#7c868e"))); data.add(new CitiesDataEntry(53.474881, -2.249000, "Manchester", new LabelDataEntry("rightTop", 0, 3))); data.add(new CitiesDataEntry(53.403105, -2.999768, "Liverpool", new LabelDataEntry("right"))); data.add(new CitiesDataEntry(53.812012, -3.053354, "Blackpool", new LabelDataEntry("topRight", 10, "#7c868e", 0, -5))); data.add(new CitiesDataEntry(54.151732, -4.486070, "Douglas", new LabelDataEntry("rightTop", 10, "#7c868e", 0, -3))); data.add(new CitiesDataEntry(54.614223, -5.912609, "Belfast", "#1976d2")); data.add(new CitiesDataEntry(54.994887, -7.309736, "Derry", new LabelDataEntry("right", 10, "#7c868e"), "#ef6c00")); data.add(new CitiesDataEntry(57.475560, -4.224776, "Inverness", "#ef6c00")); data.add(new CitiesDataEntry(57.148309, -2.094987, "Aberdeen", new LabelDataEntry(10, "#7c868e"))); data.add(new CitiesDataEntry(56.460279, -2.965115, "Dundee", new LabelDataEntry(10, "#7c868e"))); data.add(new CitiesDataEntry(56.069916, -3.450884, "Dunfermline", new LabelDataEntry("right", 10, "#7c868e"))); data.add(new CitiesDataEntry(55.946814, -3.184442, "Edinburgh")); data.add(new CitiesDataEntry(54.977230, -1.617702, "Newcastle upon Tyne", new LabelDataEntry(10, "#7c868e"))); data.add(new CitiesDataEntry(53.799611, -1.549131, "Leeds", new LabelDataEntry("leftTop"))); data.add(new CitiesDataEntry(53.234525, -1.421464, "Chesterfield", new LabelDataEntry(10, "#7c868e"))); data.add(new CitiesDataEntry(52.954190, -1.158432, "Nottingham", new LabelDataEntry(10, "#7c868e"))); return data; } private List getAirData() { List data = new ArrayList<>(); data.add(new CustomDataEntry(new Number[]{ 54.614223, -5.912609, 54.994887, -7.309736, 57.475560, -4.224776 }, 5, "Flight from Belfast to Inverness", "There was not any planes from Belfast to Inverness.\\nSo we had to flight through Derry.", 0)); return data; } private List getShipData() { List data = new ArrayList<>(); data.add(new CustomDataEntry(new Number[]{ 53.403105, -2.999768, 53.812012, -3.053354, 54.151732, -4.486070, 54.614223, -5.912609 }, 4, "From Liverpool to Belfast by boat", "To get from Liverpool to Belfast, we got tickets on a cruise ship.\\nThe route of the cruise ship went through Blackpool and Douglas\\nand took 3 days.", 0)); return data; } private List getCarData() { List data = new ArrayList<>(); data.add(new CustomDataEntry(new Number[]{ 51.507315, -0.127901, 50.908579, -1.404370, 51.453568, -2.588353 }, 1, "From London to Bristol", "On our way to Bristol we stopped in Southampton\\nand enjoyed the dinner at restaurant.")); data.add(new CustomDataEntry(new Number[]{ 51.453568, -2.588353, 52.484899, -1.890637, 53.474881, -2.249000 }, 2, "From Bristol to Manchester", "On our way to Manchester we stopped in Birmingham\\nfor one night to have some rest and to walk in Birmingham\\'s\\ncity center.")); data.add(new CustomDataEntry(new Number[]{ 53.474881, -2.249000, 53.403105, -2.999768 }, 3, "From Manchester to Liverpool", "The road to Liverpool took just couple of hours,\\nso we had plenty time to walk around in Liverpool.")); data.add(new CustomDataEntry(new Number[]{ 57.475560, -4.224776, 57.148309, -2.094987, 56.460279, -2.965115, 56.069916, -3.450884, 55.946814, -3.184442 }, 6, "From Inverness to Edinburgh", "That was really nice journey though Scotland.\\nWe stopped a lot and we met a lot of nice people.\\nthe journey took us 3 days.")); data.add(new CustomDataEntry(new Number[]{ 55.946814, -3.184442, 54.977230, -1.617702, 53.799611, -1.549131 }, 7, "From Edinburgh to Leeds", "On our way from Edinburgh to Leeds we stopped only once\\nin beautiful city Newcastle upon Tyne.")); data.add(new CustomDataEntry(new Number[]{ 53.799611, -1.549131, 53.234525, -1.421464, 52.954190, -1.158432, 51.507315, -0.127901 }, 8, "From Leeds back to London", "On our way back to London from Leeds\\nwe made several stops. And we spent a night\\nin Nottingham. This part took us three days.")); return data; } private class CustomDataEntry extends DataEntry { public CustomDataEntry(Number[] points, Integer number, String shortDescription, String fullDescription) { setValue("points", points); setValue("number", number); setValue("short", shortDescription); setValue("full", fullDescription); } public CustomDataEntry(Number[] points, Integer number, String shortDescription, String fullDescription, Integer curvature) { setValue("points", points); setValue("number", number); setValue("short", shortDescription); setValue("full", fullDescription); setValue("curvature", curvature); } } private class CitiesDataEntry extends DataEntry { public CitiesDataEntry(Number latitude, Number longitude, String name) { setValue("lat", latitude); setValue("long", longitude); setValue("name", name); } public CitiesDataEntry(Number latitude, Number longitude, String name, String fill) { setValue("lat", latitude); setValue("long", longitude); setValue("name", name); setValue("fill", fill); } public CitiesDataEntry(Number latitude, Number longitude, String name, LabelDataEntry label) { setValue("lat", latitude); setValue("long", longitude); setValue("name", name); setValue("label", label); } public CitiesDataEntry(Number latitude, Number longitude, String name, LabelDataEntry label, String fill) { setValue("lat", latitude); setValue("long", longitude); setValue("name", name); setValue("label", label); setValue("fill", fill); } } private class LabelDataEntry extends DataEntry { public LabelDataEntry(Integer fontSize, String fontColor) { setValue("fontSize", fontSize); setValue("fontColor", fontColor); } public LabelDataEntry(String anchor, Integer fontSize, String fontColor) { setValue("anchor", anchor); setValue("fontSize", fontSize); setValue("fontColor", fontColor); } public LabelDataEntry(String anchor, Integer offsetX, Integer offsetY) { setValue("right", anchor); setValue("offsetX", offsetX); setValue("offsetY", offsetY); } public LabelDataEntry(String anchor) { setValue("anchor", anchor); } public LabelDataEntry(String anchor, Integer fontSize, String fontColor, Integer offsetX, Integer offsetY) { setValue("anchor", anchor); setValue("fontSize", fontSize); setValue("fontColor", fontColor); setValue("offsetX", offsetX); setValue("offsetY", offsetY); } } }