记录一个百度地图的矩形区域搜索算法

矩形区域其实就是x、y左右每次加一定数值,矩形有四个坐标。

例如深圳地区的矩形区域是:22.449954,22.866712,113.757547,114.640617
然后每次从22.449954增加0.01一直到22.866712
113.757547增加0.01一直到114.640617,
两个循环组合出来的集合的所有坐标都遍历一遍。

List<string> urls = new List<string>()
{
   "深圳:22.449954,22.866712,113.757547,114.640617", "上海:30.653783,31.464508,122.028092,120.800073",
   "广州:13.164045,23.637493,114.012045,122.615464", "北京:39.42608,41.100304,115.344699,117.525929",
   "珠海+中山:21.940065,22.615464,113.092827,113.706837", "莞惠:22.615464,23.656991,114.012045,114.89145",
   "佛山:22.587604,23.637493,112.396029,113.164045", "长三角:29.591461,32.917728,118.26412,122.265533",
   "环渤海区域:38.676867,40.153807,116.777389,118.906876"
};              
for (int k = 0; k < urls.Count; k++)
{
    string query = urls[k].Split(':').First().Trim();
    string[] jweidus = urls[k].Split(':').Last().Split(',');
    if (jweidus.Length ==4)
    {
        for (double i = double.Parse(jweidus[0]); i <= double.Parse(jweidus[1]); i += 0.01)
        {
           for (double j = double.Parse(jweidus[2]); j <= double.Parse(jweidus[3]); j += 0.01)
           {
              string JWD = i.ToString().Replace("000001", "").Replace("9999999", "") + "," +
              j.ToString().Replace("000001", "").Replace("9999999", "");
              string JWD1 = (i + 0.01).ToString().Replace("000001", "").Replace("9999999", "") + "," +
              (j + 0.01).ToString().Replace("000001", "").Replace("9999999", "");
              string LatLongitude = JWD + "," + JWD1;
          }
       }
    }
}

通过这种算法我们可以做很多事情,调用对方的地图接口查询写字楼、餐厅、企业、园区等。

  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
矩形套料算法,也称为矩形排样算法,是一种常见的计算机优化问题,其目的是在给定的有限区域内尽可能多地放置矩形,以最小化浪费的面积和数量。 下面是一个用 C# 实现的基于贪心算法矩形套料算法的示例: ```csharp using System; using System.Collections.Generic; using System.Linq; namespace RectanglePacking { class Rectangle { public int Width { get; set; } public int Height { get; set; } public int X { get; set; } public int Y { get; set; } } class RectanglePacking { static void Main(string[] args) { List<Rectangle> rectangles = new List<Rectangle>(); rectangles.Add(new Rectangle { Width = 200, Height = 100 }); rectangles.Add(new Rectangle { Width = 100, Height = 50 }); rectangles.Add(new Rectangle { Width = 150, Height = 75 }); rectangles.Add(new Rectangle { Width = 80, Height = 60 }); rectangles.Add(new Rectangle { Width = 120, Height = 90 }); int containerWidth = 500; int containerHeight = 300; List<Rectangle> packedRectangles = PackRectangles(rectangles, containerWidth, containerHeight); Console.WriteLine($"Total packed rectangles: {packedRectangles.Count}"); foreach (Rectangle rectangle in packedRectangles) { Console.WriteLine($"Rectangle: ({rectangle.X}, {rectangle.Y}) - ({rectangle.X + rectangle.Width}, {rectangle.Y + rectangle.Height})"); } } static List<Rectangle> PackRectangles(List<Rectangle> rectangles, int containerWidth, int containerHeight) { List<Rectangle> packedRectangles = new List<Rectangle>(); rectangles = rectangles.OrderByDescending(r => r.Width).ToList(); foreach (Rectangle rectangle in rectangles) { bool isPacked = false; for (int y = 0; y < containerHeight - rectangle.Height + 1; y++) { for (int x = 0; x < containerWidth - rectangle.Width + 1; x++) { rectangle.X = x; rectangle.Y = y; if (!IsOverlapping(rectangle, packedRectangles)) { packedRectangles.Add(rectangle); isPacked = true; break; } } if (isPacked) { break; } } } return packedRectangles; } static bool IsOverlapping(Rectangle rectangle, List<Rectangle> rectangles) { foreach (Rectangle r in rectangles) { if (rectangle.X + rectangle.Width > r.X && rectangle.X < r.X + r.Width && rectangle.Y + rectangle.Height > r.Y && rectangle.Y < r.Y + r.Height) { return true; } } return false; } } } ``` 在上面的示例中,我们定义了一个 `Rectangle` 类来表示矩形,其中包含了宽度、高度、X 坐标和 Y 坐标等属性。然后,我们实现了一个 `PackRectangles` 方法来套矩形,并返回套好的矩形列表。在这个方法中,我们采用了贪心算法的思想,将矩形按宽度从大到小排序,然后依次将每个矩形与已经套好的矩形进行比较,找到一个不与已经套好的矩形重叠的位置,并将该矩形放置在此位置上。如果找不到合适的位置,则跳过该矩形。最后,返回套好的矩形列表。 在上面的示例中,我们定义了一个简单的矩形列表,并且定义了一个大小为 500x300 的容器。然后,我们调用了 `PackRectangles` 方法,并将矩形列表和容器大小作为参数传入。最后,输出套好的矩形列表中每个矩形的位置和大小。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值