精华内容
下载资源
问答
  • 可以在官网的 http://www.thinkphp.cn/extend/223.html下载IP定位扩展类库,或者下载扩展包( http://www.thinkphp.cn/down/253.html)里面也已经包含该扩展类了。如果是单独下载的上传类库,把解压后的IpLocation....
  • 首先需要在高德开放平台注册一个用户,并申请一个key和你的项目相关联,地址:https://lbs.amap.com/登录后进入:控制台→应用管理→我的应用→创建新应用→添加key(底下附上流程)    应用名称随便填写,符合...
  • IP定位是用于通过查询和绘制ipv4和ipv6地址的地理信息的工具。 内置 发展 使用docker-compose配置开发环境。 为了在本地运行iplocate: 配置环境: 将dev.example.env文件复制到名为.env的新文件中: cp example....
  • 不错的离线IP地址定位

    千次阅读 2020-07-17 08:56:38
    ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java,php,c,python,nodejs,golang,c#等查询绑定和Binary,B树,内存三种查询算法。 Ip2region特性 99.9%准确率 数据...

    项目地址

    gitee:https://gitee.com/lionsoul/ip2region

    Ip2region是什么?

    ip2region - 准确率99.9%的离线IP地址定位库,0.0x毫秒级查询,ip2region.db数据库只有数MB,提供了java,php,c,python,nodejs,golang,c#等查询绑定和Binary,B树,内存三种查询算法。

    Ip2region特性

    99.9%准确率

    数据聚合了一些知名ip到地名查询提供商的数据,这些是他们官方的的准确率,经测试着实比经典的纯真IP定位准确一些。
    ip2region的数据聚合自以下服务商的开放API或者数据(升级程序每秒请求次数2到4次):
    01, >80%, 淘宝IP地址库, http://ip.taobao.com/
    02, ≈10%, GeoIP, https://geoip.com/
    03, ≈2%, 纯真IP库, http://www.cz88.net/
    **备注:**如果上述开放API或者数据都不给开放数据时ip2region将停止数据的更新服务。

    标准化的数据格式

    每条ip数据段都固定了格式:

    _城市Id|国家|区域|省份|城市|ISP_
    

    只有中国的数据精确到了城市,其他国家有部分数据只能定位到国家,后前的选项全部是0,已经包含了全部你能查到的大大小小的国家(请忽略前面的城市Id,个人项目需求)。

    体积小

    包含了全部的IP,生成的数据库文件ip2region.db只有几MB,最小的版本只有1.5MB,随着数据的详细度增加数据库的大小也慢慢增大,目前还没超过8MB。

    查询速度快

    全部的查询客户端单次查询都在0.x毫秒级别,内置了三种查询算法

    1. memory算法:整个数据库全部载入内存,单次查询都在0.1x毫秒内,C语言的客户端单次查询在0.00x毫秒级别。
    2. binary算法:基于二分查找,基于ip2region.db文件,不需要载入内存,单次查询在0.x毫秒级别。
    3. b-tree算法:基于btree算法,基于ip2region.db文件,不需要载入内存,单词查询在0.x毫秒级别,比binary算法更快。

    任何客户端b-tree都比binary算法快,当然memory算法固然是最快的!

    多查询客户端的支持

    已经集成的客户端有:java、C#、php、c、python、nodejs、php扩展(php5和php7)、golang、rust、lua、lua_c, nginx。

    binding描述开发状态binary查询耗时b-tree查询耗时memory查询耗时
    cANSC c binding已完成0.0x毫秒0.0x毫秒0.00x毫秒
    c#c# binding已完成0.x毫秒0.x毫秒0.1x毫秒
    golanggolang binding已完成0.x毫秒0.x毫秒0.1x毫秒
    javajava binding已完成0.x毫秒0.x毫秒0.1x毫秒
    lualua实现的binding已完成0.x毫秒0.x毫秒0.x毫秒
    lua_clua的c扩展已完成0.0x毫秒0.0x毫秒0.00x毫秒
    nginxnginx的c扩展已完成0.0x毫秒0.0x毫秒0.00x毫秒
    nodejsnodejs已完成0.x毫秒0.x毫秒0.1x毫秒
    phpphp实现的binding已完成0.x毫秒0.1x毫秒0.1x毫秒
    php5_extphp5的c扩展已完成0.0x毫秒0.0x毫秒0.00x毫秒
    php7_extphp7的c扩展已完成0.0毫秒0.0x毫秒0.00x毫秒
    pythonpython bindng已完成0.x毫秒0.x毫秒0.x毫秒
    rustrust binding已完成0.x毫秒0.x毫秒0.x毫秒

    ip2region快速测试

    请参考每个binding下的README说明去运行cli测试程序,例如C语言的demo运行如下:

    cd binding/c/
    gcc -g -O2 testSearcher.c ip2region.c
    ./a.out ../../data/ip2region.db
    

    会看到如下cli界面:

    initializing  B-tree ... 
    +----------------------------------+
    | ip2region test script            |
    | Author: chenxin619315@gmail.com  |
    | Type 'quit' to exit program      |
    +----------------------------------+
    p2region>> 101.105.35.57
    2163|中国|华南|广东省|深圳市|鹏博士 in 0.02295 millseconds
    

    输入IP地址开始测试,第一次会稍微有点慢,在运行命令后面接入binary,memory来尝试其他算法,建议使用b-tree算法,速度和并发需求的可以使用memory算法,具体集成请参考不同binding下的测试源码。

    ip2region安装

    具体请参考每个binding下的README文档和测试demo,以下是一些可用的快捷安装方式:

    maven仓库地址

    <dependency>
        <groupId>org.lionsoul</groupId>
        <artifactId>ip2region</artifactId>
        <version>1.7.2</version>
    </dependency>
    

    nodejs

    npm install node-ip2region --save
    

    nuget安装

    Install-Package IP2Region
    

    php composer

    # 插件来自:https://github.com/zoujingli/ip2region
    composer require zoujingli/ip2region
    

    ip2region 并发使用

    1. 全部binding的各个search接口都不是线程安全的实现,不同线程可以通过创建不同的查询对象来使用,并发量很大的情况下,binary和b-tree算法可能会打开文件数过多的错误,请修改内核的最大允许打开文件数(fs.file-max=一个更高的值),或者使用持久化的memory算法。
    2. memorySearch接口,在发布对象前进行一次预查询(本质上是把ip2region.db文件加载到内存),可以安全用于多线程环境。

    ip2region.db的生成

    从1.8版本开始,ip2region开源了ip2region.db生成程序的java实现,提供了ant编译支持,编译后会得到以下提到的dbMaker-{version}.jar,对于需要研究生成程序的或者更改自定义生成配置的请参考${ip2region_root}/maker/java内的java源码。

    从ip2region 1.2.2版本开始里面提交了一个dbMaker-{version}.jar的可以执行jar文件,用它来完成这个工作:

    1. 确保你安装好了java环境(不玩Java的童鞋就自己谷歌找找拉,临时用一用,几分钟的事情)
    2. cd到${ip2region_root}/maker/java,然后运行如下命令:
    java -jar dbMaker-{version}.jar -src 文本数据文件 -region 地域csv文件 [-dst 生成的ip2region.db文件的目录]
    
    # 文本数据文件:db文件的原始文本数据文件路径,自带的ip2region.db文件就是/data/ip.merge.txt生成而来的,你可以换成自己的或者更改/data/ip.merge.txt重新生成
    # 地域csv文件:该文件目的是方便配置ip2region进行数据关系的存储,得到的数据包含一个city_id,这个直接使用/data/origin/global_region.csv文件即可
    # ip2region.db文件的目录:是可选参数,没有指定的话会在当前目录生成一份./data/ip2region.db文件
    
    1. 获取生成的ip2region.db文件覆盖原来的ip2region.db文件即可
    2. 默认的ip2region.db文件生成命令:
    cd ${ip2region_root}/java/
    java -jar dbMaker-1.2.2.jar -src ./data/ip.merge.txt -region ./data/global_region.csv
    
    # 会看到一大片的输出
    
    展开全文
  • C模拟页式地址定位

    2020-12-23 21:58:04
    库导入和宏定义 #include <...创建进程结构体存放进程的大小以及进程的页数和页表数 /* 创建进程结构体存放进程的大小以及进程的页数和页表数 program_size 进程的大小(MB) program_paper_numbers 进.
    1. 库导入和宏定义
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define u32 				int
    #define u8  				char
    #define f32					float
    
    1. 创建进程结构体存放进程的大小以及进程的页数和页表数
    /*
    	创建进程结构体存放进程的大小以及进程的页数和页表数
    	program_size 进程的大小(MB)
    	program_paper_numbers 进程的占用的页数
    	program_paper_table_numbers 进程所需要的页表数量
    */
    struct program_ {
    	f32 program_size;
    	u32  program_paper_numbers;
    	u32  program_paper_table_numbers;
    	u32* physics_block;
    };
    
    1. 主函数
    int main(int argc, char** argv)
    {
    	//if (argc != 4)
    	//{
    	//	printf("parameter error");
    	//	return 1;
    	//}
    
    	//struct program_ program_t;
    	页的大小(KB)
    	//u32 paper_size = atoi(argv[1]);
    	页表可以存放页的数量 
    	//u32 paper_table_size = atoi(argv[2]);
    	进程大小(MB) 
    	//program_t.program_size = atoi(argv[3]);
    
    	struct program_ program_t;
    	u32 paper_size;
    	u32 paper_table_size;
    	program_t.program_size;
    	
    	printf("页的大小 : ");
    	scanf("%d" , &paper_size);
    	printf("\n页表可以存放的页数 : ");
    	scanf("%d" , &paper_table_size);
    	printf("\n程序的大小(MB) : ");
    	scanf("%f" , &program_t.program_size);
    	
    	//计算为进程有多少页
    	program_t.program_paper_numbers = (int)(program_t.program_size * 1024 / paper_size);
    	//如果有
    	if ((int)(program_t.program_size) / 1024 % paper_size != 0)
    		program_t.program_paper_numbers++;
    	//计算需要几个页表
    	program_t.program_paper_table_numbers = program_t.program_paper_numbers / paper_table_size;
    	if (program_t.program_paper_numbers % paper_table_size != 0)
    		program_t.program_paper_table_numbers++;
    	//生成每个页所对应的物理块
    	program_t.physics_block = (u32*)malloc(sizeof(u32) * program_t.program_paper_numbers);
    	srand((unsigned)time(NULL));
    	for (int i = 0; i < program_t.program_paper_numbers; ++i)
    		*(program_t.physics_block + i) = rand() % (program_t.program_paper_numbers - 1);
    
    
    	u32 get_user_input = -1;
    	u32 logical_addr = 0;
    	while (1)
    	{
    		//打印程序的大小(KB)
    		printf("1.print program size\n");
    		//打印程序所占的页数
    		printf("2.print program paper numbers\n");
    		//打印程序所占的页表数
    		printf("3.print program papaer table numbers\n");
    		//打印指令的逻辑地址所对应的物理地址
    		printf("4.print logic addr to physics addr\n");
    		//退出
    		printf("0.exit\n");
    		//Sleep(1000);
    		scanf("%d", &get_user_input);
    		switch (get_user_input)
    		{
    		case 1:
    			printf("program size : %d\n", (int)(program_t.program_size * 1024));
    			break;
    		case 2:
    			printf("program paper number : %d\n", program_t.program_paper_numbers);
    			break;
    		case 3:
    			printf("program paper table number : %d\n", program_t.program_paper_table_numbers);
    			break;
    		case 4:
    			printf("input:");
    			scanf_s("%d", &logical_addr);
    			if (logical_addr / paper_size > program_t.program_paper_numbers)
    			{
    				printf("Crossing the line!\n");
    				break;
    			}
    			if (logical_addr % paper_size * 1024 > paper_size * 1024)
    			{
    				printf("Crossing the line!\n");
    				break;
    			}
    			printf("logic addr to paper number : %d \nlogic addr to physics block : %d\nlogicac addr to physics addr : %d\n", \
    				logical_addr / (paper_size * 1024), *(program_t.physics_block + (logical_addr / (paper_size * 1024))), \
    				* (program_t.physics_block + (logical_addr / (paper_size * 1024))) * paper_size * 1024 + logical_addr % (paper_size * 1024));
    			break;
    		case 0:
    			return 0;
    			break;
    		default:
    			break;
    		}
    	}
    
    	return 0;
    }
    
    展开全文
  • 去百度创建应用,获取到AK,下载定位SDK,把里面的jar包添加到libs下。其他os文件就放在main下新建的jniLilbs里,如图: 2.代码贴出 package com.jin.baidudemo; import android.Manifest; import android....

    应用场景:实现APP的网络定位功能

    1.集成SDK

    去百度创建应用,获取到AK,下载定位SDK,把里面的jar包添加到libs下。其他os文件就放在main下新建的jniLilbs里,如图:

    2.代码贴出

    package com.jin.baidudemo;
    
    import android.Manifest;
    import android.content.pm.PackageManager;
    import android.support.annotation.NonNull;
    import android.support.v4.app.ActivityCompat;
    import android.support.v4.content.ContextCompat;
    import android.support.v7.app.AppCompatActivity;
    import android.os.Bundle;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.baidu.location.BDAbstractLocationListener;
    import com.baidu.location.BDLocation;
    import com.baidu.location.LocationClient;
    import com.baidu.location.LocationClientOption;
    
    import java.util.ArrayList;
    import java.util.List;
    
    
    public class MainActivity extends AppCompatActivity {
    
        public LocationClient mLocationClient = null;
        private MyLocationListener myListener = new MyLocationListener();
    
        TextView tv_location;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
    
            tv_location = (TextView) findViewById(R.id.tv_location);
    
            //声明LocationClient类
            mLocationClient = new LocationClient(getApplicationContext());
    
            //注册监听函数
            mLocationClient.registerLocationListener(myListener);
    
            init();  // 初始化配置
    
            //存放权限的集合
            List<String> permissionList=new ArrayList<>();
            //判断是否有权限
            if (ContextCompat.checkSelfPermission(MainActivity.this, Manifest.permission.ACCESS_FINE_LOCATION)!= PackageManager.PERMISSION_GRANTED){
                permissionList.add(Manifest.permission.ACCESS_FINE_LOCATION);
            }
            if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.READ_PHONE_STATE)!=PackageManager.PERMISSION_GRANTED){
                permissionList.add(Manifest.permission.READ_PHONE_STATE);
            }
            if (ContextCompat.checkSelfPermission(MainActivity.this,Manifest.permission.WRITE_EXTERNAL_STORAGE)!=PackageManager.PERMISSION_GRANTED){
                permissionList.add(Manifest.permission.WRITE_EXTERNAL_STORAGE);
            }
            if (!permissionList.isEmpty()){
                String[] permission = permissionList.toArray(new String[permissionList.size()]);
                ActivityCompat.requestPermissions(MainActivity.this,permission,1);
            }else {
                request();
            }
        }
    
        /**
         * 初始化配置
         */
        private void init() {
            LocationClientOption option = new LocationClientOption();
            option.setIsNeedAddress(true);
            mLocationClient.setLocOption(option);
        }
    
        /**
         * 开始请求
         */
        public void request(){
            mLocationClient.start();
        }
    
        /**
         * 百度定位的响应接口
         */
        public class MyLocationListener extends BDAbstractLocationListener {
            @Override
            public void onReceiveLocation(BDLocation location) {
    
                String addr = location.getAddrStr();    //获取详细地址信息
                String country = location.getCountry();    //获取国家
                String province = location.getProvince();    //获取省份
                String city = location.getCity();    //获取城市
                String district = location.getDistrict();    //获取区县
                String street = location.getStreet();    //获取街道信息
                tv_location.setText("address==" + addr + "       国家=" + country + "    省=" + province + "  市=" + city + "    区=" + district + "    街道=" + street);
            }
        }
    
        /**
         * 获取动态权限的回调
         * @param requestCode
         * @param permissions
         * @param grantResults
         */
        @Override
        public void onRequestPermissionsResult(int requestCode, @NonNull String[] permissions, @NonNull int[] grantResults) {
            switch (requestCode){
                case 1:
                    if (grantResults.length>0){
                        for (int results : grantResults){
                            if (results!=PackageManager.PERMISSION_GRANTED){
                                Toast.makeText(MainActivity.this,"必须打开权限才能使用!",Toast.LENGTH_SHORT).show();
                                finish();
                                return;
                            }
                        }
                        request();
                    }else {
                        Toast.makeText(MainActivity.this,"未知错误!!",Toast.LENGTH_SHORT).show();
                        finish();
                    }
                    break;
                    default:break;
            }
        }
    }
    

    3.权限

    <?xml version="1.0" encoding="utf-8"?>
    <manifest xmlns:android="http://schemas.android.com/apk/res/android"
        package="com.jin.baidudemo">
    
        <!-- 这个权限用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_COARSE_LOCATION"></uses-permission>
        <!-- 这个权限用于访问GPS定位-->
        <uses-permission android:name="android.permission.ACCESS_FINE_LOCATION"></uses-permission>
        <!-- 用于访问wifi网络信息,wifi信息会用于进行网络定位-->
        <uses-permission android:name="android.permission.ACCESS_WIFI_STATE"></uses-permission>
        <!-- 获取运营商信息,用于支持提供运营商信息相关的接口-->
        <uses-permission android:name="android.permission.ACCESS_NETWORK_STATE"></uses-permission>
        <!-- 这个权限用于获取wifi的获取权限,wifi信息会用来进行网络定位-->
        <uses-permission android:name="android.permission.CHANGE_WIFI_STATE"></uses-permission>
        <!-- 用于读取手机当前的状态-->
        <uses-permission android:name="android.permission.READ_PHONE_STATE"></uses-permission>
        <!-- 写入扩展存储,向扩展卡写入数据,用于写入离线定位数据-->
        <uses-permission android:name="android.permission.WRITE_EXTERNAL_STORAGE"></uses-permission>
        <!-- 访问网络,网络定位需要上网-->
        <uses-permission android:name="android.permission.INTERNET" />
        <!-- SD卡读取权限,用户写入离线定位数据-->
        <uses-permission android:name="android.permission.MOUNT_UNMOUNT_FILESYSTEMS"></uses-permission>
    
        <application
            android:allowBackup="true"
            android:icon="@mipmap/ic_launcher"
            android:label="@string/app_name"
            android:roundIcon="@mipmap/ic_launcher_round"
            android:supportsRtl="true"
            android:theme="@style/AppTheme">
            <meta-data
                android:name="com.baidu.lbsapi.API_KEY"
                android:value="TrYMeBYEYL0GtRbTLAqNInyhdCgfcw1y" >
            </meta-data>
    
            <activity android:name=".MainActivity">
                <intent-filter>
                    <action android:name="android.intent.action.MAIN" />
    
                    <category android:name="android.intent.category.LAUNCHER" />
                </intent-filter>
            </activity>
    
            <service android:name="com.baidu.location.f" android:enabled="true" android:process=":remote"> </service>
    
        </application>
    
    </manifest>

    4.效果图:

    展开全文
  • 高德地图七:根据地址定位

    千次阅读 2019-02-25 23:24:17
    高德地图七:根据地址定位 实例效果图: 代码实现: layout/activity_main.xml &lt;?xml version="1.0" encoding="utf-8"?&gt; &lt;LinearLayout xmlns:android="...

    高德地图七:根据地址定位

    实例效果图:
    在这里插入图片描述

    代码实现:
    layout/activity_main.xml

    <?xml version="1.0" encoding="utf-8"?>
    <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
        android:orientation="vertical"
        android:layout_width="match_parent"
        android:layout_height="match_parent">
        <LinearLayout
            android:orientation="horizontal"
            android:layout_width="match_parent"
            android:layout_height="wrap_content"
            android:gravity="center_horizontal">
            <TextView
                android:text="地址:"
                android:layout_width="wrap_content"
                android:layout_height="wrap_content"/>
            <!-- 定义输入地址的文本框 -->
            <EditText
                android:id="@+id/address"
                android:inputType="text"
                android:text="沣宏大厦"
                android:textSize="14sp"
                android:layout_width="240dp"
                android:layout_height="wrap_content" />
            <Button
                android:id="@+id/loc"
                android:text="定位"
                android:layout_width="0dp"
                android:layout_height="wrap_content"
                android:layout_weight="4" />
        </LinearLayout>
        <!-- 使用高德地图的提供的MapView -->
        <com.amap.api.maps.MapView
            android:id="@+id/map"
            android:layout_width="match_parent"
            android:layout_height="match_parent" />
    </LinearLayout>
    

    com/example/administrator/MainActivity.java

    package com.example.administrator;
    
    import android.app.Activity;
    import android.os.Bundle;
    import android.view.View;
    import android.widget.Button;
    import android.widget.TextView;
    import android.widget.Toast;
    
    import com.amap.api.maps.AMap;
    import com.amap.api.maps.CameraUpdate;
    import com.amap.api.maps.CameraUpdateFactory;
    import com.amap.api.maps.MapView;
    import com.amap.api.maps.model.BitmapDescriptorFactory;
    import com.amap.api.maps.model.CircleOptions;
    import com.amap.api.maps.model.GroundOverlayOptions;
    import com.amap.api.maps.model.LatLng;
    import com.amap.api.services.core.LatLonPoint;
    import com.amap.api.services.geocoder.GeocodeAddress;
    import com.amap.api.services.geocoder.GeocodeQuery;
    import com.amap.api.services.geocoder.GeocodeResult;
    import com.amap.api.services.geocoder.GeocodeSearch;
    import com.amap.api.services.geocoder.RegeocodeResult;
    
    public class MainActivity extends Activity implements GeocodeSearch.OnGeocodeSearchListener {
        private MapView mapView;
        private AMap aMap;
    
        @Override
        protected void onCreate(Bundle savedInstanceState) {
            super.onCreate(savedInstanceState);
            setContentView(R.layout.activity_main);
            mapView = (MapView) findViewById(R.id.map);
            // 必须回调MapView的onCreate()方法
            mapView.onCreate(savedInstanceState);
            init();
            Button bn = (Button) findViewById(R.id.loc);
            final TextView addrTv = (TextView) findViewById(R.id.address);
            bn.setOnClickListener(new View.OnClickListener() {
                @Override
                public void onClick(View v) {
                    String addr = addrTv.getText().toString();
                    if (addr.equals("")) {
                        Toast.makeText(MainActivity.this, "请输入有效的地址", Toast.LENGTH_LONG).show();
                    } else {
                        GeocodeSearch search = new GeocodeSearch(MainActivity.this);
                        search.setOnGeocodeSearchListener(MainActivity.this);
                        GeocodeQuery query = new GeocodeQuery(addr, "");//空表示全国
                        // 根据地址执行异步地址解析
                        search.getFromLocationNameAsyn(query);  // ①
                    }
                }
            });
        }
    
        // 初始化AMap对象
        private void init() {
            if (aMap == null) {
                aMap = mapView.getMap();
                // 创建一个设置放大级别的CameraUpdate
                CameraUpdate cu = CameraUpdateFactory.zoomTo(16);
                // 设置地图的默认放大级别
                aMap.moveCamera(cu);
            }
        }
    
        @Override
        protected void onResume() {
            super.onResume();
            // 必须回调MapView的onResume()方法
            mapView.onResume();
        }
    
        @Override
        protected void onPause() {
            super.onPause();
            // 必须回调MapView的onPause()方法
            mapView.onPause();
        }
    
        @Override
        protected void onSaveInstanceState(Bundle outState) {
            super.onSaveInstanceState(outState);
            // 必须回调MapView的onSaveInstanceState()方法
            mapView.onSaveInstanceState(outState);
        }
    
        @Override
        protected void onDestroy() {
            super.onDestroy();
            // 必须回调MapView的onDestroy()方法
            mapView.onDestroy();
        }
    
        @Override
        public void onRegeocodeSearched(RegeocodeResult regeocodeResult, int i) {
        }
    
        @Override
        public void onGeocodeSearched(GeocodeResult geocodeResult, int i) {
            // 获取解析得到的第一个地址
            GeocodeAddress geo = geocodeResult.getGeocodeAddressList().get(0);
            // 获取解析得到的经纬度
            LatLonPoint pos = geo.getLatLonPoint();
            LatLng targetPos = new LatLng(pos.getLatitude(), pos.getLongitude());
            // 创建一个设置经纬度的CameraUpdate
            CameraUpdate cu = CameraUpdateFactory.changeLatLng(targetPos);
            // 更新地图的显示区域
            aMap.moveCamera(cu);
            // 创建一个GroundOverlayOptions(用于向地图上添加图片)
            GroundOverlayOptions options = new GroundOverlayOptions()
                    // 设置GroundOverlayOptions包装的图片
                    .image(BitmapDescriptorFactory.fromResource(R.mipmap.ic_launcher)).position(targetPos, 64);
            // 添加图片
            aMap.addGroundOverlay(options);
            // 创建一个CircleOptions(用于向地图上添加圆形)
            CircleOptions cOptions = new CircleOptions().center(targetPos)  // 设置圆心
                    .fillColor(0x80ffff00)  // 设置圆形的填充颜色
                    .radius(80)  // 设置圆形的半径
                    .strokeWidth(1)  // 设置圆形的线条宽度
                    .strokeColor(0xff000000);  // 设置圆形的线条颜色
            aMap.addCircle(cOptions);
        }
    
        private void GroundOverlayOptions() {
        }
    }
    
    展开全文
  • 机制:地址转换-重定位技术

    千次阅读 2018-03-26 17:33:19
    当这个进程的地址空间被放置在内存中时,物理内存可能看起来是什么的一个示例如图15.2所示 在图中,您可以看到操作系统使用物理内存的第一个槽,并且它已经将进程从上面的示例迁移到从物理内存地址32kb开始的槽中...
  • el-input v-model="searchKey" clearable placeholder="请输入搜索地址" @keyup.enter.native="mapSearch"> <el-button slot="append" icon="el-icon-search" @click="mapSearch" /> </el-input> ...
  • 小程序本身有提供API获取定位wx.getLocation(Object object),不过该方法只能获取到经纬度。 百度地图API 1)百度地图开放平台注册账号; 2)然后,创建小程序应用: 3)最后得到ak; 4)相关配置可以查看这里,然后...
  • 在之前的一篇博文《Apollo学习(二): Java客户端使用》中,我简单地总结了Apollo配置中心的java客户端使用方法,其中有几个重要步骤,如确定项目的AppId,设置Meta Server的地址,设置本地缓存路径的地址等。...
  • 前言 在微信小程序中,我们可以通过...以腾讯地图为例,我们可以去腾讯地图开放平台注册一个账号,然后在它的管理后台创建一个密钥(key)。 然后在顶部菜单里面,可以找到WebServiceAPI菜单: 腾讯地图WebServiceAPI
  • 本文讲解如何调用腾讯地图API在小程序中获取定位进行地址解析 注册账号并申请开发者秘钥 申请地址 保存这个好key,小程序调用时需要用到 提交之后进行key设置,启用产品勾选 微信小程序 和 WebserviceAPI (小程序...
  • 通过微信小程序的开发文档,我们可以发现 wx.getLoaction 能够获取到用户所在位置的经纬度,并且通过腾讯地图提供的逆地址解析中可以将经纬度信息还原成城市名称。 在实际开发当中,我们可以分为两个部分,一个是...
  • 百度API--通过ip地址定位

    千次阅读 2019-09-12 17:57:28
    1. 去百度地图开放平台,注册成为地图开放平台...2. 创建应用,获得AK 3. 选择相应文档查看使用方法。 4.进入后查看文档获得url,测试得到json地址 获得的汉字信息是Unicode编码,可以转成中文 ...
  • Android 定位地址,获取经纬度,并转换为中文地址Android 定位地址,获取经纬度,并转换为中文地址第一步,判断应用是否开启了位置定位的权限功能快捷键合理的创建标题,有助于目录的生成如何改变文本的样式插入链接...
  • 如图,选择供应商之后在2的input框中会显示详细的地址,根据后台返回的详细地址地图上定位到具体的经纬度,并且拿到经纬度。 做这个需求之前先去百度地图获取密钥,在index.html中引入百度地图api &lt;!--...
  • 1.全局安装与引用 (1)安装 npm install vue-baidu-map --save (2)全局引用 import BaiduMap from 'vue-baidu-map' Vue.use(BaiduMap, { ak: '4258***************...el-form-item label="详细地址" :required="tr
  • Android Studio实现百度地图定位(显示经纬度和地址) 一、准备工作 1、学会查看官方文档 baiduMap 首先登陆自己的百度账号 依次点击导航栏中–>开发文档–>Android地图SDK–>左侧栏获取密钥–>页面...
  • 2.当我们点击地图的时候进入到第二个界面,实现当前位置的定位,并且检索周边的商家地址,点击后将选中的地址回传,并显示,而我们上传给后台的是经纬度。同时当我们平移地图时我们的列表也会同步刷新(其实就是监听...
  • 本文实例为大家分享了Android实现高德地图显示及定位的具体代码,供大家参考,具体内容如下 先看看效果 1、要实现高德地图的定位,首先要下载高德地图的SDK  下载地址 然后在高德地图官网上登录你注册的账号并且去...
  • 右上角控制台-我的应用-创建新应用-名字信息随便填- 3.服务平台选择:web服务-提交-申请成功 使用高德key: 除了ket,其他和我设置一样就行 在窗口加载事件调用gps gps1.GetGps(); 这样位置信息就赋值给gps字符串了 ...
  • } // #endif 二、逆地址解析 1、腾讯位置服务申请 服务调用前提 KEY 2、引入vue-jsonp 解决腾讯位置服务跨域请求问题 npm install vue-jsonp --save 使用 import VueJsonp from 'vue-jsonp' Vue.use(VueJsonp) 调用...
  • 手机定位是指通过特定的定位技术来获取移动手机或终端用户的位置信息(经纬度坐标),在电子地图上标出被定位对象的位置的技术或服务。定位技术有两种,一种是基于GPS的定位,一种是基于移动运营网的基站的定位。...
  • GIS定位

    千次阅读 2019-02-24 01:50:40
    撰写时间:2019年1月16日星期三...地址进行输入查询内容,并在地图上进行定位出来,如果输入的地址在地图找不到将不会显示,建议输入详细的地址: 下面是完成功能的代码: 首先我们要获取点击事件的ID给Click单击事...
  • 最近做React Native时,需要用到城市定位的功能,React Native中文网的定位部分中也提供了相应的方法。主要用到的方法有: 这里只需要获取到经纬度,城市等信息,持续监听的函数就不需要了。这里使用 ...
  • 【手机定位软件-适合定位小孩,老人,保护家人安全】 下面说一下免费制作手机定位软件的实现方法,需要了解的朋友需要耐心的看完下面的内容,讲解通俗易懂,分几部讲解 第一步:拨打运营商电话,索要固定ip地址 1....
  • 2、创建应用 注册号账号,登录进去之后,进入个人控制台。控制台界面如下: 然后,依次点击应用管理–>我的应用–>创建新应用,如下图所示。 填写应用名称和类型,随便填: 点击创建之后,在“我的应用”里就会...
  • 1.先去腾讯地图开放平台申请一个key 腾讯地图...* 腾讯地图获取当前定位 * 只调用此方法就行 */ Tmap() { that = this; var geolocation = new qq.maps.Geolocation("HFXBZ-NQSWI-ZGQGW-5URX4-WUXCF-VWFUQ", "mapq
  • Android使用百度地图定位(获取当前经纬度和地址信息)

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 295,161
精华内容 118,064
关键字:

怎样创建定位地址