关于定位服务这一块的知识。

本文介绍了两种网页定位技术:一是利用浏览器自带方法快速获取经纬度信息,但兼容性受限;二是使用百度API实现全平台兼容的位置服务。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

1.通过浏览器自带的方法定位

ps:该方法好像不太支持iOS。

<!DOCTYPE html>
<html>
<head>
    <title>get_position</title>
    <meta charset="utf-8">
</head>
<body>
获取页面的定位。
<script type="text/javascript">
    navigator.geolocation.getCurrentPosition(
        function($position){
            alert('经度:' + $position.coords.longitude + '\n'+'纬度 :' + $position.coords.latitude + '\n');
            locationHandle($position.coords.longitude, $position.coords.latitude);
        }, function ($err) {
            // alert($err);
            console.log($err);
            locationHandle(113.262, 23.154);//测试ip地址
        }, {
            enableHighAcuracy: true,
            timeout: 5000,
            maximumAge: 5000
        }
    );
</script>
</body>
</html>

总的来说,很ok 通过ip地址就可以直接获取用户的经纬度等信息。
优点:快;
缺点:兼容性不优秀。iPhone的 iOS10 就关闭了http的 webkit,当然如果你服务器用的https还是没有影响的

2. 通过百度api获取定位

完全兼容;

java

import java.io.BufferedReader;
import java.io.IOException;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.Reader;
import java.net.URL;
import java.nio.charset.Charset;
import org.json.JSONException;
import org.json.JSONObject;

public class test_ {
     private static String readAll(Reader rd) throws IOException {
            StringBuilder sb = new StringBuilder();
            int cp;
            while ((cp = rd.read()) != -1) {
              sb.append((char) cp);
            }
            return sb.toString();
          }
          public static JSONObject readJsonFromUrl(String url) throws IOException, JSONException {
            InputStream is = new URL(url).openStream();
            try {
              BufferedReader rd = new BufferedReader(new InputStreamReader(is, Charset.forName("UTF-8")));
              String jsonText = readAll(rd);
              JSONObject json = new JSONObject(jsonText);
              return json;
            } finally {
              is.close();
             // System.out.println("同时 从这里也能看出 即便return了,仍然会执行finally的!");
            }
          }
          public static void main(String[] args) throws IOException, JSONException {
           //这里调用百度的ip定位api服务 详见 http://api.map.baidu.com/lbsapi/cloud/ip-location-api.htm
            JSONObject json = readJsonFromUrl("http://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=117.136.41.34");
            System.out.println(json.toString());
            System.out.println(((JSONObject) json.get("content")).get("address"));
          }
}

php

<?php

header('Content-Type: text/html; charset=utf-8; text/json');

function https_post ($url, $data) {
 $ch=curl_init();

 curl_setopt($ch, CURLOPT_URL, $url);
 curl_setopt($ch, CURLOPT_HTTPHEADER, $header);
 curl_setopt($ch, CURLOPT_POST, 1);
 curl_setopt($ch, CURLOPT_POSTFIELDS, $data);
 curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
 curl_setopt($ch, CURLOPT_HEADER, 0);
 $respon=curl_exec($ch);
 curl_close($ch);

 return $respon;
}
    $url =     "http://api.map.baidu.com/location/ip?ak=F454f8a5efe5e577997931cc01de3974&ip=61.140.246.4";

    $result = https_post($url,null);
    echo $result;

    $json_data = json_decode($result,true);


    echo "<br \>".$json_data['content']['point']['x']."<br \>";
    echo $json_data['content']['point']['y'];

?>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

自在如风。

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值