Создать одно значение из пары Широта и Долгота в PHP - PullRequest
1 голос
/ 29 августа 2011

Я работаю над проектом Google Maps в приложении PHP.Мне нужно найти способ сохранить пару широты и долготы в виде единственного значения.Я использую это для хранения маркеров с одинаковыми координатами.

Есть ли способ кодировать пару широта / долгота в одну строку?Я хотел бы что-то вроде:

$lat = 45.18392;
$long = 62.18293;

// Would return a single string like 893jfd8sj39k
$single_string = make_single_string($lat, $long);

function make_single_string($lat, $long)
{
    // Do something here with $lat and $long
    return $single_string;
}

Наиболее важной частью функции является то, что она должна возвращать одну и ту же строку КАЖДЫЙ раз.

Спасибо за помощь!

Ответы [ 8 ]

3 голосов
/ 29 августа 2011

Я думаю, что вы ищете это:

function make_single_string($lat, $long)
{
    $single_string = md5( $lat.'-'.$long );
    return $single_string;
}

результат будет примерно таким:

04f59f6c007149079d0b5cc81ee0d25f 
2 голосов
/ 29 августа 2011

Вы можете вернуть хэш обоих чисел:

function make_single_string($lat, $long)
{
    return md5($lat.'-'.$long);
}
1 голос
/ 29 августа 2011

Если вам нужна обратимость (и вы, вероятно, хотите), тогда вам нужно придумать стандартный формат ввода.Предполагая, что ваша широта может колебаться между +/- 90, а ваша долгота между +/- 180, вы можете сделать что-то вроде:

  1. Убедитесь, что широта и долгота имеют знаки.Если положительный, добавьте знак +.
  2. Нулевой знак на передней панели до двух цифр (для широты) и трех цифр (для долготы).9,2 градуса широты превратятся в +09.2.
  3. Нулевая точка на конце, сколько угодно значащих цифр (скажем, шесть).9,2 градуса широты станут +09.200000.
  4. . Преобразуйте +, - и . в стандартную запись.Скажем, P для +, M для - и d для ..Для 9,2 градуса широты вы получите P09d200000.
  5. Объединить широту и долготу.

Затем вы получите строку, которая является обратимой и содержит только буквенно-цифровые символы.Возможно, вам не понадобится что-то такое причудливое.

1 голос
/ 29 августа 2011

Есть ли причина, по которой вы не используете объект для этого?

$lat = 45.18392;
$long = 62.18293;

$pos = array(
    'lat'=>$lat,
    'long'=>$long
);

Это гораздо более читабельно и в качестве бонуса вам не нужно анализировать его позже (может быть легко сериализованохорошо).

1 голос
/ 29 августа 2011

Не можете ли вы конкатенировать строку при возврате?с .'s ...

вернуть $ лат.",".$ Длинный;

0 голосов
/ 29 августа 2011

Используйте класс или простой объект.

класс

class Coord {
   public $lat;
   public $long;

   __construct($lat, $long) {
      $this->lat = $lat;
      $this->long = $long;
   }
}

$coord = new Coord(45.18392, 62.18293);
echo $coord->lat;
echo $coord->long;

обычный объект

$coords = new stdClass();
$coords->lat = 45.18392;
$coords->long = 62.18293;
echo $coord->lat;
echo $coord->long;

Если вам нужно сохранить их в базе данных, вы можете сериализовать объекты в строку, а затем удалить их, как только вы снова извлечете их из базы данных.

http://php.net/manual/en/function.serialize.php

0 голосов
/ 29 августа 2011

То, что вы ищете, действительно существует и не так просто, как md5( $lat.'-'.$long );, так как быть эффективным должно быть сделано до процесса обобщения.

Это называется Geohash . В PHP есть разные реализации. Это хорошо , но Google предлагает несколько вариантов.

0 голосов
/ 29 августа 2011

Почему бы просто не объединить их?

$string = $lat . "-" . $long;

Я имею в виду, если бы вы действительно хотели, я мог бы взять вышеприведенное и использовать md5 на нем:

$string = md5($lat . "-" . $long);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...