Я знаю, как получить контакты, отображаемые на карте, используя их широту и долготу, но проблема, с которой я столкнулась, заключается в том, чтобы отображать текущую позицию.Получение текущего местоположения Pin для отображения на карте
Я следовал учебник: https://www.youtube.com/watch?v=cx5O9GfOnS4
Но когда я пытаюсь сделать «position.Longitude» или «position.Latitude», строка 34, это говорит о том, что позиция не может быть найден. Мне нужна помощь, чтобы исправить эту ошибку и понять, как заставить ее работать.
using Plugin.Geolocator;
using System;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorkingWithMaps
{
public class PinPage : ContentPage
{
Map map;
public PinPage()
{
map = new Map {
IsShowingUser = true,
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand
};
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 50;
var position = locator.GetPositionAsync(timeoutMilliseconds: 10000);
map.MoveToRegion (MapSpan.FromCenterAndRadius (
new Position (position.Longitude, position.Latitude), Distance.FromMiles (1))); // current pos
//var position = new Position(-26.077740, 28.010100); // Latitude, Longitude
var pin = new Pin {
Type = PinType.Place,
//Position = position,
Label = "Test",
Address = "Test..."
};
map.Pins.Add(pin);
//this works but I need current location not hard coded lat/lng
//map.MoveToRegion (MapSpan.FromCenterAndRadius (
//new Position (-26.077740, 28.010100), Distance.FromMiles (1))); // S4C location
//var position = new Position(-26.077740, 28.010100); // Latitude, Longitude
// var pin = new Pin {
// Type = PinType.Place,
// Position = position,
// Label = "Test",
// Address = "Test..."
// };
// map.Pins.Add(pin);
// create buttons
var morePins = new Button { Text = "Show Pins Near Me" };
morePins.Clicked += (sender, e) => {
map.Pins.Add(new Pin {
Position = new Position(-26.074932, 28.012136),
Label = "123"
});
map.Pins.Add(new Pin {
Position = new Position(-26.080752, 28.026094),
Label = "321"
});
map.MoveToRegion (MapSpan.FromCenterAndRadius (
new Position (-26.077740, 28.010100), Distance.FromMiles (2))); // this distance shows dealerships to current position
};
var reLocate = new Button { Text = "Re-center" };
reLocate.Clicked += (sender, e) => {
map.MoveToRegion (MapSpan.FromCenterAndRadius (
new Position (-26.077740, 28.010100), Distance.FromMiles (0.5)));
};
var buttons = new StackLayout {
Orientation = StackOrientation.Horizontal,
Children = {
morePins, reLocate
}
};
// put the page together
Content = new StackLayout {
Spacing = 0,
Children = {
map,
buttons
}
};
}
}
}
EDIT: Новый код Текущий выпуск: * Она не показывает мое текущее местоположение и сравнить его с местом «Тест», чтобы показать расстояние между «Текущим местоположением» и их.
Обратите внимание: если я использую координаты, например, (022225,555552) вместо «position.Longitude, position.Latitude», то он работает, но он не использует GPS для получения моего текущего местоположения. Пожалуйста, сообщите, где я ошибся и как это исправить.
Вот новый код:
using Plugin.Geolocator;
using System;
using System.Threading.Tasks;
using Xamarin.Forms;
using Xamarin.Forms.Maps;
namespace WorkingWithMaps
{
public class PinPage : ContentPage
{
Map map;
public PinPage()
{
map = new Map {
IsShowingUser = true,
HeightRequest = 100,
WidthRequest = 960,
VerticalOptions = LayoutOptions.FillAndExpand
}; }
protected async override void OnAppearing()
{
// create buttons
var morePins = new Button { Text = "Show Tests Near Me" };
//current pos
var locator = CrossGeolocator.Current;
locator.DesiredAccuracy = 50;
var position = await locator.GetPositionAsync(timeoutMilliseconds: 10000);
var reLocate = new Button { Text = "Re-center" };
reLocate.Clicked += (sender, e) => {
map.MoveToRegion(MapSpan.FromCenterAndRadius(
new Position(position.Longitude, position.Latitude), Distance.FromMiles(0.5)));
};
var buttons = new StackLayout
{
Orientation = StackOrientation.Horizontal,
Children = {
morePins, reLocate
}
};
morePins.Clicked += (sender, e) => {
map.Pins.Add(new Pin {
Position = new Position(-26.074932, 28.012136),
Label = "Test 1"
});
map.Pins.Add(new Pin {
Position = new Position(-26.080752, 28.026094),
Label = "Test 2"
});
map.MoveToRegion(MapSpan.FromCenterAndRadius(
new Position(position.Longitude, position.Latitude), Distance.FromMiles(2))); // this distance shows tests to current position
};
// put the page together
Content = new StackLayout {
Spacing = 0,
Children = {
map,
buttons
}};
}
}
}
ИСПРАВЛЕНО: Я имел порядок лат и долго местами так вот почему он не находил свою позицию. Глупая ошибка. Спасибо всем за вклад!
Привет, Я пробовал этот путь сейчас, и он не получает мое текущее местоположение и сравнивает его с «тестовыми» координатами. Я обновил свой пост выше и добавил новый код в разделе «Редактировать». Пожалуйста, взгляните и дайте мне знать, как я могу зафиксировать текущую позицию, которая не появляется. –
Глядя на ваш первоначальный вопрос, кажется, вы его исправили! :-) – Krumelur
У меня есть. Цените все входные данные! –