Geo Location API and finding user within a radius

前端 未结 2 1633
借酒劲吻你
借酒劲吻你 2021-01-15 15:42

I have a Java application and I would like to find out the location of a visitor. The API would give me a the zip code of visitor and then based on that zip code, I will fin

2条回答
  •  难免孤独
    2021-01-15 16:37

    I could not find any service which offers API . After much research i found that you will have to download zip codes along with their latitude and longitude positions into a table. Then calculate co ordinates within the radius you want to search. This is the website which helped me a lot. http://www.dougv.com/2009/03/27/getting-all-zip-codes-in-a-given-radius-from-a-known-point-zip-code-via-php-and-mysql/

    Here is the calculation in java if you really if you do not want to work with php

    //this you will get by querying the database against the zip code Double latitude = Double.parseDouble(zipCode.getLatitude()); Double longitude = Double.parseDouble(zipCode.getLongitude());

        Double latN =Math.asin(
                Math.sin(Math.toRadians(latitude)) * Math.cos(distance/radius) + 
                Math.cos(Math.toRadians(latitude)) * Math.sin(distance/radius) * Math.cos(Math.toRadians(0)));
    
    
        Double latS =Math.asin(
                Math.sin(Math.toRadians(latitude)) * Math.cos(distance/radius) + 
                Math.cos(Math.toRadians(latitude)) * Math.sin(distance/radius) * Math.cos(Math.toRadians(180)));
    
    
        Double longE = Math.toRadians(longitude) + 
                        Math.atan2(
                                Math.sin(Math.toRadians(90)) * Math.sin(distance/radius)* Math.cos(Math.toRadians(latitude)) 
                , Math.cos(Math.toRadians(distance/radius)) - Math.sin(Math.toRadians(latitude))* Math.sin(Math.toRadians(latN)) );
    
        Double longW = Math.toRadians(longitude) + 
        Math.atan2(
                        Math.sin(Math.toRadians(270)) * Math.sin(distance/radius)* Math.cos(Math.toRadians(latitude)) 
                    , Math.cos(Math.toRadians(distance/radius)) - Math.sin(Math.toRadians(latitude))* Math.sin(Math.toRadians(latN)) );
    
        System.out.println("Latutude N "+Math.toDegrees(latN) +" Latitide S "+Math.toDegrees(latS) +">>> Longitude E "+Math.toDegrees(longE) +" Longitude W "+Math.toDegrees(longW));
    

提交回复
热议问题