php+mongodb判断坐标是否在指定多边形区域内的实例

针对“php+mongodb判断坐标是否在指定多边形区域内”的实现,我们需要按照以下步骤进行:

1.准备工作

首先,需要安装MongoDB和PHP的扩展库MongoDB driver。在此不再赘述。

其次,需要安装一个支持geoJSON数据的MongoDB插件,geoJSON数据是一种用于表示地球上任意一个二维平面片的JSON格式数据,可以更加准确地表示地理位置信息。在此我们使用MongoDB 3.2版本及以上的官方插件mongo-compass-1.14.0-win32-x64.msi。

2.插入多边形区域数据

接下来,将多边形区域的数据插入MongoDB数据库中。MongoDB支持GeoJSON格式的数据。示例代码如下:

var data = {
    name: "polygon1", // 多边形区域名称,可选
    geometry: {
        type: "Polygon", // 几何类型(多边形)
        coordinates: [
            [
                [113.321457, 23.195468],
                [113.325632, 23.194388],
                [113.327300, 23.196693],
                [113.323367, 23.199188],
                [113.319407, 23.197011],
                [113.321457, 23.195468]
            ]
        ]
    }
};
db.polygons.insert(data);

GeoJSON数据的几何类型有Point、LineString、Polygon、MultiPoint、MultiLineString、MultiPolygon、GeometryCollection七种。

以上代码中,我们插入了一个名为“polygon1”的多边形区域,它的坐标点是一个二维数组,由经纬度坐标组成。注意:坐标点的顺序必须是按照顺时针或逆时针的方向排列,末尾坐标点必须与第一个坐标点相同(闭合区域)。

3.查询坐标是否在指定多边形区域内

接下来,在PHP脚本中实现函数判断坐标是否在指定多边形区域内。示例代码如下:

/**
 * 功能:判断坐标是否在指定多边形区域内
 * 参数:$lon 经度;$lat 纬度;$polygon 多边形区域名称
 * 返回:该点是否在指定多边形区域内
 */
function isInsidePolygon($lon, $lat, $polygon) {
    // 连接MongoDB数据库
    $m = new MongoDB\Driver\Manager("mongodb://localhost:27017");

    // 创建查询命令
    $command = new MongoDB\Driver\Command([
        'geoNear' => 'polygons', // 要查询的集合
        'near' => ['type' => 'Point', 'coordinates' => [$lon, $lat]], // 测试点
        'spherical' => true, // 球面距离
        'maxDistance' => 5000, // 最大距离,单位:米
        'query' => ['name' => $polygon], // 要查询的区域名称
    ]);

    // 执行查询命令
    $cursor = $m->executeCommand('test', $command);

    // 解析查询结果
    foreach ($cursor as $document) {
        $result = $document->results;

        foreach ($result as $item) {
            if ($item->dis !== NULL) { // 查询成功
                return true;
            }
        }
    }

    return false; // 查询失败
}

以上代码中,我们使用MongoDB的geoNear命令进行查询。该命令能够查询给定点与指定集合中所有点的距离,并返回距离最近的点的信息。查询过程主要包括以下几个步骤:

  1. 创建查询命令,参数包括:要查询的集合名称、测试点、距离单位、最大距离范围、要查询的区域名称等;
  2. 执行查询命令,返回查询结果;
  3. 解析查询结果,判断测试点与多边形区域是否相交。

具体实现过程可以参考以上示例代码。

示例说明

下面分别给出两个示例说明:

示例1:判断某个点是否在指定多边形区域内

假如我们有一个多边形区域,名为“polygon1”,坐标点为:[[113.321457, 23.195468],[113.325632, 23.194388],[113.327300, 23.196693],[113.323367, 23.199188],[113.319407, 23.197011],[113.321457, 23.195468]]。现在需要判断一个点(113.322678, 23.197958)是否在该多边形区域内,我们只需要调用以上提到的isInsidePolygon函数即可。示例代码如下:

$lon = 113.322678;
$lat = 23.197958;
$polygon = "polygon1";
$result = isInsidePolygon($lon, $lat, $polygon);
if ($result) {
    echo "该点在指定多边形区域内。";
} else {
    echo "该点不在指定多边形区域内。";
}

示例2:批量查询坐标是否在指定多边形区域内

假如现在有一个包含多个坐标点的数组,现在需要判断每一个坐标点是否在某个多边形区域内,我们可以使用循环进行批量查询。示例代码如下:

$points = [
    ['lon' => 113.322678, 'lat' => 23.197958],
    ['lon' => 113.324847, 'lat' => 23.197962],
    ['lon' => 113.327011, 'lat' => 23.197969],
];

$polygon = "polygon1";

foreach ($points as $p) {
    $result = isInsidePolygon($p['lon'], $p['lat'], $polygon);
    if ($result) {
        echo "坐标[".$p['lon'].",".$p['lat']."]在指定多边形区域内。";
    } else {
        echo "坐标[".$p['lon'].",".$p['lat']."]不在指定多边形区域内。";
    }
}

在以上两个示例中,如果输出的结果为“该点在指定多边形区域内。”或“坐标[x,y]在指定多边形区域内。”,则表示该点或坐标在指定的多边形区域内;如果输出的结果为“该点不在指定多边形区域内。”或“坐标[x,y]不在指定多边形区域内。”,则表示该点或坐标不在指定的多边形区域内。

本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:php+mongodb判断坐标是否在指定多边形区域内的实例 - Python技术站

(0)
上一篇 2023年5月16日
下一篇 2023年5月16日

相关文章

  • nodejs连接mysql数据库及基本知识点详解

    Node.js连接MySQL数据库及基本知识点详解 在Node.js开发中,连接数据库是必不可少的一部分。MySQL是一种流行的关系型数据库,可以使用Node.js进行连接和操作。下面是连接MySQL数据库的详细攻略,包含以下内容: MySQL基本知识点 Node.js连接MySQL的方式 示例说明 MySQL基本知识点 在连接MySQL之前,需要了解一些基…

    MongoDB 2023年5月16日
    00
  • MongoDB复制方法详解

    MongoDB 复制是指将 MongoDB 数据库中的数据从一个节点复制到另一个节点的过程。复制有助于在相互独立但彼此具有相同数据的多个副本之间实现数据可靠性、高可用性和扩展性。MongoDB 复制过程中需要指定一个作为主节点、即主服务器(primary)的节点,其他节点则被称为从节点(secondary)。 本文将为您提供一个包含 MongoDB 复制的完…

    MongoDB 2023年3月14日
    00
  • Mongodb启动命令参数中文说明

    下面我详细讲解一下“Mongodb启动命令参数中文说明”的完整攻略。 MongoDB启动命令参数中文说明 在使用MongoDB时,我们常需要在启动命令中加入一些参数,来控制MongoDB的启动和运行。下面是对这些参数进行中文说明的攻略: 基础参数 –bind_ip: 指定MongoDB绑定的IP地址,默认为0.0.0.0; –port: 指定MongoD…

    MongoDB 2023年5月16日
    00
  • centos离线安装mongodb-database-tools方法详解

    centos离线安装mongodb-database-tools方法详解 本文将详细讲解如何在CentOS系统中离线安装mongodb-database-tools,同时提供两条示例说明。 前置要求 安装好了CentOS系统,版本不低于7.0。 已经准备好mongodb-database-tools的离线安装包,并放置在合适的位置。 步骤1:安装依赖库 首先…

    MongoDB 2023年5月16日
    00
  • MongoDB社区版和企业版的差别对照表

    下面是关于“MongoDB社区版和企业版的差别对照表”的详细讲解。 MongoDB社区版和企业版差别对照表 功能 社区版 企业版 备份 支持 支持 安全加固 部分支持 全面支持 安全认证 部分支持 全面支持 监控工具 不支持 支持 SDK支持 开源SDK支持 全部官方支持 数据库加密 不支持 支持 数据库管理工具 不支持 支持 数据库自动分片 不支持 支持 …

    MongoDB 2023年5月16日
    00
  • Mongo DB增删改查命令

    MongoDB是一款著名的NoSQL数据库,其具有高可用、高可扩展性、高性能、灵活性和支持海量数据等特点,受到广泛关注。MongoDB的增删改查命令是基本的操作,也是学习和使用MongoDB的重要部分,以下是完整的MongoDB增删改查命令攻略。 MongoDB连接命令 首先,需要连接MongoDB数据库,连接命令如下: mongo [host:port/d…

    MongoDB 2023年5月16日
    00
  • mongodb中oplog介绍和格式详析

    下面我会详细讲解“MongoDB中Oplog介绍和格式详析”的完整攻略,包括什么是Oplog、Oplog的格式详解以及两个Oplog示例说明。 什么是Oplog? Oplog(操作日志)是MongoDB的一项特性,用于记录MongoDB数据中的所有操作。Oplog是一个特殊集合,也是复制集中的必须组件。使用Oplog,可以进行MongoDB的数据副本集和分片…

    MongoDB 2023年5月16日
    00
  • MongoDB性能优化及监控

    MongoDB性能优化及监控 1. 优化查询操作 在实际使用中,经常会遇到查询操作比较慢的情况。针对这种情况,我们可以采取以下措施: 索引优化 防止全表扫描,建立索引能够加快查询速度。 考虑使用组合索引,以最大限度减少索引占用空间。 查询条件优化 避免使用复杂的正则表达式。 尽量避免像 $where 这样引入自定义代码的操作。 确保查询语句的优化,如利用游标…

    MongoDB 2023年5月16日
    00
合作推广
合作推广
分享本页
返回顶部