Namespaces

Variants
Actions

Please note that as of October 24, 2014, the Nokia Developer Wiki will no longer be accepting user contributions, including new entries, edits and comments, as we begin transitioning to our new home, in the Windows Phone Development Wiki. We plan to move over the majority of the existing entries over the next few weeks. Thanks for all your past and future contributions.

Formas de desenhar com API maps do Windows Phone

From 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 05:46.
153 page views in the last 30 days.

Was this page helpful?

Your feedback about this content is important. Let us know what you think.

 

Thank you!

We appreciate your feedback.

×