Mapsui добавляет булавки карты в Xamarin Forms


Мне нужно добавить несколько булавок на MapsUI элемент управления картой, который использует OpenStreetMap тайлов.

Проблема в том, что я не могу найти ничего, что упоминало бы булавки в их документации, поэтому мой вопрос:

Имеются ли какие-либо булавки, но они имеют разные имена, или я должен сам рисовать булавки (используя геометрию и точки, как в некоторых найденных мной примерах), и если да, то как мне сохранить их одинаковый размер при масштабировании карты?

Может быть, кто-то может указать, где я должен искать в своей документации на случай, если я м ослеп и пропустил это.

Спасибо!


person kisslory    schedule 03.10.2018    source источник
comment
вы смотрели на примеры приложений? Они используют функции, чтобы рисовать булавки на карте.   -  person Jason    schedule 03.10.2018
comment
да, но на самом деле они не являются булавками var point = SphericalMercator.FromLonLat(long, lat); feature.Geometry = point; это приводит к кругу, и я хотел бы использовать стиль булавки Google Maps (по крайней мере форму), если я все еще что-то упускаю, пожалуйста, дайте мне знать, в противном случае я думаю, что я попытаюсь использовать пользовательский иконки   -  person kisslory    schedule 03.10.2018
comment
github.com/Mapsui/Mapsui/search?q=pin&unscoped_q=pin   -  person Jason    schedule 03.10.2018
comment
Спасибо ! я попробую   -  person kisslory    schedule 03.10.2018


Ответы (3)


Идея состоит в том, что вы используете свои собственные растровые изображения для рисования в качестве «булавок».

У Mapsui есть особенности. Объект имеет геометрию, которая может быть точкой, линией и полигоном (и некоторыми другими). Функция нарисована в каком-то стиле. Что вам нужно сделать, так это создать объекты с точечной геометрией и использовать стиль символов с растровым изображением в качестве символа. Вам нужно зарегистрировать растровое изображение и использовать bitmapId в символе. См. образец здесь:

https://github.com/Mapsui/Mapsui/blob/master/Samples/Mapsui.Samples.Common/Maps/PointsSample.cs

person pauldendulk    schedule 03.10.2018
comment
Привет, спасибо за вашу помощь! это сработало очень хорошо. Для тех, кто может захотеть это сделать, не забудьте установить действие сборки вашего ресурса как встроенный ресурс, иначе ваше изображение не может быть найдено (щелчок правой кнопкой мыши + свойства) - person kisslory; 05.10.2018
comment
привет еще раз, есть ли способ использовать изображения из доступных папок с каждой платформы? каждый пример, который я нашел, использовал изображения внутри проекта pcl, но я хочу рассмотреть экраны с разной плотностью пикселей. Что-то вроде идеи: взять растровое изображение из ImageSource, а затем зарегистрировать его? - person kisslory; 07.11.2018
comment
@kisslory Да, это возможно. Вам нужно зарегистрировать необработанный битмап. Возможно, вы можете получить необработанное растровое изображение из Android ImageSource. Возможно, вы можете загрузить необработанные байты напрямую. - person pauldendulk; 07.11.2018

Ваше представление карты Mapsui Mapsui.UI.Forms.MapView имеет свойство Pins. Туда можно добавить булавки. Вы можете получить доступ к MapView View из кода программной части *xaml.cs вашего MapView.

Для этого сначала назовите представление карты на странице XAML:

<ContentPage
    xmlns:mapsui="clr-namespace:Mapsui.UI.Forms;assembly=Mapsui.UI.Forms"
    xmlns="http://xamarin.com/schemas/2014/forms"
    xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
    x:Class="YourProject.Pages.YourMap">
  <ContentPage.Content>
     <mapsui:MapView
        x:Name="selectMapControl"/>
  </ContentPage.Content>
</ContentPage>

Затем получите к нему доступ из кода C# этой страницы:

using Mapsui.UI.Forms;

protected override async void OnAppearing()
{
    selectMapControl.Pins.Add(new Pin(new MapView())
    {
       Position = new Position(0, 0),
       Type = PinType.Pin,
       Label = "Zero point",
       Address = "Zero point",
    });
}

Надеюсь, этот простейший пример поможет.

person Alexander Yashyn    schedule 06.06.2019

Вы можете использовать Xamarin.Forms.GoogleMaps, так как они дают вам возможность добавлять несколько булавок по вашему выбору.

Вот пример кода:

var position = new Position(Latitude, Longitude);

        var pin = new Pin
        {
            Type = PinType.Place,
            Position = position,
            Icon = BitmapDescriptorFactory.FromBundle("pin.png"),
            Label = "custom pin",
            Address = "custom detail info",
        };

        MyMap.Pins.Add(pin);
person Wasif Mahmood Mustafa    schedule 03.10.2018
comment
я должен использовать OpenStreetMap, так как карты Google недоступны в Китае - person kisslory; 03.10.2018