Xamarin формы получают места в области карты - PullRequest
0 голосов
/ 26 февраля 2020

Я разрабатываю приложение форм xamarin, в котором храню некоторые места в своей базе данных. Я храню Location NetTopology Suite с широтой и долготой. Затем я могу найти ближайшие места из точки на карте.

Но если я переместу карту или уменьшу масштаб, как я могу найти места в новой области, которые хранятся в моей базе данных, чтобы прикрепить их к карта?

Есть ли пример?

Я действительно изо всех сил пытаюсь найти способ сказать, что этот список мест в моей базе данных является частью того, что показывает карта.

Я использую карты xamarin.

Спасибо

Ответы [ 2 ]

2 голосов
/ 26 февраля 2020

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

Связанный класс:

 public class Bounds
    {
        public double South { get; set; }
        public double West { get; set; }
        public double North { get; set; }
        public double East { get; set; }
    }

Карта имеет свойство, называемое видимой областью. Когда свойство карты изменится, видимый регион карты также изменится. Ниже приведен класс карты:

Bounds bounds = new Bounds();
customMap.PropertyChanged += (sender, e) =>
                {
                    Debug.WriteLine(e.PropertyName + " just changed!");
                    if (e.PropertyName == "VisibleRegion" && customMap.VisibleRegion != null)
                        CalculateBoundingCoordinates(customMap.VisibleRegion);
                };

static void CalculateBoundingCoordinates(MapSpan region)
        {
            try
            {
                _region = region;
                var center = region.Center;
                var halfheightDegrees = region.LatitudeDegrees / 2;
                var halfwidthDegrees = region.LongitudeDegrees / 2;

        var left = center.Longitude - halfwidthDegrees;
        var right = center.Longitude + halfwidthDegrees;
            var top = center.Latitude + halfheightDegrees;
            var bottom  = center.Latitude - halfheightDegrees;

            if (left < -180) left = 180 + (180 + left);
            if (right > 180) right = (right - 180) - 180;

        bounds.West = left;
        bounds.East = right;
        bounds.North = top;
        bounds.South = bottom;
    }
}

Теперь запросите вашу базу данных с этими границами.

0 голосов
/ 02 марта 2020

Я предполагаю, что у вас есть широта, долго хранящаяся в дБ для области, которую вы хотите показать на карте. таким образом, вы можете запросить вашу базу данных следующим образом:

var GetPlace = "Select Id, AreaName, Lat, Long From TableName Where Lat Between East And West And Long Between North And South";

Здесь Север, Юг, Восток и Запад - это границы, которые мы получаем из описанного выше метода.

...