根据GPS经纬度判断当前所属的市区

这个事情分两步走

1. 拿到行政区划的地理围栏数据

2. 根据GPS定位判断一个点是否落在地理围栏的多边形区域里。

1. 获取行政区划的地理围栏数据可以利用百度API。打开以前我的一个例子在chrome console里输入 
var bdary = new BMap.Boundary();

bdary.get("北京市延庆区", function(res){ //获取行政区域
//这里是用户自己的函数。
var count = res.boundaries.length;
console.debug("length of bounds ="+count)
console.debug(res.boundaries[0])
});

地理围栏信息会被打印在chrome的控制台里, 注意一下, 一般length of bounds是1, 但是也有例外, 比如北京首都国际机场虽然位于顺义区内和朝阳区不交接, 但却是属于朝阳区的行政区划, 这个时候 length of bound就是2

把打印在屏幕上的GPS数组拷贝下来。 接下来找一个判断点是否位于多边形内的算法实现。 组合一下, 功能就实现出来了。


package com.didi.data.dataDocking.service;

 

import java.util.HashMap;

import java.util.Map;

 

public class BeiJinDistrictMap {

static final Map<String, String> mapMap = new HashMap<String, String>();

static final Map<String, double[][]> mapPoints = new HashMap<String, double[][]>();

static {

mapMap.put("110108_haidian_bj", "116.341137, 39.923964;116.339679, 39.94356;116.334715, 39.948162;116.357253, 39.948746;116.358141, 39.956251;116.362253, 39.957521;116.362998, 39.949865;116.378502, 39.954835;116.37692, 39.973552;116.389736, 39.974387;116.387287, 39.993956;116.362761, 40.026109;116.363069, 40.02954;116.357718, 40.032531;116.401464, 40.039194;116.396604, 40.04379;116.397325, 40.047524;116.378543, 40.050829;116.37375, 40.057042;116.379802, 40.060106;116.378836, 40.063911;116.389051, 40.066847;116.386902, 40.07159;116.379795, 40.071643;116.376853, 40.075298;116.369691, 40.074844;116.369768, 40.07191;116.353507, 40.069364;116.349949, 40.061113;116.346675, 40.060861;116.34552, 40.064731;116.335378, 40.06064;116.325006, 40.067249;116.313008, 40.068525;116.310228, 40.066449;116.296905, 40.089609;116.286401, 40.086145;116.280513, 40.097876;116.265798, 40.10745;116.271527, 40.110243;116.269771, 40.117429;116.264818, 40.118596;116.263369, 40.110845;116.246619, 40.114369;116.251428, 40.118582;116.254817, 40.141222;116.239751, 40.142021;116.223719, 40.147867;116.214447, 40.146781;116.209906, 40.167109;116.201798, 40.166439;116.197998, 40.161694;116.190154, 40.164269;116.188151, 40.153554;116.181289, 40.148843;116.176081, 40.148902;116.176031, 40.145915;116.171412, 40.146314;116.176745, 40.143174;116.179721, 40.13387;116.174848, 40.134699;116.177839, 40.130436;116.141183, 40.127954;116.137391, 40.121312;116.120823, 40.121343;116.113567, 40.124048;116.108368, 40.122302;116.10376, 40.127436;116.081711, 40.121954;116.077221, 40.111653;116.063592, 40.103311;116.056474, 40.092332;116.063413, 40.083336;116.071468, 40.079457;116.072308, 40.073843;116.078539, 40.068341;116.075555, 40.058363;116.0821, 40.043526;116.085314, 40.039136;116.092141, 40.037016;116.107208, 40.039888;116.144993, 40.035981;116.155357, 40.028917;116.164319, 40.027556;116.182703, 40.012638;116.179676, 40.007247;116.167804, 40.006381;116.157626, 39.999989;116.16467, 39.990209;116.174553, 39.993657;116.175724, 39.983666;116.185043, 39.988499;116.185431, 39.994544;116.191454, 39.992044;116.192751, 39.976711;116.208046, 39.967038;116.209915, 39.962145;116.225593, 39.94995;116.220405, 39.939699;116.222384, 39.933733;116.213491, 39.930676;116.213391, 39.923814;116.238498, 39.922;116.259497, 39.927929;116.259612, 39.9237;116.25575, 39.921998;116.259455, 39.921458;116.25952, 39.903235;116.301619, 39.90306;116.302701, 39.892937;116.305624, 39.895923;116.313912, 39.896884;116.310609, 39.898681;116.319901, 39.902635;116.341152, 39.902656;116.341137, 39.923964");

mapMap.put("110105_chaoyang1_bj","116.646319, 40.006356;116.641899, 40.010457;116.637789, 40.008115;116.631801, 40.010677;116.634344, 40.014032;116.625897, 40.018101;116.605573, 40.020894;116.583423, 40.03384;116.585263, 40.038949;116.580879, 40.038842;116.583812, 40.035202;116.572502, 40.044509;116.557532, 40.051337;116.552346, 40.056249;116.558534, 40.059865;116.554677, 40.068609;116.550099, 40.065421;116.53681, 40.076275;116.518432, 40.077255;116.506144, 40.086251;116.489979, 40.087645;116.479918, 40.091193;116.47609, 40.095797;116.473365, 40.095842;116.472852, 40.087579;116.468351, 40.08629;116.466889, 40.067011;116.455298, 40.064534;116.431355, 40.070731;116.431517, 40.066402;116.415819, 40.06182;116.412625, 40.05574;116.415001, 40.049137;116.410542, 40.044775;116.401717, 40.042858;116.397325, 40.047524;116.396604, 40.04379;116.401464, 40.039194;116.357718, 40.032531;116.363069, 40.02954;116.362761, 40.026109;116.387287, 39.993956;116.387785, 39.978807;116.400581, 39.979365;116.393903, 39.967204;116.396364, 39.969351;116.414482, 39.96835;116.415299, 39.979667;116.420495, 39.968249;116.431673, 39.968272;116.431655, 39.96543;116.437014, 39.965433;116.43663, 39.956121;116.446594, 39.957907;116.44497, 39.952238;116.454134, 39.950601;116.45024, 39.93446;116.440535, 39.934234;116.442707, 39.908962;116.455132, 39.908642;116.453665, 39.900457;116.457497, 39.896305;116.450797, 39.894688;116.44943, 39.872028;116.451866, 39.868396;116.463979, 39.866301;116.472854, 39.860089;116.466214, 39.853856;116.46466, 39.856262;116.453186, 39.854005;116.453684, 39.847044;116.447524, 39.845285;116.442984, 39.847021;116.437902, 39.83852;116.431615, 39.838691;116.431617, 39.83626;116.446775, 39.835831;116.450671, 39.826127;116.460356, 39.828481;116.469959, 39.819999;116.475494, 39.82014;116.480899, 39.815293;116.491975, 39.818782;116.496314, 39.824938;116.501637, 39.824196;116.50154, 39.821867;116.516491, 39.822714;116.515981, 39.829544;116.520718, 39.835153;116.532584, 39.83575;116.532967, 39.832723;116.541175, 39.83037;116.544843, 39.834524;116.540075, 39.838702;116.549021, 39.835757;116.552721, 39.84116;116.584308, 39.836326;116.589616, 39.829271;116.606644, 39.831094;116.608073, 39.846815;116.613401, 39.851335;116.611039, 39.855961;116.619228, 39.856115;116.633199, 39.866868;116.626724, 39.874698;116.63635, 39.891266;116.634324, 39.896696;116.622549, 39.895733;116.620905, 39.902434;116.628445, 39.908134;116.627765, 39.926694;116.637114, 39.9281;116.631738, 39.936723;116.635922, 39.938225;116.639874, 39.946202;116.636731, 39.95343;116.639218, 39.956666;116.651643, 39.95228;116.647209, 39.987213;116.638861, 39.990305;116.646185, 39.996931;116.650368, 39.996265;116.646319, 40.006356");

mapMap.put("110105_chaoyang2_bj", "116.585946, 40.108489;116.580796, 40.114407;116.588382, 40.070354;116.589296, 40.07539;116.594003, 40.075123;116.599209, 40.04918;116.608066, 40.04793;116.611527, 40.05258;116.606683, 40.056851;116.610901, 40.057342;116.613176, 40.052734;116.615113, 40.06689;116.610807, 40.099895;116.605559, 40.10916;116.606215, 40.099813;116.587888, 40.09704;116.585946, 40.108489");

mapMap.put("110106_fengtai_bj","116.256504, 39.901832;116.247435, 39.900952;116.240275, 39.897855;116.240775, 39.895463;116.234411, 39.89479;116.234483, 39.889278;116.226217, 39.887366;116.224868, 39.882421;116.217259, 39.884172;116.218901, 39.880592;116.214799, 39.880066;116.206242, 39.889109;116.190577, 39.886765;116.173838, 39.895537;116.169036, 39.893538;116.161725, 39.895637;116.157161, 39.890453;116.146718, 39.890631;116.117558, 39.878682;116.11003, 39.879466;116.107895, 39.873363;116.102273, 39.874836;116.093556, 39.871985;116.084896, 39.876347;116.076807, 39.874628;116.073513, 39.872018;116.076684, 39.859606;116.071776, 39.860556;116.06999, 39.857209;116.066515, 39.85984;116.060452, 39.852314;116.064312, 39.848731;116.078763, 39.844895;116.089112, 39.833674;116.091293, 39.838849;116.090487, 39.832231;116.093187, 39.836506;116.095644, 39.835118;116.0946, 39.82529;116.090663, 39.825264;116.095381, 39.823038;116.091005, 39.818077;116.09173, 39.801737;116.097615, 39.788216;116.107431, 39.78888;116.108873, 39.792459;116.110369, 39.78959;116.110568, 39.792665;116.115718, 39.792642;116.115005, 39.795307;116.121125, 39.795265;116.122399, 39.797641;116.126981, 39.796911;116.127687, 39.791932;116.138923, 39.790363;116.137427, 39.788825;116.141971, 39.78709;116.131317, 39.783576;116.129824, 39.786123;116.123971, 39.780286;116.127152, 39.779628;116.127281, 39.776305;116.124423, 39.777118;116.12792, 39.768454;116.128509, 39.772494;116.131038, 39.768706;116.144619, 39.774184;116.145812, 39.770833;116.153328, 39.77254;116.152942, 39.776116;116.166792, 39.77348;116.172405, 39.780018;116.175093, 39.791002;116.190438, 39.790366;116.190902, 39.786516;116.194623, 39.788074;116.206846, 39.783949;116.208419, 39.805525;116.215719, 39.812206;116.214865, 39.817114;116.222484, 39.822667;116.220145, 39.829412;116.234878, 39.831177;116.247313, 39.821725;116.25883, 39.799165;116.265202, 39.803607;116.268574, 39.799022;116.29357, 39.805137;116.29561, 39.8028;116.300383, 39.80406;116.30255, 39.801777;116.297442, 39.799567;116.299128, 39.79707;116.304814, 39.797705;116.313532, 39.776071;116.316446, 39.775618;116.324301, 39.789189;116.328358, 39.789516;116.329653, 39.803931;116.333171, 39.803811;116.334793, 39.80701;116.346976, 39.807642;116.350569, 39.81346;116.36231, 39.811396;116.363526, 39.806492;116.373788, 39.805579;116.373981, 39.790829;116.385112, 39.791699;116.385589, 39.784822;116.397113, 39.787789;116.398612, 39.771406;116.404908, 39.772039;116.402776, 39.793023;116.426144, 39.793452;116.428264, 39.798983;116.435831, 39.800279;116.435096, 39.80971;116.430595, 39.80969;116.42899, 39.815918;116.424621, 39.81538;116.421719, 39.818672;116.416209, 39.817351;116.416286, 39.8225;116.425879, 39.821073;116.424287, 39.828389;116.420636, 39.830117;116.422414, 39.835591;116.426128, 39.832878;116.431615, 39.838691;116.437902, 39.83852;116.442984, 39.847021;116.447524, 39.845285;116.453684, 39.847044;116.453186, 39.854005;116.46466, 39.856262;116.467119, 39.854165;116.471752, 39.856764;116.472532, 39.861387;116.45754, 39.868812;116.451866, 39.868396;116.450089, 39.878013;116.419873, 39.878168;116.423156, 39.873252;116.420505, 39.865369;116.402273, 39.865175;116.397662, 39.871581;116.387944, 39.87347;116.3877, 39.877337;116.358673, 39.87466;116.356864, 39.879846;116.350725, 39.879437;116.349776, 39.881578;116.327912, 39.880918;116.332493, 39.902619;116.319901, 39.902635;116.310609, 39.898681;116.313912, 39.896884;116.305624, 39.895923;116.302701, 39.892937;116.301619, 39.90306;116.256504, 39.901832");

mapMap.put("110115_daxing_bj","116.381464, 39.791614;116.373981, 39.790829;116.373788, 39.805579;116.363526, 39.806492;116.36231, 39.811396;116.350569, 39.81346;116.346976, 39.807642;116.334793, 39.80701;116.333171, 39.803811;116.329653, 39.803931;116.328358, 39.789516;116.324301, 39.789189;116.316446, 39.775618;116.311058, 39.778993;116.304814, 39.797705;116.299128, 39.79707;116.297442, 39.799567;116.30255, 39.801777;116.300383, 39.80406;116.29561, 39.8028;116.29357, 39.805137;116.268574, 39.799022;116.265202, 39.803607;116.257664, 39.798946;116.261125, 39.769293;116.2589, 39.75605;116.250508, 39.747446;116.254304, 39.736976;116.251844, 39.724818;116.236021, 39.713468;116.236438, 39.704961;116.232517, 39.700565;116.235101, 39.695099;116.228525, 39.688562;116.233061, 39.681297;116.223666, 39.657541;116.222425, 39.647618;116.227166, 39.632502;116.225057, 39.614221;116.233313, 39.599622;116.227915, 39.584526;116.245105, 39.556047;116.250727, 39.552413;116.251984, 39.521643;116.258316, 39.516687;116.261105, 39.50889;116.282528, 39.501232;116.285552, 39.497833;116.310498, 39.493163;116.325583, 39.480138;116.332267, 39.468477;116.349029, 39.458592;116.351422, 39.453985;116.371229, 39.453886;116.372291, 39.457582;116.383324, 39.459122;116.394203, 39.456088;116.399532, 39.458963;116.425853, 39.454582;116.429217, 39.449554;116.439309, 39.445717;116.457641, 39.452528;116.462321, 39.46309;116.456546, 39.468347;116.454885, 39.482176;116.44748, 39.492161;116.427339, 39.502878;116.413425, 39.529626;116.425291, 39.528906;116.432281, 39.522346;116.441316, 39.522359;116.446318, 39.524486;116.449053, 39.535027;116.483584, 39.545471;116.484288, 39.555351;116.51236, 39.561538;116.533535, 39.579411;116.530868, 39.603113;116.561077, 39.604456;116.575397, 39.60992;116.574035, 39.615511;116.578352, 39.625892;116.585801, 39.626099;116.585933, 39.629159;116.608882, 39.627922;116.60958, 39.617675;116.618347, 39.614326;116.63956, 39.598435;116.649575, 39.602253;116.65341, 39.612935;116.701393, 39.602494;116.710341, 39.59463;116.735224, 39.599557;116.712803, 39.615639;116.712707, 39.620278;116.732272, 39.622677;116.729067, 39.629092;116.733155, 39.64067;116.72791, 39.643192;116.719037, 39.642614;116.715298, 39.646085;116.70976, 39.663174;116.710236, 39.679719;116.693069, 39.682482;116.675993, 39.68148;116.673469, 39.685993;116.677234, 39.686566;116.676741, 39.693578;116.670488, 39.691879;116.659802, 39.694028;116.652955, 39.705726;116.655871, 39.709855;116.660465, 39.708853;116.660878, 39.713958;116.651277, 39.716906;116.645859, 39.722983;116.645438, 39.730645;116.637961, 39.730287;116.634223, 39.734718;116.625531, 39.732035;116.62283, 39.727838;116.619619, 39.728867;116.612454, 39.724849;116.613074, 39.718513;116.607379, 39.719882;116.607428, 39.715263;116.581503, 39.715533;116.579596, 39.720216;116.55286, 39.72121;116.545338, 39.719243;116.533708, 39.723595;116.535887, 39.726998;116.541676, 39.726222;116.539627, 39.744757;116.546568, 39.74421;116.547969, 39.746464;116.547755, 39.748454;116.534634, 39.7487;116.54035, 39.756615;116.525359, 39.756949;116.529939, 39.766364;116.528427, 39.773925;116.534219, 39.768421;116.547066, 39.767162;116.550335, 39.76952;116.545704, 39.774366;116.554858, 39.775712;116.551247, 39.779949;116.544078, 39.776178;116.537508, 39.78367;116.547537, 39.787008;116.536327, 39.798533;116.543233, 39.802877;116.540702, 39.806449;116.548019, 39.809831;116.545414, 39.820736;116.541229, 39.823766;116.546729, 39.829532;116.532967, 39.832723;116.532584, 39.83575;116.520692, 39.835145;116.515981, 39.829544;116.516491, 39.822714;116.50154, 39.821867;116.501637, 39.824196;116.496314, 39.824938;116.491975, 39.818782;116.480899, 39.815293;116.475494, 39.82014;116.469959, 39.819999;116.460356, 39.828481;116.450671, 39.826127;116.446775, 39.835831;116.427606, 39.836076;116.426128, 39.832878;116.422414, 39.835591;116.420636, 39.830117;116.424287, 39.828389;116.425879, 39.821073;116.416286, 39.8225;116.416209, 39.817351;116.427931, 39.816515;116.430595, 39.80969;116.435096, 39.80971;116.434512, 39.7985;116.428264, 39.798983;116.426144, 39.793452;116.402776, 39.793023;116.404908, 3

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值