ساخت پایگاه داده برای ذخیره نقاط جغرافیای و بازیابی آنها بر روی نقشه بر اساس فاصله از نقطه
در این پست یک مثال کوتاه از بازیابی نقاط بر روی نقشه گوگل مپ رو میخوام بزارم . که نقاطی که در نفشه در فاصله 25 مایلی نقطه مد نظر ما هست رو برمیگردونه.
ساخت جدول
در گام اول پایگاه داده ای باید داشته باشیم تا اطلاعات اولیه از قبیل Latitude and Longitude را در آن ذخیره کنیم. برای مثال همانگونه که در عکس زیر مشاهده می کنید ما جدولی با 5 فیلد میسازیم.
کیوری مربوط به ساخت جدول :
CREATE TABLE `markers` ( `id` INT NOT NULL AUTO_INCREMENT PRIMARY KEY , `name` VARCHAR( 60 ) NOT NULL , `address` VARCHAR( 80 ) NOT NULL , `lat` FLOAT( 10, 6 ) NOT NULL , `lng` FLOAT( 10, 6 ) NOT NULL ) ENGINE = MYISAM ;
وارد کردن رکورد ها به جدول markers
INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Frankie Johnnie & Luigo Too','939 W El Camino Real, Mountain View, CA','37.386339','-122.085823'); INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Amici\'s East Coast Pizzeria','790 Castro St, Mountain View, CA','37.38714','-122.083235'); INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Kapp\'s Pizza Bar & Grill','191 Castro St, Mountain View, CA','37.393885','-122.078916'); INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Round Table Pizza: Mountain View','570 N Shoreline Blvd, Mountain View, CA','37.402653','-122.079354'); INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Tony & Alba\'s Pizza & Pasta','619 Escuela Ave, Mountain View, CA','37.394011','-122.095528'); INSERT INTO `markers` (`name`, `address`, `lat`, `lng`) VALUES ('Oregano\'s Wood-Fired Pizza','4546 El Camino Real, Los Altos, CA','37.401724','-122.114646');
جستجوی نقاط بر روی نقشه با استفاده از کیوری
SELECT id, ( 3959 * acos( cos( radians(37) ) * cos( radians( lat ) ) * cos( radians( lng ) - radians(-122) ) + sin( radians(37) ) * sin( radians( lat ) ) ) ) AS distance FROM markers HAVING distance < 25 ORDER BY distance LIMIT 0 , 20;
https://developers.google.com/maps/articles/phpsqlsearch_v3
- ۰ نظر
- ۲۸ دی ۹۲ ، ۲۳:۴۷