php验证地图坐标在某片坐标区域内

mysql空间查询并不太适合地图坐标,如果使用:http://www.cnblogs.com/tyjsjl/p/8760002.html的方式进行地图点坐标的查询就不好用了,于是直接使用php来进行地图范围的查询更方便点。代码如下:

 1 /**
 2  * 验证坐标点是否在某区域内
 3  * @author xiaoliang <[email protected]>
 4  * Class validationMap
 5  */
 6 class validationMap{
 7     private $coordArray;
 8     private $vertx = [];
 9     private $verty = [];
10     /**
11      * 设置坐标区域
12      * @param mixed $coordArray
13      */
14     public function setCoordArray(array $coordArray)
15     {
16         $this->coordArray = $coordArray;
17     }
18     /**
19      * 验证区域范围
20      * @param array $coordArray
21      * @return bool
22      */
23     public function isCityCenter(array $coordArray){
24         if(!$this->vaildatePoint($coordArray)){
25             return false;
26         }
27         return $this->pnpoly(count($this->coordArray), $coordArray[‘lng‘], $coordArray[‘lat‘]);
28     }
29     /**
30      * 比较区域坐标
31      * @param $nvert
32      * @param $testx
33      * @param $testy
34      * @return bool
35      */
36     private function pnpoly($nvert,$testx, $testy)
37     {
38         $c = false;
39         for ($i = 0, $j = $nvert-1; $i < $nvert; $j = $i++) {
40             if ( ( ($this->verty[$i]>$testy) != ($this->verty[$j]>$testy) ) && ($testx < ($this->vertx[$j]-$this->vertx[$i]) * ($testy-$this->verty[$i]) / ($this->verty[$j]-$this->verty[$i]) + $this->vertx[$i]) )
41                 $c = !$c;
42         }
43         return $c;
44     }
45     /**
46      * 验证坐标
47      * @param array $pointArray
48      * @return bool
49      */
50     private function vaildatePoint(array $pointArray){
51         $maxY = $maxX = 0;
52         $minY = $minX = 9999;
53         foreach ($this->coordArray as $item){
54             if($item[‘lng‘]>$maxX) $maxX = $item[‘lng‘];
55             if($item[‘lng‘] < $minX) $minX = $item[‘lng‘];
56             if($item[‘lat‘]>$maxY) $maxY = $item[‘lat‘];
57             if($item[‘lat‘] < $minY) $minY = $item[‘lat‘];
58             $this->vertx[] = $item[‘lng‘];
59             $this->verty[] = $item[‘lat‘];
60         }
61         if ($pointArray[‘lng‘] < $minX || $pointArray[‘lng‘] > $maxX || $pointArray[‘lat‘] < $minY || $pointArray[‘lat‘] > $maxY) {
62             return false;
63         }
64         return true;
65     }
66 }
/**************************** test *************************************$map = [  //上海    ["lng" => 121.488286, "lat" => 31.420147],    ["lng" => 121.702154, "lat" => 31.294828],    ["lng" => 121.780918, "lat" => 31.141157],    ["lng" => 121.782068, "lat" => 30.941157],    ["lng" => 121.492885, "lat" => 30.909931],    ["lng" => 121.22325, "lat" => 30.890099],    ["lng" => 121.161482, "lat" => 31.015526],    ["lng" => 121.076395, "lat" => 31.226239],    ["lng" => 121.189873, "lat" => 31.339688],    ["lng" => 121.459509, "lat" => 31.41368],];$array = ["lat"=>31.218681,"lng"=>121.08604];//进行验证的区域validationMap::setCoordArray($map);var_dump(validationMap::isCityCenter($array));

因为每个区域的地图点坐标需要从数据库提取进行查询,所以静态类就不太方便了,本文代码不使用静态类。关于静态类的优缺点在此不作说明。

原文代码:https://www.cnblogs.com/liang94/p/5936583.html

原文地址:https://www.cnblogs.com/tyjsjl/p/8855253.html

时间: 2024-11-08 23:10:47

php验证地图坐标在某片坐标区域内的相关文章

验证坐标在某片坐标区域内 php 代码

之前碰到的这样一个需求,要将公司的服务在地图中显示出来,并将用户每天的访问坐标进行统计看有多少用户是在所能达到的服务范围半径内. 以下是PHP代码的实现 (仅验证坐标在某片坐标区域内) <?php /** * 验证坐标点是否在某区域内 * @author xiaoliang <[email protected]> * Class validationMap */ class validationMap{ private static $coordArray; private static

利用百度地图API,获取经纬度坐标

利用百度地图API,获取经纬度坐标 代码很简单,但在网上没找到现成的获取地图经纬度的页面. 就是想,给当前页面传递一个经纬度,自动定位到此经纬度.然后可以重新选择,选择完返回经纬度. 效果如下: 源代码下载:http://files.cnblogs.com/zjfree/select_map.rar 利用百度地图API,获取经纬度坐标,布布扣,bubuko.com

百度地图多边形画区域、获取节点经纬度坐标、判断某一点是否在此区域内

创建可绘画map: 1 <!DOCTYPE html> 2 3 <html> 4 <head> 5 <meta charset="UTF-8"> 6 <meta name="viewport" content="width=device-width, initial-scale=1,maximum-scale=1, user-scalable=no"> 7 <meta name=&

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息

IOS中使用百度地图定位后获取城市坐标,城市名称,城市编号信息 /**当获取到定位的坐标后,回调函数*/ - (void)didUpdateBMKUserLocation:(BMKUserLocation *)userLocation{ BMKCoordinateRegion region; region.center.latitude  = userLocation.location.coordinate.latitude; region.center.longitude = userLoca

PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例

原文:PHP+百度地图API+JAVASCRIPT实现GPS坐标与百度坐标转换的实例 <!--小幅的坐标转换点位程序--> <!DOCTYPE html> <html> <head> <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" /> <?php $jingwei="new BMap.Point($lon

C# 计算地图上某个坐标点的是否在多边形内

原文:C# 计算地图上某个坐标点的是否在多边形内 这个方法引用自群友的博客 https://www.xiaofengyu.com/?p=143 使用百度地图的时候,常常会用到判断一个点是否在一个多边形的范围内,该方法用到的是射线法, 通过修改Javascrpit的代码过来的,射线法的意思就是从点出发和任意的一边的交叉点数为奇数则为在改区域内, 参考文档http://erich.realtimerendering.com/ptinpoly/ public class location { publ

百度地图墨卡托坐标转高德经纬度坐标(偏移小)

基本上是网上常见的方法进行坐标系的转换,但是误差很大.发现之所以误差大是在于百度的墨卡托坐标转百度的经纬度时误差太大,后面找到一个方法,误差较小,基本吻合. 参考:http://www.site-digger.com/tools/mct2latlng.html 这里的转换是直接调用百度地图SDK中的API,通过对其中JavaScript源代码的执行跟踪,提取出其中的墨卡托坐标转百度经纬度坐标的代码如下: Java版本: @Data public static class Point { priv

BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换

BD09坐标(百度坐标) WGS84(GPS坐标) GCJ02(国测局坐标) 的相互转换 http://www.cnphp6.com/archives/24822 by root ⋅ Leave a Comment 谷歌地图采用的是WGS84地理坐标系(中国范围除外),谷歌中国地图.搜搜中国地图.高德地图采用的是GCJ02地理坐标系,百度采用的是BD09坐标系,而设备一般包含GPS芯片或者北斗芯片获取的经纬度为WGS84地理坐标系,所以我们要根据得到的经纬度的坐标类型和地图厂商类型在地图上标点,

火星坐标、百度坐标、WGS-84坐标相互转换及墨卡托投影坐标转经纬度JavaScript版

火星坐标 火星坐标是国家测绘局为了国家安全在原始坐标的基础上进行偏移得到的坐标,基本国内的电子地图.导航设备都是采用的这一坐标系或在这一坐标的基础上进行二次加密得到的.火星坐标的真实名称应该是GCJ-02坐标.最近在知乎上看到关于火星坐标的话题都是充满争议的(点我跳转到知乎),感兴趣的同学可以去详细了解一下. 基本上所有的国内的电子地图采用的都是火星坐标系甚至Google地图中国部分都特意为中国政府做了偏移.百度坐标 火星坐标是在国际标准坐标WGS-84上进行的一次加密,由于国内的电子地图都要至