Нахождение почтовых индексов в определенном радиусе

Иногда, у Вас есть методы, которые воздействуют на его параметры, которые определяют симметричную операцию:

a.f(b); <-> b.f(a);

, Если Вы знаете, b никогда не может быть пустым, можно просто подкачать его. Это является самым полезным для, равняется: Вместо foo.equals("bar"); лучше делают "bar".equals(foo);.

6
задан Chris Bier 7 August 2009 в 20:15
поделиться

3 ответа

Вторая попытка!

Увидев вашу отредактированную формулировку проблемы, я бы посмотрел, как вы присваиваете свои почтовые индексы.

Если ваши почтовые индексы являются целыми числами, может возникнуть множество ошибок. струн. Самая большая проблема в том, что американские почтовые индексы могут начинаться с 0.

Примеры в ziptest.php не подходят, так как почтовые индексы рассматриваются как целые числа. Когда вы пытаетесь описать мой собственный почтовый индекс целым числом:

$zip1 = 02446;

Он интерпретируется PHP как восьмеричное значение 2446. phpZipLocator использует это значение как строку без явного преобразования. Поэтому PHP дает ему десятичное значение восьмеричного числа 2446 в виде строки (1318), которая вообще не является почтовым индексом.

Вместо уведомления о том, что он не нашел почтовый индекс, phpZipLocator выполняет поиск по радиусу всех почтовых индексов. в пределах заданного радиуса чего-то, чего не существует,

1
ответ дан 9 December 2019 в 22:38
поделиться

Значение по умолчанию для радиуса в демонстрационном скрипте для phpZipLocator (ziptest.php) использует 20 миль в качестве радиуса по умолчанию

$radius = 20;
$zipArray = $zipLoc->inradius($zipOne,$radius);

Я предполагаю, что это значение для $ radius все еще присутствует в вашем коде и перезаписывает радиус, который вы хотите использовать. Попробуйте выполнить поиск и замену для $ radius .

Еще лучше просмотрите свой код с помощью отладчика и убедитесь, что для $ radius установлено значение 20, когда вы вызываете inradius () .

0
ответ дан 9 December 2019 в 22:38
поделиться

Следующие приблизительные расчеты расстояния относительно просты, но могут вызывать ошибки расстояния до 10% и более. Эти приблизительные вычисления выполняются с использованием значений широты и долготы в градусах . Первое приближение требует только простых математических функций:

Approximate distance in miles = sqrt(x * x + y * y)

where
      x = 69.1 * (lat2 - lat1)
and   
      y = 53 * (lon2 - lon1)

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

Approximate distance in miles = sqrt(x * x + y * y)

where
      x = 69.1 * (lat2 - lat1)
and   
      y = 69.1 * (lon2 - lon1) * cos(lat1/57.3)

Если вам нужна большая точность, вы должны использовать точное вычисление расстояния. Точный расчет расстояния требует использования сферической геометрии, поскольку Земля - ​​это сфера. Точный расчет расстояния также требует высокого уровня математической точности с плавающей запятой - около 15 знаков точности (иногда называется «двойной точностью»). Кроме того, триггерная математика функции, используемые при точном вычислении, требуют преобразования широты и значения долготы от градусов до радианов. Чтобы преобразовать широту или долгота от градусов до радианов, разделите значения широты и долготы в этой базе данных на 180 / пи, или 57,2958. Предполагается, что радиус Земли равен быть 6 371 км или 3958,75 миль.

Вы должны включить преобразование градусов в радианы в расчет. Подставляя радианы в градусы, получаем следующее вычисление:

          Exact distance in miles = 3958.75 * arccos[sin(lat1/57.2958) *
                               sin(lat2/57.2958) + 
                               cos(lat1/57.2958) * 
                               cos(lat2/57.2958) * 
                               cos(lon2/57.2958 - lon1/57.2958)]
10
ответ дан 9 December 2019 в 22:38
поделиться
Другие вопросы по тегам:

Похожие вопросы: