Как рассчитать расстояние между двумя почтовыми индексами? - PullRequest
0 голосов
/ 12 сентября 2018

У меня есть список почтовых индексов США, и я должен рассчитать расстояние между всеми точками почтовых индексов.Это длинный список из 6 000 ZIP, у каждого объекта есть ZIP, Город, Штат, Лат, Длинный, Площадь и Население.

Итак, я должен вычислить расстояние между всеми точками, т.е.6000C2 комбинаций.

Вот пример моих данных

enter image description here

Я пробовал это в SAS, но это слишком медленно и неэффективноследовательно, я ищу способ использования Python или R.

Любые выводы будут оценены.

Ответы [ 3 ]

0 голосов
/ 18 сентября 2018

R решение

#sample data: first three rows of data provided
df <- data.frame( zip = c( "00501", "00544", "00601" ),
                  longitude = c( -73.045075, -73.045147, -66.750909 ),
                  latitude = c( 40.816799, 40.817225, 18.181189 ),
                  stringsAsFactors = FALSE )

library( sf ) 

#create a spatial data.frame
spdf <- st_as_sf( x = df, 
                  coords = c( "longitude", "latitude"), 
                  crs = "+proj=longlat +datum=WGS84" )

#create the distance matrix (in meters), round to 0 decimals
m <- round( st_distance( spdf ), digits = 0 )

#set row and column names of matrix
colnames( m ) <- df$zip
rownames( m ) <- df$zip

#show distance matrix in meters
m 

# Units: m
#         00501   00544   00601
# 00501       0      48 2580481
# 00544      48       0 2580528
# 00601 2580481 2580528       0
0 голосов
/ 12 августа 2019

Python Solution

Если у вас есть соответствующие широты и долготы для почтовых индексов, вы можете напрямую рассчитать расстояние между ними, используя формулу Haversine, используя библиотеку 'mpu', которая определяет расстояние по большому кругу между двумя точками на сфере.

Пример кода:

import mpu

zip_00501 =(40.817923,-73.045317)
zip_00544 =(40.788827,-73.039405)

dist =round(mpu.haversine_distance(zip_00501,zip_00544),2)
print(dist)

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

3.27

PS. Если у вас нет соответствующих координат для почтовых индексов, вы можете получить их, используя модуль 'SearchEngine' из библиотеки 'uszipcode' (только для почтовых индексов США)

from uszipcode import SearchEngine
#for extensive list of zipcodes, set simple_zipcode =False
search = SearchEngine(simple_zipcode=True)

zip1 = search.by_zipcode('92708')
lat1 =zip1.lat
long1 =zip1.lng

zip2 =search.by_zipcode('53404')
lat2 =zip2.lat
long2 =zip2.lng

mpu.haversine_distance((lat1,long1),(lat2,long2))

Надеюсь, это поможет !!

0 голосов
/ 12 сентября 2018

В SAS используйте функцию GEODIST .

Функция GEODIST

Возвращает геодезическое расстояние между двумя координатами широты и долготы.
...
Синтаксис

GEODIST(latitude-1, longitude-1, latitude-2, longitude-2 <, options>)

...