Drawing with Polylines and Polygons

Note

Bing Maps SDK for Android and iOS retirement

Bing Maps SDK for Android and iOS is deprecated and will be retired. Free (Basic) account customers can continue to use Bing Maps SDK for Android and iOS until June 30th, 2025. Enterprise account customers can continue to use Bing Maps SDK for Android and iOS until June 30th, 2028. To avoid service disruptions, all implementations using Bing Maps SDK for Android and iOS will need to be updated to use Azure Maps Web SDK by the retirement date that applies to your Bing Maps for Enterprise account type.

Azure Maps is Microsoft's next-generation maps and geospatial services for developers. Azure Maps has many of the same features as Bing Maps for Enterprise, and more. To get started with Azure Maps, create a free Azure subscription and an Azure Maps account. For more information about azure Maps, see Azure Maps Documentation. For migration guidance, see Bing Maps Migration Overview.

Frequently, you want to add a simple annotation to the map, which MapIcons are well suited for. Sometimes you will want to highlight a geographic region, or draw additional paths between points on the map. To do this, you will want to use MapPolygon and MapPolyline classes, respectively.

Examples

Adding a line

Display a line by using the MapPolyline. The following example shows how to add a dashed black line on a map.

Java

void drawLineOnMap() {
    Geoposition center = mapView.getCenter().getPosition();

    ArrayList<Geoposition> geopoints = new ArrayList<Geoposition>();
    geopoints.add(new Geoposition(center.getLatitude() - 0.0005, center.getLongitude() - 0.001));
    geopoints.add(new Geoposition(center.getLatitude() + 0.0005, center.getLongitude() + 0.001));

    MapPolyline mapPolyline = new MapPolyline();
    mapPolyline.setPath(new Geopath(geopoints));
    mapPolyline.setStrokeColor(Color.BLACK);
    mapPolyline.setStrokeWidth(3);
    mapPolyline.setStrokeDashed(true);

    // Add Polyline to a layer on the map control.
    MapElementLayer linesLayer = new MapElementLayer();
    linesLayer.setZIndex(1.0f);
    linesLayer.getElements().add(mapPolyline);
    mapView.getLayers().add(linesLayer);
}

Swift

func drawLineOnMap() {
    let center = self.mapView.mapCenter.position

    let geopath = MSGeopath(positions:
        [MSGeoposition(latitude: center.latitude-0.0005, longitude: center.longitude-0.001),
         MSGeoposition(latitude: center.latitude+0.0005, longitude: center.longitude+0.001)])

    let mapPolyline = MSMapPolyline()
    mapPolyline.path = geopath
    mapPolyline.strokeColor = UIColor.black
    mapPolyline.strokeWidth = 3
    mapPolyline.strokeDashed = true

    // Add Polyline to a layer on the map control.
    let linesLayer = MSMapElementLayer()
    linesLayer.zIndex = 1
    linesLayer.elements.add(mapPolyline)
    mapView.layers.add(linesLayer);
}

Objective-C

- (void) drawLineOnMap
{
    MSGeoposition *center = self.mapView.mapCenter.position;

    NSMutableArray<MSGeoposition*>* positions;
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude-0.0005 longitude: center.longitude-0.001]];
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude+0.0005 longitude: center.longitude+0.001]];
    MSGeopath *geopath = [MSGeopath geopathWithPositions:positions];

    MSMapPolyline* mapPolyline = [MSMapPolyline polyline];
    mapPolyline.path = geopath;
    mapPolyline.strokeColor = [UIColor blackColor];
    mapPolyline.strokeWidth = 3;
    mapPolyline.strokeDashed = YES;

    // Add Polyline to a layer on the map control.
    MSMapElementLayer* linesLayer = [MSMapElementLayer layer];
    linesLayer.zIndex = 1;
    [[linesLayer elements] addMapElement:mapPolyline];
    [[self.mapView layers] addMapLayer: linesLayer];
}

Adding a shape

Display a multi-point shape on a map by using the MapPolygon. The following exampe shows how to add a red box with blue outline on a map.

Java

void highlightArea() {
    Geoposition center = mapView.getCenter().getPosition();

    ArrayList<Geoposition> geopoints = new ArrayList<Geoposition>();
    geopoints.add(new Geoposition(center.getLatitude() + 0.0005, center.getLongitude() - 0.001));
    geopoints.add(new Geoposition(center.getLatitude() - 0.0005, center.getLongitude() - 0.001));
    geopoints.add(new Geoposition(center.getLatitude() - 0.0005, center.getLongitude() + 0.001));

    MapPolygon mapPolygon = new MapPolygon();
    mapPolygon.setPaths(Arrays.asList(new Geopath(geopoints)));
    mapPolygon.setFillColor(Color.RED);
    mapPolygon.setStrokeColor(Color.BLUE);
    mapPolygon.setStrokeWidth(3);
    mapPolygon.setStrokeDashed(false);

    MapElementLayer highlightsLayer = new MapElementLayer();
    highlightsLayer.setZIndex(1.0f);
    highlightsLayer.getElements().add(mapPolygon);
    mapView.getLayers().add(highlightsLayer);
}

Swift

func highlightArea() {
    let center = self.mapView.mapCenter.position

    let geopath = MSGeopath(positions:
        [MSGeoposition(latitude: center.latitude+0.0005, longitude: center.longitude-0.001),
         MSGeoposition(latitude: center.latitude-0.0005, longitude: center.longitude-0.001),
         MSGeoposition(latitude: center.latitude-0.0005, longitude: center.longitude+0.001)])

    let mapPolygon = MSMapPolygon()
    mapPolygon.paths = [geopath]
    mapPolygon.zIndex = 1
    mapPolygon.fillColor = UIColor.red
    mapPolygon.strokeColor = UIColor.blue
    mapPolygon.strokeWidth = 3
    mapPolygon.strokeDashed = false

    let highlightsLayer = MSMapElementLayer()
    highlightsLayer.zIndex = 1
    highlightsLayer.elements.add(mapPolygon)
    mapView.layers.add(highlightsLayer)
}

Objective-C

- (void) highlightArea
{
    MSGeoposition *center = self.mapView.mapCenter.position;

    NSMutableArray<MSGeoposition*>* positions;
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude+0.0005 longitude: center.longitude-0.001]];
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude-0.0005 longitude: center.longitude-0.001]];
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude-0.0005 longitude: center.longitude+0.001]];
    [positions addObject:[MSGeoposition geopositionWithLatitude: center.latitude+0.0005 longitude: center.longitude+0.001]];
    MSGeopath *geopath = [MSGeopath geopathWithPositions:positions];

    MSMapPolygon* mapPolygon = [MSMapPolygon polygon];
    mapPolygon.paths = [NSArray arrayWithObject:geopath];
    mapPolygon.zIndex = 1;
    mapPolygon.fillColor = [UIColor redColor];
    mapPolygon.strokeColor = [UIColor blueColor];
    mapPolygon.strokeWidth = 3;
    mapPolygon.strokeDashed = NO;

    MSMapElementLayer* highlightsLayer = [MSMapElementLayer layer];
    highlightsLayer.zIndex = 1;
    [[highlightsLayer elements] addMapElement:mapPolygon];
    [[self.mapView layers] addMapLayer: highlightsLayer];
}

See also Map Polylines and Polygons