缩小时位置点会发生变化
本文关键字:变化 小时 位置 缩小 | 更新日期: 2023-09-27 18:30:17
我正在开发一个Windows Phone应用程序,必须标记当前位置和目标位置。但问题是当应用程序正常显示点时,它显示正确的点,但在缩小时,点的位置不断变化。下面是代码
public partial class Findcar : PhoneApplicationPage
{
//private static string baseUri = "bingmaps:?";
DbHelper Db_helper = new DbHelper();
int ids = 0;
historyTableSQlite lists = new historyTableSQlite();
//historyTableSQlite list2 = new historyTableSQlite();
public static double lt {get; set;}
public static double lg { get; set; }
public static double lt2 { get; set; }
public static double lg2 { get; set; }
//String fl = Checkin.Floor_st;
//String zo = Checkin.Zone_st;
GeoCoordinate currentLocation = null;
UCCustomToolTip _tooltip = new UCCustomToolTip();
Geolocator myGeolocator = new Geolocator();
public Findcar()
{
InitializeComponent();
GetLocation();
}
protected override void OnNavigatedTo(NavigationEventArgs e)
{
lists = Db_helper.Readlats(lists.Id);
//list2 = Db_helper.ReadContact(History.Selected_HistoryId);
lt = lists.latitude;
lg = lists.longtitude;
if (lt2 != 0.0D && lg2 != 0.0D)
{
lt = lt2;
lg = lg2;
}
// Selected_HistoryId = int.Parse(NavigationContext.QueryString["SelectedHistoryID"]);
}
private async void GetLocation()
{
// Get current location.
Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync(maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10));
Geocoordinate myGeocoordinate = myGeoposition.Coordinate;
currentLocation = CoordinateConverter.ConvertGeocoordinate(myGeocoordinate);
MapDisplay(currentLocation);
}
private void MapDisplay(GeoCoordinate LocationsData)
{
ReverseGeocodeQuery Query = new ReverseGeocodeQuery()
{
GeoCoordinate = new GeoCoordinate(LocationsData.Latitude, LocationsData.Longitude)
};
Query.QueryCompleted += Query_QueryCompleted;
Query.QueryAsync();
MapOverlay mylocationOverlay = new MapOverlay();
mylocationOverlay.Content = _tooltip;
mylocationOverlay.GeoCoordinate = LocationsData;
MapLayer myLocationLayer = new MapLayer();
myLocationLayer.Add(mylocationOverlay);
mymap.Layers.Add(myLocationLayer);
mymap.Center = LocationsData;
}
void Query_QueryCompleted(object sender, QueryCompletedEventArgs<IList<MapLocation>> e)
{
_tooltip.Description = "";
StringBuilder _description = new StringBuilder();
foreach (var item in e.Result)
{
if (!(item.Information.Address.BuildingName == ""))
{
_description.Append(item.Information.Address.BuildingName + ", ");
}
if (!(item.Information.Address.BuildingFloor == ""))
{
_description.Append(item.Information.Address.BuildingFloor + ", ");
}
if (!(item.Information.Address.Street == ""))
{
_description.Append(item.Information.Address.Street + ", ");
}
if (!(item.Information.Address.District == ""))
{
_description.Append(item.Information.Address.District + ",");
}
if (!(item.Information.Address.City == ""))
{
_description.Append(item.Information.Address.City + ", ");
}
if (!(item.Information.Address.State == ""))
{
_description.Append(item.Information.Address.State + ", ");
}
if (!(item.Information.Address.Street == ""))
{
_description.Append(item.Information.Address.Street + ", ");
}
if (!(item.Information.Address.Country == ""))
{
_description.Append(item.Information.Address.Country + ", ");
}
if (!(item.Information.Address.Province == ""))
{
_description.Append(item.Information.Address.Province + ", ");
}
if (!(item.Information.Address.PostalCode == ""))
{
_description.Append(item.Information.Address.PostalCode);
}
_tooltip.Description = "Your car :"+_description.ToString();
_tooltip.FillDescription();
break;
}
}
private async void TextBlock_Tap(object sender, System.Windows.Input.GestureEventArgs e)
{
Geoposition myGeoposition = await myGeolocator.GetGeopositionAsync(maximumAge: TimeSpan.FromMinutes(5), timeout: TimeSpan.FromSeconds(10));
BingMapsDirectionsTask bing = new BingMapsDirectionsTask()
{
//Giving label and coordinates to starting and ending points.
Start = new LabeledMapLocation("You are here", new GeoCoordinate(myGeoposition.Coordinate.Latitude, myGeoposition.Coordinate.Longitude)),
//This is the place where I want to get the latitude and longtitude from the database
End = new LabeledMapLocation("Your car", new GeoCoordinate(Findcar.lt, Findcar.lg))
};
// Launching Bing Maps Direction Tasks
bing.Show();
}
}
下面是关于坐标的另一个类
public static GeoCoordinate ConvertGeocoordinate(Geocoordinate geocoordinate)
{
//historyTableSQlite lists = new historyTableSQlite();
//DbHelper Db_helper = new DbHelper();
// double lt;
// double lg;
//lists = Db_helper.Readlats(lists.Id);
//lt = lists.latitude;
//lg = lists.longtitude;
return new GeoCoordinate
(
Findcar.lt,
Findcar.lg,
geocoordinate.Altitude ?? Double.NaN,
geocoordinate.Accuracy,
geocoordinate.AltitudeAccuracy ?? Double.NaN,
geocoordinate.Speed ?? Double.NaN,
geocoordinate.Heading ?? Double.NaN
);
}
}
而她的是XAML代码,以便您可以清楚地看到问题
<phone:PhoneApplicationPage
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:phone="clr-namespace:Microsoft.Phone.Controls;assembly=Microsoft.Phone"
xmlns:shell="clr-namespace:Microsoft.Phone.Shell;assembly=Microsoft.Phone"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:maps="clr-namespace:Microsoft.Phone.Maps.Controls;assembly=Microsoft.Phone.Maps" xmlns:Toolkit="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit"
xmlns:Location="clr-namespace:System.Device.Location;assembly=System.Device"
xmlns:maptk="clr-namespace:Microsoft.Phone.Maps.Toolkit;assembly=Microsoft.Phone.Controls.Toolkit"
x:Class="SmartParking.Findcar"
FontFamily="{StaticResource PhoneFontFamilyNormal}"
FontSize="{StaticResource PhoneFontSizeNormal}"
Foreground="{StaticResource PhoneForegroundBrush}"
SupportedOrientations="Portrait" Orientation="Portrait"
mc:Ignorable="d"
shell:SystemTray.IsVisible="True">
<!--LayoutRoot is the root grid where all page content is placed-->
<Grid x:Name="LayoutRoot" Background="Transparent">
<Grid.RowDefinitions>
<RowDefinition Height="Auto"/>
<RowDefinition Height="*"/>
</Grid.RowDefinitions>
<!--TitlePanel contains the name of the application and page title-->
<StackPanel Grid.Row="0" Margin="12,17,0,28">
<TextBlock Text="Smart Parking" Style="{StaticResource PhoneTextNormalStyle}"/>
<TextBlock Text="Find my car" Margin="9,-7,0,0" Style="{StaticResource PhoneTextTitle1Style}"/>
</StackPanel>
<!--ContentPanel - place additional content here-->
<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0">
<StackPanel>
<!--<TextBlock TextWrapping="Wrap" FontSize="40" Text="Wher is my car" FontWeight="Bold" Foreground="Red"/>
--><!--<TextBlock x:Name="Floor_fc" TextWrapping="Wrap" Text="Floor : " FontSize="29.333"/>
<TextBlock x:Name="Zone_fc" TextWrapping="Wrap" Text="Zone :" FontSize="29.333"/>--><!--
<TextBlock TextWrapping="Wrap" Text="Check on the maps" FontSize="29.333"/>-->
<!--<maps:Map Height="232" Tap="Map_Tap" PedestrianFeaturesEnabled="True" LandmarksEnabled="True" ColorMode="Dark"/>-->
<maps:Map Height="519" Grid.Row="1" x:Name="mymap" Margin="0" ZoomLevel="16">
<maptk:MapExtensions.Children>
</maptk:MapExtensions.Children>
</maps:Map>
<Button Tap="TextBlock_Tap">Direction to my car</Button>
</StackPanel>
</Grid>
</Grid>
缩小时,屏幕上的地图大小会变小,图钉(您的点位置图标/图像)的大小保持不变。因此,您可以明显地发现该位置点正在更改其位置。
但是当你放大时,它会在它应该在的确切位置。
PS:如果在缩小时位置点大小也减小,用户一次可能无法正确看到它。
因此,如果您想在地图上设置图钉并希望它始终显示您的当前位置,您可以尝试以下操作:
这里是 C# 代码:
GeoCoordinate myPosition = null;
UserLocationMarker marker = (UserLocationMarker)this.FindName("UserLocationMarker");
marker.GeoCoordinate = myPosition;
这里是 XAML 代码:
<toolkit:UserLocationMarker x:Name="UserLocationMarker" Visibility="Collapsed">
<toolkit:UserLocationMarker.Template>
<ControlTemplate TargetType="toolkit:UserLocationMarker">
<StackPanel>
<Border x:Name="pinBorder" Background="Black" Width="30" Height="30" CornerRadius="30" HorizontalAlignment="Center" VerticalAlignment="Center">
<Ellipse x:Name="pinEllipse" Fill="#FF00A300" Stroke="White" StrokeThickness="2" Width="24" Height="24" HorizontalAlignment="Center" VerticalAlignment="Center"/>
</Border>
</StackPanel>
</ControlTemplate>
</toolkit:UserLocationMarker.Template>