根据距离和程度获得经度纬度组合

Ari*_*iks 2 php geolocation

我试图得到一个覆盖某个区域(我的城市)的网格的地理组合.网格为500米*500米.所以我想输入起始长/纬度组合,距离(500米),度数(90或270)并获得下一个长/纬度组合.

我没有意识到数学公式,很难找到解决方案.我找到了一些PHP函数,它们在两个长/纬度组合之间返回距离.

http://www.zipcodeworld.com/samples/distance.php.html http://www.phpro.org/tutorials/Geo-Targetting-With-PHP-And-MySQL.html#3

但是我仍然不能根据我的需要重建这件事(我真的很讨厌cos,罪恶,晒黑).如果有人帮助我,真的很感激.

Ami*_*mit 5

以下是围绕中心点找到四个极值点(纬度,长度)的代码

 <script type="text/javascript">
            function toRad (value) {
                return value * Math.PI / 180;
            }

            function toDeg (value) {
                return value * 180 / Math.PI;
            }
            function computePoint(){                
                var radius = 6371;  //in kms
                var lat1 = checkField(document.getElementById("lat"));
                var lon1 = checkField(document.getElementById("long"));
                var dist = document.getElementById("distance").value;

                dist = typeof(dist)=='number' ? dist : typeof(dist)=='string' && dist.trim()!='' ? +dist : NaN;
                //                alert("Dist "+ dist+" kms");
                var angularDist = dist / radius;
                lat1= toRad(lat1);
                lon1=toRad(lon1);

                var lat2,lon2, angle = 0;

                for(i=1; i<5; i++,angle+=90){                  
                    var brng = toRad(angle);
                    lat2=lon2=0;
                    // second latitude
                    lat2 = Math.asin(Math.sin(lat1) * Math.cos(angularDist) + 
                        Math.cos(lat1) * Math.sin(angularDist) * Math.cos(brng));

                    // second longitude
                    lon2 = lon1 + Math.atan2(Math.sin(brng) * Math.sin(angularDist) *
                        Math.cos(lat1), Math.cos(angularDist) - Math.sin(lat1) * Math.sin(lat2));

                    if (isNaN(lat2) || isNaN(lon2)) alert("Something is null");

                    //                lon2 = (lon2+3*Math.PI) % (2*Math.PI) - Math.PI;  // normalise to -180..+180º
                    lat2 = toDeg(lat2);
                    lon2 = toDeg(lon2);
//                    alert("latitude: "+lat2 +",Longitude "+lon2);
                    document.getElementById("lat"+i).innerHTML=lat2;
                    document.getElementById("long"+i).innerHTML=lon2;
                    document.getElementById("ang"+i).innerHTML=angle;
                }

            }
            function checkField(field){
                var str=field.name
                var latlon1
                latlon=field.value;//parselatlon(field.value)
                if (str.substring(0,3)=="lat") {
                    if (latlon > 90.) {
                        alert ("Latitudes cannot exceed 90 degrees")
                        field.focus()  // Doesn't work!
                        field.select()
                    }
                }
                if (str.substring(0,3)=="long") {
                    if (latlon > 180.) {
                        alert ("Longitudes cannot exceed 180 degrees")
                        field.focus()
                        field.select()      
                    }
                }
                return latlon
            }

            function parselatlon(instr){
                // Parse strings dd.dd dd:mm.mm dd:mm:ss.ss
                var deg,min,sec,colonIndex,degstr,minstr,str
                str=instr
                colonIndex=str.indexOf(":")
                if (colonIndex==-1){ // dd.dd?
                    if (!isPosNumber(str)){
                        badLLFormat(instr)
                        return 0.
                    } else {
                        return parseFloat(str)
                    }
                }
            }
            function isPosNumber(instr){ //integer or float
                str=""+instr // force to string type
                oneDecimal=false
                for (var i=0;i<str.length;i++) {
                    var oneChar=str.charAt(i)
                    if (oneChar=="." && !oneDecimal){
                        oneDecimal=true
                        continue
                    }
                    if (oneChar < "0" || oneChar > "9") {
                        return false
                    }
                }
                return true
            }
            function badLLFormat(str){
                alert(str+ " is an invalid lat/lon format\n"+
                    "Use DD.DD DD:MM.MM or DD:MM:SS.SS")
            }
        </script>
Run Code Online (Sandbox Code Playgroud)

和HTML看起来像....

<body>
        <div>Enter the details </div>
        Latitude  : <input type="text" id="lat" name="lat" value="" /> <br/>
        Longitude : <input type="text" id="long" name="long" value="" /> <br/>
        <!--        Bearing   : <input type="text" id="bearing" name="bearing" value="" placeholder="Enter angle in degrees" /> <br/>-->
        Distance  : <input type="text" id="distance" name="distance" value="" placeholder ="Enter distance in Kms. " /> <br/> 
        <input type="submit" value="Find Points" name="findPts" onclick="computePoint();"/>
        <div><h3><span> <strong>Results Will be displayed here</strong></span></h3></div>            
        <table border="1" style="text-align: center">
            <tr>
                <th>Latitude</th>
                <th>Longitude</th>
                <th>Angle (in degrees) </th>
            </tr>
            <tr>
                <td><label id="lat1" value=""></label> </td>
                <td><label id="long1" value=""></label> </td>
                <td><label id="ang1" value=""></label> </td>
            </tr>
            <tr>
                <td><label id="lat2" value=""></label> </td>
                <td><label id="long2" value=""></label> </td>
                <td><label id="ang2" value=""></label> </td>
            </tr>
            <tr>
                <td><label id="lat3" value=""></label> </td>
                <td><label id="long3" value=""></label> </td>
                <td><label id="ang3" value=""></label> </td>
            </tr>
            <tr>
                <td><label id="lat4" value=""></label> </td>
                <td><label id="long4" value=""></label> </td>
                <td><label id="ang4" value=""></label> </td>
            </tr>
        </table>
    </body>
Run Code Online (Sandbox Code Playgroud)

我在这里通过GPL捐赠我的代码....享受!