Здравствуйте, подскажите как осуществить такую задачу: есть записи в бд типа varchar (геокоординаты: долгота, широта), например такие - 1) 40.4392932585, 50.4309248194 2) 43.4543676294, 35.4466803768 3) 44.3466867954, 38.7946465478 ... и есть двухмерный массив который приходит из js, например с такими числами: 47.3464865161, 39.7944364742 и нужно сровнять с этим массивом который приходит в php скрипт все эти записи с бд не разделяя каждую запись или массив на два разных числа (не разделяя долготу и широту) и найти запись из бд, которая ближе всего к этим числам в массиве. Как осуществить такое может кто знает?
Вроде для гео-данных в БД есть специальные функции вроде расстояние_до(точка). Остается только MIN() применить. p.s. вот что-то про расстояние, оптимизацию и ограничения в данной задаче + MySQL http://www.mysqlperformanceblog.com/2013/10/21/using-the-ne ... lications/
Возникает ощущение что вы, пардон, пытаетесь чистить зубы через задницу. Во-первых, работая с геоданными никогда не нужно хранить в 1 поле долготу и широту точки. Во-вторых использовать нужно не тип варчар, а point (мускул), или иной тип, принятый в вашей субд для хранения геоданных. После указанных изменений ваши задачи сразу станут простыми и приятными.
а вот как разделить строку(я ее беру из инпута, я так понимаю там строка приходит) с этими числами(44.3466867954,38.7946465478) на два числа, чтобы записать в бд в тип point?
я делаю вот так Код (Text): $s = $_POST['start']; $start = explode(", ", $s); mysql_query( "INSERT INTO delivery(address, start, date, term, weight) VALUES ('$address', '$start[0]', '$date', '$term', '$weight') ");
уже пробую выбрать по регулярке: Код (Text): $text = "49.80560256354139,28.118890437499996"; $test = preg_split('\d+\.\d+', $text); echo $test; но выдает ошибку: Warning: preg_split() [function.preg-split]: Delimiter must not be alphanumeric or backslash in Z:\home\Geo\www\ajax.php on line 69
как на php выбрать с такой строки: 49.80560256354139,28.118890437499996 все что до запятой в одну переменную, а все что после в другую?
Вам правильно сказали, explode тут идеально, а если уж пользуетесь регуляркой, то хоть пишите ее правильно. Регулярка тут будет - либо preg_split('~,~', ......), либо preg_match('~(\d\.)+,(\d\.)+~', .....)