Aquí es cómo lo hago.
Puede obtener una lista de ciudades, st, códigos postales y sus latitudes y longitudes. (no puedo recordar la parte superior de la cabeza donde conseguimos nuestra)
edición: http://geonames.usgs.gov/domestic/download_data.htm como alguien ha mencionado anteriormente, probablemente trabajar.
A continuación, puede escribir un método para calcular la latitud y la longitud mínimas y máximas en función de un radio, y consultar todas las ciudades entre esas mínimas y máximas. A continuación, recorrer y calcular la distancia y elimine las que no están en el radio
double latitude1 = Double.parseDouble(zipCodes.getLatitude().toString());
double longitude1 = Double.parseDouble(zipCodes.getLongitude().toString());
//Upper reaches of possible boundaries
double upperLatBound = latitude1 + Double.parseDouble(distance)/40.0;
double lowerLatBound = latitude1 - Double.parseDouble(distance)/40.0;
double upperLongBound = longitude1 + Double.parseDouble(distance)/40.0;
double lowerLongBound = longitude1 - Double.parseDouble(distance)/40.0;
//pull back possible matches
SimpleCriteria zipCriteria = new SimpleCriteria();
zipCriteria.isBetween(ZipCodesPeer.LONGITUDE, lowerLongBound, upperLongBound);
zipCriteria.isBetween(ZipCodesPeer.LATITUDE, lowerLatBound, upperLatBound);
List zipList = ZipCodesPeer.doSelect(zipCriteria);
ArrayList acceptList = new ArrayList();
if(zipList != null)
{
for(int i = 0; i < zipList.size(); i++)
{
ZipCodes tempZip = (ZipCodes)zipList.get(i);
double tempLat = new Double(tempZip.getLatitude().toString()).doubleValue();
double tempLon = new Double(tempZip.getLongitude().toString()).doubleValue();
double d = 3963.0 * Math.acos(Math.sin(latitude1 * Math.PI/180) * Math.sin(tempLat * Math.PI/180) + Math.cos(latitude1 * Math.PI/180) * Math.cos(tempLat * Math.PI/180) * Math.cos(tempLon*Math.PI/180 -longitude1 * Math.PI/180));
if(d < Double.parseDouble(distance))
{
acceptList.add(((ZipCodes)zipList.get(i)).getZipCd());
}
}
}
Hay un extracto de mi código, es de esperar que pueda ver lo que está pasando. Empiezo con un ZipCodes (una tabla en mi base de datos), luego retiro posibles coincidencias y finalmente elimino a los que no están en el radio.
Tal vez usted podría editar y dar una mejor definición de "ciudades"? ¿Quiere decir simplemente nombres de lugares o quiere decir centros de población? –
Pruebe esto: http://www.cityradius.com/ Los radios son limitados, pero de todos modos es genial. También acabo de ver esto: http://www.zip-codes.com/free-zip-code-tools.asp#radius –