Question

Selon cet exemple:

http://www.codeproject.com/KB/mobile/DeepCast.aspx

Il est possible de demander un coordonnées GPS (longitude et latitude) y compris la gamme lors de l'envoi d'informations CellID (MCC, MNC, towerid, etc)

Quelqu'un peut me dire le paramètre réel de demander / courrier à cette adresse?

http://www.google.com/glm/mmap

Il pourrait être quelque chose comme ça

http://www.google.com/glm/mmap?mcc=xxx&mnc=xxx&towerid=xxx

Et je voudrais savoir quelle réponse nous obtiendrions.

J'observer le site web OpenCellID et ils fournissent une API agréable pour commencer, mais je veux savoir à ce sujet sur la carte google trop (car ils ont plus la base de données terminée).

OpenCellID API

Était-ce utile?

La solution

Voici par exemple pour le travail avec

#!/usr/bin/python

country = 'fr'
#device = 'Sony_Ericsson-K750'
device = "Nokia N95 8Gb"
user_agent = 'Mozilla/4.0 (compatible; MSIE 5.5; Windows NT)'
mmap_url = 'http://www.google.com/glm/mmap'
geo_url = 'http://maps.google.com/maps/geo'

from struct import pack, unpack
from httplib import HTTP
import urllib2

def fetch_latlong_http(query):
    http = HTTP('www.google.com', 80)
    http.putrequest('POST', '/glm/mmap')
    http.putheader('Content-Type', 'application/binary')
    http.putheader('Content-Length', str(len(query)))
    http.endheaders()
    http.send(query)
    code, msg, headers = http.getreply()
    result = http.file.read()
    return result

def fetch_latlong_urllib(query):
    headers = { 'User-Agent' : user_agent }
    req = urllib2.Request(mmap_url, query, headers)
    resp = urllib2.urlopen(req)
    response = resp.read()
    return response

fetch_latlong = fetch_latlong_http

def get_location_by_cell(cid, lac, mnc=0, mcc=0, country='fr'):
    b_string = pack('>hqh2sh13sh5sh3sBiiihiiiiii',
                    21, 0,
                    len(country), country,
                    len(device), device,
                    len('1.3.1'), "1.3.1",
                    len('Web'), "Web",
                    27, 0, 0,
                    3, 0, cid, lac,
                    0, 0, 0, 0)

    bytes = fetch_latlong(b_string)
    (a, b,errorCode, latitude, longitude, c, d, e) = unpack(">hBiiiiih",bytes)
    latitude = latitude / 1000000.0
    longitude = longitude / 1000000.0

    return latitude, longitude

def get_location_by_geo(latitude, longitude):
    url = '%s?q=%s,%s&output=json&oe=utf8' % (geo_url, str(latitude), str(longitude))
    return urllib2.urlopen(url).read()

if __name__ == '__main__':
    print get_location_by_cell(20465, 495, 3, 262)
    print get_location_by_cell(20442, 6015)
    print get_location_by_cell(1085, 24040)
    print get_location_by_geo(40.714224, -73.961452)
    print get_location_by_geo(13.749113, 100.565327)

Autres conseils

Vous pouvez utiliser l'API Google emplacement qui est utilisé par Firefox (voir par exemple http://www.mozilla.com/en-US/firefox/geolocation/ ) qui a la www.google.com/loc/json/ url. En fait c'est webservice base JSON et un minimum Perl exemple ressembler à ceci:

use LWP;

my $ua = LWP::UserAgent->new;
$ua->agent("TestApp/0.1 ");
$ua->env_proxy();

my $req = HTTP::Request->new(POST => 'https://www.google.com/loc/json');

$req->content_type('application/jsonrequest');
$req->content('{"cell_towers": [{"location_area_code": "8721", "mobile_network_code": "01", "cell_id": "7703", "mobile_country_code": "262"}], "version": "1.1.0", "request_address": "true"}');

# Pass request to the user agent and get a response back
my $res = $ua->request($req);

# Check the outcome of the response
if ($res->is_success) {
    print $res->content;
} else {
    print $res->status_line, "\n";
    return undef;
}

S'il vous plaît garder à l'esprit que Google n'a pas ouvert officiellement cette API pour d'autres usages ...

GeolocationAPI , voici quelques parties de mon code:

import java.io.IOException;
import java.io.StringWriter;
import java.net.HttpURLConnection;
import java.net.URL;

//http://code.google.com/p/google-gson/
import com.google.gson.stream.JsonWriter;

...

/**
 * Requests latitude and longitude from Google.
 * 
 * @param gsmParams
 *            {@link GsmParams}
 * @return an {@link HttpURLConnection} containing connection to Google
 *         lat-long data.
 * @throws IOException
 */
public HttpURLConnection requestLatlongFromGoogle(GsmParams gsmParams)
        throws IOException {
    // prepare parameters for POST method
    StringWriter sw = new StringWriter();
    JsonWriter jw = new JsonWriter(sw);
    try {
        jw.beginObject();

        jw.name("host").value("localhost");
        jw.name("version").value("1.1.0");
        jw.name("request_address").value(true);

        jw.name("cell_towers");

        jw.beginArray().beginObject();

        jw.name("cell_id").value(gsmParams.getCid());
        jw.name("location_area_code").value(gsmParams.getLac());
        jw.name("mobile_network_code").value(gsmParams.getMnc());
        jw.name("mobile_country_code").value(gsmParams.getMcc());

        jw.endObject().endArray().endObject();
    } finally {
        try {
            jw.close();
        } catch (IOException ioe) {
        }
        try {
            sw.close();
        } catch (IOException ioe) {
        }
    }
    final String JsonParams = sw.toString();
    final String GoogleLocJsonUrl = "http://www.google.com/loc/json";

    // post request
    URL url = null;
    HttpURLConnection conn = null;
    url = new URL(GoogleLocJsonUrl);
    conn = (HttpURLConnection) url.openConnection();
    conn.setConnectTimeout((int) 30e3);
    conn.setReadTimeout((int) 30e3);

    conn.setDoOutput(true);
    conn.setRequestMethod("POST");
    conn.getOutputStream().write(JsonParams.getBytes());
    conn.getOutputStream().flush();
    conn.getOutputStream().close();
    int resCode = conn.getResponseCode();
    if (resCode == Http_BadRequest || resCode != Http_Ok) {
        throw new IOException(String.format(
                "Response code from Google: %,d", resCode));
    }
    return conn;
}

Le GsmParams objet est juste un bean Java contenant des paramètres GSM MCC, MNC, LAC, CID. Je pense que vous pouvez créer une même classe facilement.

Après avoir obtenu la connexion, vous pouvez appeler conn.getInputStream() et obtenir des résultats de Google Maps. Ensuite, utilisez JsonReader pour analyser les données ...

La nouvelle place pour l'API de localisation de Google est le suivant: https://developers.google.com/maps/documentation/geolocation/intro

Avec cette API, vous pouvez récupérer un emplacement à partir des informations de cellule (CellID, mcc, RNM et lac)

Comme indiqué dans d'autres threads vérifier également https://labs.ericsson.com/apis/mobile-location/documentation/cell-id-look-up-api pour une base de données cellule-ID libre pour obtenir les coordonnées de CellID, mcc, RNM, et lac.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top