基于位置的广告系统在Laravel

时间:2017-06-06 14:08:41

标签: php laravel google-maps laravel-5 laravel-5.4

如何使用位置(经度和纬度)查找向用户展示的广告

数据库结构

广告表

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`user_id` INT(11) NOT NULL,
`title` VARCHAR(1000) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`images` VARCHAR(1000) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`source_url` VARCHAR(1000) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`target` VARCHAR(20) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`radius` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`distance` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`lat` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`lng` VARCHAR(50) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`description` LONGTEXT NOT NULL COLLATE 'utf8mb4_unicode_ci',
`deleted_at` TIMESTAMP NULL DEFAULT NULL,
`created_at` TIMESTAMP NULL DEFAULT NULL,
`updated_at` TIMESTAMP NULL DEFAULT NULL,
`disable_admin` ENUM('Y','N') NULL DEFAULT 'N' COLLATE 'utf8mb4_unicode_ci',

用户表

`id` INT(10) UNSIGNED NOT NULL AUTO_INCREMENT,
`name` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`full_name` VARCHAR(500) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`email` VARCHAR(191) NOT NULL COLLATE 'utf8mb4_unicode_ci',
`gender` ENUM('Male','Female') NOT NULL DEFAULT 'Male' COLLATE
`birthday_date` DATETIME NULL DEFAULT NULL,
`current_city` VARCHAR(255) NULL DEFAULT NULL COLLATE 'utf8mb4_unicode_ci',
`email_verif` ENUM('Y','N') NULL DEFAULT 'N' COLLATE 'utf8mb4_unicode_ci',
`created_at` TIMESTAMP NOT NULL DEFAULT CURRENT_TIMESTAMP ON UPDATE CURRENT_TIMESTAMP,
`updated_at` TIMESTAMP NOT NULL DEFAULT '0000-00-00 00:00:00',
`current_lat` VARCHAR(500) NULL DEFAULT 'N' COLLATE 'utf8mb4_unicode_ci',
`current_lng` VARCHAR(500) NULL DEFAULT 'N' COLLATE 'utf8mb4_unicode_ci',

当用户在系统中登录时,将使用用户current_lat,current_lng

显示广告

问题是,如果管理员创建的广告的半径为28524.9203,与当前的lng或lat的距离为40.32,那么如何查找将向用户展示的广告

请帮助我堆叠

谢谢

1 个答案:

答案 0 :(得分:0)

这可能会有所帮助:Finding Points Within a Distance of a Latitude/Longitude Using Bounding Coordinates

特别是“3.1计算最小和最大纬度”部分。或者:Selecting points within a bounding circle