×
Namespaces

Variants
Actions

Formas de desenhar com API maps do Windows Phone

From Nokia Developer Wiki
Jump to: navigation, search
SignpostIcon HereMaps 99.png
WP Metro Icon WP8.png
Article Metadata

Compatibilidade
Plataforma(s):
Windows Phone 8

Artigo
Tradução:
Por FINALX
Última alteração feita por hamishwillee em 01 Nov 2013

O exemplo completo para este código pode ser encontrado em Windows Phone 8 Maps Examples project, o código utilizado aqui foi implementado como exemplo dentro do projeto MoreMapContent. Geralmente pode-se adicionar poli linhas, polígonos e objetos MapOverlay no mapa, e não há formas pré-definidas que podem ser desenhados no mapa.

Com MapOverlay em teoria, você pode adicionar quaisquer tipos de objetos drawable como conteúdo, assim pode-se adicionar retângulo ou quaisquer outros objetos pré-definidos no mapa. O código poderia ficar parecido com este do exemplo:

MapLayer Rectangle1 = new MapLayer();
Rectangle rectanggle = new Rectangle();
rectanggle.Fill = new SolidColorBrush(Colors.Green);
rectanggle.Stroke = new SolidColorBrush(Colors.Blue);
rectanggle.StrokeThickness = 4;
rectanggle.Width = 200;
rectanggle.Height = 200;
MapOverlay pin1 = new MapOverlay();
pin1.GeoCoordinate = new GeoCoordinate(60.22, 24.81);
pin1.Content = rectanggle;
Rectangle1.Add(pin1);
map1.Layers.Add(Rectangle1);

O problema com este tipo de abordagem é que os objetos do MapOverlay são dimensionados com tamanho do pixel, e eles não são redimensionados com zoom no mapa (a menos que haja alguma lógica personalizada implementada para fazer isso)

Assim, se você precisa adicionar a forma a uma área geográfica, e deve ser instalado automaticamente com todos os níveis de zoom, você deve usar poli linhas e polígonos, e apenas na forma da área com GeoCoordinates.

O Windows Phone 8 Maps Examples project e o exemplo MoreMapContent implementa códigos simples para gerar GeoCoordinateCollection, que poderia ser utilizado poli linhas e polígono como variáveis ​​de caminho.

O retângulo é construído a partir de dois pontos de dados e o círculo é construído com os valores de centro e raio dados.

O código para o retângulo simplesmente retorna quatro pontos de cantos para o qual a poli linha ou polígono poderiam ser atraídos com:

public static GeoCoordinateCollection CreateRectangle(GeoCoordinate topLeft, GeoCoordinate bottomRight)
{
var locations = new GeoCoordinateCollection();
locations.Add(new GeoCoordinate(topLeft.Latitude, topLeft.Longitude));
locations.Add(new GeoCoordinate(topLeft.Latitude, bottomRight.Longitude));
locations.Add(new GeoCoordinate(bottomRight.Latitude, bottomRight.Longitude));
locations.Add(new GeoCoordinate(bottomRight.Latitude, topLeft.Longitude));
return locations;
}

E o código do círculo para retornar os pontos do para a criação do círculo de 360 graus:

public static GeoCoordinateCollection CreateCircle(GeoCoordinate center, double radius)
{
var earthRadius = 6367.0; // radius in kilometers
var lat = ToRadian(center.Latitude); //radians
var lng = ToRadian(center.Longitude); //radians
var d = radius / earthRadius; // d = angular distance covered on earth's surface
var locations = new GeoCoordinateCollection();
 
for (var x = 0; x <= 360; x++)
{
var brng = ToRadian(x);
var latRadians = Math.Asin(Math.Sin(lat) * Math.Cos(d) + Math.Cos(lat) * Math.Sin(d) * Math.Cos(brng));
var lngRadians = lng + Math.Atan2(Math.Sin(brng) * Math.Sin(d) * Math.Cos(lat), Math.Cos(d) - Math.Sin(lat) * Math.Sin(latRadians));
locations.Add(new GeoCoordinate(ToDegrees(latRadians), ToDegrees(lngRadians)));
}
 
return locations;
}
This page was last modified on 1 November 2013, at 08:46.
53 page views in the last 30 days.
×