Xamarin 表单在地图区域中获取位置
Xamarin forms get places in the map area
我开发了一个 xamarin 表单应用程序,我在其中存储了数据库中的一些位置。我用带有纬度和经度的 efcore 存储 Location NetTopology 套件。然后我可以找到离地图上的一个点最近的地方。
但是,如果我移动地图或缩小地图,我如何找到新区域中存储在我的数据库中的地点并将它们固定在地图上?
有例子吗?
我真的很难找到一种方法来说明我数据库中的这个地点列表是地图显示内容的一部分。
我使用 xamarin 地图。
谢谢
为此,您需要找到地图可见区域的边界。让我解释一下。
绑定class:
public class Bounds
{
public double South { get; set; }
public double West { get; set; }
public double North { get; set; }
public double East { get; set; }
}
地图有一个 属性 称为可见区域。当地图的属性改变时,地图的可见区域也会改变。下面是地图 class:
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;
}
}
现在用这些界限查询你的数据库。
我假设您已将要在地图上显示的区域的经纬度存储在数据库中。所以你可以像这样查询你的数据库:
var GetPlace = "Select Id, AreaName, Lat, Long
From TableName
Where Lat Between East And West
And Long Between North And South";
这里的北、南、东、西是我们从上面的方法得到的边界。
我开发了一个 xamarin 表单应用程序,我在其中存储了数据库中的一些位置。我用带有纬度和经度的 efcore 存储 Location NetTopology 套件。然后我可以找到离地图上的一个点最近的地方。
但是,如果我移动地图或缩小地图,我如何找到新区域中存储在我的数据库中的地点并将它们固定在地图上?
有例子吗?
我真的很难找到一种方法来说明我数据库中的这个地点列表是地图显示内容的一部分。
我使用 xamarin 地图。
谢谢
为此,您需要找到地图可见区域的边界。让我解释一下。
绑定class:
public class Bounds
{
public double South { get; set; }
public double West { get; set; }
public double North { get; set; }
public double East { get; set; }
}
地图有一个 属性 称为可见区域。当地图的属性改变时,地图的可见区域也会改变。下面是地图 class:
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;
}
}
现在用这些界限查询你的数据库。
我假设您已将要在地图上显示的区域的经纬度存储在数据库中。所以你可以像这样查询你的数据库:
var GetPlace = "Select Id, AreaName, Lat, Long
From TableName
Where Lat Between East And West
And Long Between North And South";
这里的北、南、东、西是我们从上面的方法得到的边界。