关于实现手机定位,通过服务器,再发送给查询者,或指定人

目的

这周六我要出去一趟,确保小伙伴的安全,但我想保证自己的安全,能让别人时刻知道我的具体位置

方案一:通过ip定位

使用 :

1. python2.7

2. pip install geoip2

3. 再去http://dev.maxmind.com/geoip/geoip2/geolite2下载city的db

不足:

ip唯一,子网没办法查到

效果:

这是我手机的ip地址 我在济宁 定位到北京....

源码:

#-*-coding:utf-8-*-
import geoip2.database

reader = geoip2.database.Reader('C:\\study\\location\\GeoLite2-City.mmdb')
#ip = raw_input("输入你要查询的IP:")
response = reader.city('218.92.225.159')# 有多种语言,我们这里主要输出英文和中文print("你查询的IP的地理位置是:")


try:
    print(u"地区:{}({})".format(response.continent.names["es"],
                                       response.continent.names["zh-CN"]))
except:
    print()
try:
   print(u"国家:{}({}) ,简称:{}".format(response.country.name,
                                                        response.country.names["zh-CN"],
                                                        response.country.iso_code))
except:
    print()
try:
    print(u"洲/省:{}({})".format(response.subdivisions.most_specific.name,
                                          response.subdivisions.most_specific.names["zh-CN"]))
except:
    print()
try:
    print(u"城市:{}({})".format(response.city.name, 
                                          response.city.names["zh-CN"]))
except:
    print()
try:
    print(u"经度:{},纬度{}".format(response.location.longitude,
                                            response.location.latitude))
except:
    print()
try:
   print(u"邮编:{}".format(response.postal.code))
except:
    print()

#print(u"时区:{}".format(response.location.time_zone))

方案二:

通过百度api获得当前位置 需要事先知道经纬度 获得一个地图

灵感:

突然想到和同学暑假做的一个安卓,她负责百度定位,当时用的就是百度API,并没有输入经纬度,或许我该去看看百度API的官网了

源码:

<!DOCTYPE html>    
<html>    
<title>HTML5调用百度地图API进行地理定位实例</title>    
    <head>    
        <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />    
        <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=xxx"></script>    
    </head>    
    <body style="margin:50px 10px;">    
        <div id="status" style="text-align: center"></div>    
        <div style="width:600px;height:480px;border:1px solid gray;margin:30px auto" id="container"></div>    

        <script type="text/javascript">    
        //默认地理位置设置为曲师大 
        var x=116.96256,y=35.59329;     
        window.onload = function() {    
            if(navigator.geolocation) {    
                navigator.geolocation.getCurrentPosition(showPosition);  
                document.getElementById("status").innerHTML = "HTML5 Geolocation is supported in your browser.";    
                    // 百度地图API功能    
                    var map = new BMap.Map("container");    
                    var point = new BMap.Point(x,y);    
                    map.centerAndZoom(point,12);    

                    var geolocation = new BMap.Geolocation();    
                    geolocation.getCurrentPosition(function(r){    
                        if(this.getStatus() == BMAP_STATUS_SUCCESS){
                            alert(r.point.latitude);
                            var mk = new BMap.Marker(r.point);    
                            map.addOverlay(mk);    
                            map.panTo(r.point);    
                        }    
                        else {    
                            alert('failed'+this.getStatus());    
                        }            
                    },{enableHighAccuracy: true});    
                return;  
            }    
            alert("你的浏览器不支持获取地理位置!");  
        };    
        function showPosition(position){  
          x=position.coords.latitude;   
          y=position.coords.longitude;    

        }  
        </script> 
    </body>    
</html>

方案三: 网页获取地址 并实时展示地图,将经纬度传到服务器的文件中,地图10分钟左右刷新一次,本来想再写个功能,能让别人查看我的位置,因为太饿了  不想写了

对我来说最大的困难在于 ajax不会,json没接触过,所以浪费在这两个上面的时间也最长

loc.html:

<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
    <style type="text/css">
        body, html,#allmap {width: 100%;height: 100%;overflow: hidden;margin:0;font-family:"微软雅黑";}
    </style>
    <script type="text/javascript" src="http://api.map.baidu.com/api?v=2.0&ak=dKkaAiL0OANV5xG4sCbFpBOdqOhex1jq"></script>
    <title>浏览器定位</title>
</head>
<body>
    <div id="allmap"></div>
    
<!--发现问题 
    1. 百度api定位与web定位的地址不同,如果要在百度地图精准显示,需要经过坐标转换
    2. 先弹出是否允许获得当前坐标 如果不点击 一会自动弹出您的坐标为...  点击之后才弹出 web定位
    3. 搜索过程中出现 django
    4. 将scripts中内容写入body中 有三种方式 学过jsp和document.write()
    5. 精彩文章 https://zhuanlan.zhihu.com/p/24376846
    6. 本来想通过将js数据写入表单 再自动提交表单到后台 现在发现可以直接将js提交后台....
    
-->
</body>
</html>

<script type="text/javascript">
var longitude,latitude;
    navigator.geolocation.getCurrentPosition(function (position) {
                longitude = position.coords.longitude;
                latitude = position.coords.latitude;
                
    });

    // 百度地图API功能
    var map = new BMap.Map("allmap");
    var point = new BMap.Point(longitude,latitude);
    map.centerAndZoom(point,12);

    var geolocation = new BMap.Geolocation();
    geolocation.getCurrentPosition(function(r){
        if(this.getStatus() == BMAP_STATUS_SUCCESS){
            r.point.lng='116.97710470620571';
            r.point.lat='35.60307342340916';
            var mk = new BMap.Marker(r.point);
            map.addOverlay(mk);
            map.panTo(r.point);
            locfun();
        }
        else {
            
        }        
    },{enableHighAccuracy: true})
    function locfun() {
        var xmlhttp;
        var loc = {
            "longitude": longitude,
            "latitude": latitude
            
        };
    if (window.XMLHttpRequest)
    {
        //  IE7+, Firefox, Chrome, Opera, Safari 浏览器执行代码
        xmlhttp=new XMLHttpRequest();
    }
    else
    {
        // IE6, IE5 浏览器执行代码
        xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }
    xmlhttp.onreadystatechange=function()
    {
        if (xmlhttp.readyState===4 && xmlhttp.status===200)
        {
           
        }
    };

    xmlhttp.open("POST","/loc2",true);
    xmlhttp.setRequestHeader("Content-type","application/json");
    // 后面这两部很重要,我看网上很多都是使用xmlhttp.send("username="+username+"&password="+"),这样接收还要解析一番感觉还是直接发送以下格式的好些

    var data_json = JSON.stringify(loc);
    xmlhttp.send(data_json);
}
window.onload = function()
{
setTimeout("window.location.reload()", 500000);
}
</script>

loc_2.py:

# -*- coding: utf-8 -*-
import json
import socket
from flask import Flask
from flask import request
from flask import redirect
from flask import jsonify,render_template
app = Flask(__name__)

@app.route('/loc2' , methods=['GET', 'POST'])
def index():
    if request.method == 'POST':
        a = request.get_data()
        dict1 = json.loads(a)
        f=open("C:\\study\\location\\loc.txt","a+")
        
        f.write(json.dumps(dict1["longitude"])+","+json.dumps(dict1["latitude"]))
        f.write("\n")
        f.close()
        #print(dict1)
        #return render_template('res.html',longitude=json.dumps(dict1["longitude"]),latitude=json.dumps(dict1["latitude"]))
    elif request.method == 'GET':
        a = request.get_data()
        dict1 = json.loads(a)
        f=open("C:\\study\\location\\loc.txt","a+")
        
        f.write(json.dumps(dict1["longitude"])+","+json.dumps(dict1["latitude"]))
        f.write("\n")
        f.close()
        #return render_template('res.html',longitude=json.dumps(dict1["longitude"]),latitude=json.dumps(dict1["latitude"]))
    else:
        return '<h1>no!</h1>'

@app.route('/loc')
def loc():
    return render_template('loca.html')

if __name__ =='__main__':
    hostname = socket.gethostname()
    ip='0.0.0.0'
    app.run( host=ip,port=5000,debug=False )

 

评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值