谷歌地图,cellid 到位置

发布于 2024-08-07 22:46:20 字数 643 浏览 12 评论 0原文

根据此示例:

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

发送 cellid 信息(MCC、MNC、towerid 等)时可以请求包含范围的 GPS 坐标(经度和纬度)

有人能告诉我请求/发布到该地址的实际参数吗?

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

可能是这样

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

的想知道我们会得到什么回应。

我观察过 OpenCellid 网站,他们首先提供了一些不错的 API,但我也想在谷歌地图中了解这一点(因为他们有更完整的数据库)。

OpenCellID API

According to this sample:

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

It's possible to request a gps coordinate (longitude & latitude) including range when sending cellid information (MCC, MNC, towerid, etc)

Can someone tell me the actual parameter to request/post to this address?

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

It could be something like this

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

And i would like to know what response we would get.

I have observe OpenCellid website and they provide some nice API to begin with, but i want to know about that in google map too (since they have more completed database).

OpenCellID API

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(5

傾城如夢未必闌珊 2024-08-14 22:46:20

这是使用的示例

#!/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)

Here is example for work with

#!/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)
月寒剑心 2024-08-14 22:46:20

您可以使用 Firefox 使用的 Google Location API(示例参见 http:// /www.mozilla.com/en-US/firefox/geolocation/ ),其网址为 www.google.com/loc/json/。事实上,这是基于 JSON 的 Web 服务和一个最小的 Perl 示例,如下所示:

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;
}

请记住,Google 尚未正式开放此 API 用于其他用途...

You could use the Google Location API which is used by Firefox (Example see at http://www.mozilla.com/en-US/firefox/geolocation/ ) which has the url www.google.com/loc/json/. In fact this is JSON based webservice and a minimal Perl Example Look like this:

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;
}

Please keep in mind that Google has not officially opened this API for other uses...

哭泣的笑容 2024-08-14 22:46:20

Google 位置 API 的新位置如下:
https://developers.google.com/maps/documentation/geolocation/intro

使用此 API,您可以从 Cell 信息(cellid、mcc、mnc 和 lac)检索位置

The new place for the Google location API is the following :
https://developers.google.com/maps/documentation/geolocation/intro

With this API, you can retrieve a location from Cell information (cellid, mcc, mnc, and lac)

最佳男配角 2024-08-14 22:46:20

基于 GeolocationAPI,以下是我的代码的一些部分:

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;
}

对象 GsmParams 只是一个包含 GSM 参数 MCC、MNC、LAC、CID 的 Java bean。我认为你可以轻松创建一个相同的类。

建立连接后,您可以调用 conn.getInputStream() 并从 Google 地图获取结果。然后使用 JsonReader 解析数据...

Base on GeolocationAPI, here are some parts of my 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;
}

The object GsmParams is just a Java bean containing GSM parameters MCC, MNC, LAC, CID. I think you can create a same class easily.

After getting connection, you can call conn.getInputStream() and get results from Google Maps. Then use JsonReader to parse data...

囚你心 2024-08-14 22:46:20

正如其他线程中所述,还请查看 https: //labs.ericsson.com/apis/mobile-location/documentation/cell-id-look-up-api 用于免费的小区 ID 数据库,用于从 cellid、mcc、mnc 和 lac 获取坐标。

As noted in other threads also check out https://labs.ericsson.com/apis/mobile-location/documentation/cell-id-look-up-api for a free cell-ID database to get coordinates from cellid, mcc, mnc, and lac .

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文