600字范文,内容丰富有趣,生活中的好帮手!
600字范文 > 【地图】计算不规则地图的外接矩形 以一个区(南京市玄武区)为例

【地图】计算不规则地图的外接矩形 以一个区(南京市玄武区)为例

时间:2020-10-21 14:13:50

相关推荐

【地图】计算不规则地图的外接矩形 以一个区(南京市玄武区)为例

计算不规则地图区域的外接矩形

前言地理知识代码实现Java实现测试(示例)

前言

此方法适合计算我国(中国)领土范围内的不规则地图的外接矩形,不适用于跨正负经度(东西经)的情况(如果后面祖国开疆拓土的话我再来修改:-))。

地理知识

首先:中国的经纬度范围大约是:纬度3.86至53.55,经度73.66至135.05,不存在跨越正负(东西经南北纬)的问题。其次:由下图可知,在中国地图上任取一个不规则区域,其外接矩形呈现从左向右经度(东经)增加,从下向上纬度(北纬)增加的规则。和我们常用的二维直角坐标系类似。

代码实现

Java实现

结果包装类(计算出的外接矩形的四个点)

@Datapublic class RectanglePosition {//左上角坐标private Position topLeft;//右上角坐标private Position topRight;//左下角坐标private Position bottomLeft;//右下角坐标private Position bottomRight;@Datapublic static class Position {//经度private Double lng;//纬度private Double lat;}}

计算外接矩形

此处入参格式为:118.799774,32.095137;118.799913,32.095085;118.800121,32.094972,即经度1,纬度1;经度2,纬度2;经度3,纬度3;格式

//解析不规则区域外接矩形的四个关键点public static RectanglePosition parseBoundingBox(String pointsStr) {String[] pointStrArr = pointsStr.split(";");Double maxLng = null;Double minLng = null;Double maxLat = null;Double minLat = null;for (String pointStr : pointStrArr) {String[] pointInfo = pointStr.split(",");double lng = Double.parseDouble(pointInfo[0]);double lat = Double.parseDouble(pointInfo[1]);if (maxLng == null) {//初始化为第一个点maxLng = lng;minLng = lng;maxLat = lat;minLat = lat;continue;}if (maxLng < lng) {maxLng = lng;}if (minLng > lng) {minLng = lng;}if (maxLat < lat) {maxLat = lat;}if (minLat > lat) {minLat = lat;}}RectanglePosition result = new RectanglePosition();result.setTopLeft(createPosition(minLng, maxLat));result.setTopRight(createPosition(maxLng, maxLat));result.setBottomRight(createPosition(maxLng, minLat));result.setBottomLeft(createPosition(minLng, minLat));return result;}private static RectanglePosition.Position createPosition(Double lng, Double lat) {RectanglePosition.Position position = new RectanglePosition.Position();position.setLng(lng);position.setLat(lat);return position;}

测试(示例)

玄武区地图

测试代码

此处以南京市玄武区为例,pointStr为玄武区的边缘坐标点集合(边缘点集合可以通过地图厂商提供的接口获取,这里用的是高德地图行政区查询API)。

public static void main(String[] args) {String pointStr = "118.799774,32.095137;118.799913,32.095085;118.800121,32.094972;118.800285,32.094903;118.800372,32.094885;118.800502,32.094891;118.800979,32.095136;118.801178,32.095359;118.801724,32.096046;118.802279,32.096917;118.802461,32.097049;118.803232,32.097271;118.803942,32.097479;118.805511,32.097932;118.8061,32.098089;118.806256,32.098189;118.806528,32.098097;118.806526,32.098074;118.806603,32.098065;118.807738,32.097301;118.809126,32.096173;118.809168,32.096191;118.809208,32.096154;118.810016,32.096276;118.811679,32.096192;118.811671,32.095576;118.816314,32.095529;118.81803,32.095669;118.81855,32.097272;118.818663,32.098821;118.818713,32.099093;118.81894,32.100137;118.819182,32.101339;118.819295,32.102059;118.819321,32.102419;118.819312,32.102695;118.819148,32.103665;118.819651,32.103644;118.823107,32.10338;118.823817,32.103333;118.82425,32.10331;118.82498,32.103378;118.826279,32.103602;118.82644,32.104902;118.828808,32.105172;118.830096,32.105188;118.83139,32.105268;118.831529,32.105347;118.831599,32.105118;118.83149,32.104907;118.832583,32.104433;118.833174,32.104424;118.833867,32.104486;118.834015,32.104128;118.834196,32.104166;118.834429,32.10428;118.83438,32.104585;118.834152,32.104946;118.834233,32.105634;118.834354,32.106133;118.83559,32.106111;118.835568,32.105202;118.835719,32.104919;118.836319,32.104858;118.836662,32.104621;118.837627,32.104694;118.838815,32.10503;118.841681,32.106036;118.842317,32.105268;118.840606,32.104241;118.840785,32.103945;118.840124,32.103671;118.839569,32.103293;118.839648,32.103203;118.83967,32.103023;118.840023,32.102432;118.840051,32.102032;118.839808,32.101782;118.84031,32.101047;118.839,32.100249;118.839069,32.100097;118.838825,32.099866;118.838762,32.099542;118.837769,32.098447;118.836927,32.097772;118.8365,32.097941;118.836384,32.097492;118.835976,32.09706;118.835655,32.09686;118.835397,32.096697;118.835139,32.096533;118.835074,32.096351;118.834667,32.095497;118.833681,32.095679;118.833494,32.095057;118.83381,32.094811;118.833983,32.094624;118.833954,32.094068;118.834462,32.093998;118.835354,32.09491;118.837814,32.097309;118.83953,32.098923;118.84199,32.101073;118.842657,32.101625;118.84303,32.10188;118.843316,32.101964;118.843619,32.101872;118.844259,32.101138;118.844779,32.100432;118.844961,32.099757;118.844909,32.099182;118.844701,32.09887;118.844129,32.098587;118.843714,32.098353;118.843211,32.09838;118.842995,32.098498;118.8427,32.098832;118.842025,32.099319;118.841773,32.099142;118.841765,32.099029;118.842258,32.098403;118.84244,32.098043;118.842371,32.097791;118.842267,32.097588;118.842812,32.097064;118.84354,32.097223;118.843887,32.097222;118.844779,32.097522;118.846217,32.09765;118.847854,32.097554;118.848036,32.097278;118.849041,32.096979;118.849665,32.097101;118.850479,32.097358;118.851025,32.097576;118.851449,32.097708;118.851831,32.097744;118.852394,32.097428;118.852558,32.097346;118.852853,32.097284;118.853468,32.097429;118.853771,32.097576;118.853919,32.097686;118.854317,32.097714;118.854525,32.09765;118.854768,32.097596;118.855313,32.097532;118.856024,32.097326;118.856448,32.097293;118.857272,32.09716;118.858147,32.09677;118.858623,32.096626;118.858849,32.096671;118.858979,32.096812;118.859966,32.098337;118.860339,32.098599;118.861431,32.098828;118.86215,32.099115;118.862999,32.09975;118.863597,32.100098;118.863857,32.100174;118.864525,32.100283;118.865998,32.100548;118.866943,32.100657;118.867437,32.100706;118.867575,32.100704;118.867662,32.100654;118.867731,32.100539;118.867879,32.10009;118.86813,32.099877;118.868684,32.099678;118.869395,32.099673;118.870019,32.099783;118.870903,32.100261;118.871268,32.100564;118.871632,32.100922;118.871744,32.101015;118.872966,32.099766;118.873443,32.099646;118.873894,32.09965;118.874328,32.099747;118.874787,32.100141;118.875272,32.100666;118.875819,32.100947;118.876027,32.100929;118.877032,32.100436;118.877353,32.100412;118.877448,32.100498;118.877544,32.100845;118.877587,32.101804;118.877804,32.102848;118.877986,32.103132;118.878194,32.103255;118.878611,32.103194;118.879339,32.103126;118.879894,32.103086;118.880622,32.103367;118.881107,32.103551;118.881663,32.103581;118.882373,32.103474;118.882981,32.103545;118.883588,32.103646;118.884056,32.103544;118.884515,32.103353;118.885114,32.102992;118.886467,32.102164;118.887004,32.101804;118.887716,32.100864;118.889043,32.098999;118.889832,32.098315;118.890066,32.098189;118.890274,32.09816;118.891089,32.098188;118.891541,32.098066;118.892911,32.097298;118.895323,32.095485;118.897127,32.094562;118.897326,32.094736;118.897474,32.095023;118.899031,32.09558;118.899204,32.095209;118.899356,32.095154;118.900637,32.095322;118.901242,32.094883;118.901463,32.094627;118.902808,32.093236;118.903298,32.093083;118.90345,32.09297;118.903158,32.092152;118.903517,32.091729;118.903709,32.091187;118.904051,32.09066;118.904304,32.090576;118.904489,32.090649;118.904931,32.090253;118.905638,32.090144;118.905894,32.089874;118.906071,32.089506;118.907882,32.088102;118.908173,32.087662;118.908338,32.086518;118.907818,32.086111;118.900921,32.082432;118.90035,32.082356;118.89998,32.082453;118.898876,32.082001;118.898337,32.082024;118.897965,32.082236;118.89766,32.082462;118.897475,32.082446;118.897075,32.082171;118.896744,32.081753;118.896916,32.081369;118.897173,32.081042;118.895286,32.080024;118.894993,32.079939;118.894362,32.079421;118.89373,32.07941;118.893032,32.078817;118.893068,32.07856;118.894169,32.077868;118.893517,32.07657;118.893066,32.074917;118.892962,32.074616;118.892788,32.074388;118.892484,32.074061;118.892155,32.074033;118.891339,32.07407;118.889353,32.074481;118.888659,32.074701;118.888347,32.075023;118.888269,32.075498;118.888052,32.076647;118.887635,32.077002;118.887072,32.07716;118.886169,32.077213;118.88597,32.077307;118.885545,32.077832;118.884964,32.078321;118.884487,32.077948;118.884184,32.076979;118.884028,32.076903;118.885103,32.075518;118.8846,32.075134;118.883776,32.074586;118.883447,32.074452;118.882839,32.074368;118.882068,32.074331;118.881825,32.074249;118.881669,32.074195;118.881608,32.074167;118.881816,32.073915;118.882519,32.072556;118.88388,32.070761;118.883914,32.07065;118.883897,32.070494;118.883828,32.070357;118.883672,32.070277;118.883516,32.070271;118.883273,32.070375;118.883108,32.07049;118.882701,32.070851;118.88264,32.07092;118.882414,32.071214;118.882163,32.071424;118.881738,32.071737;118.881521,32.072026;118.8814,32.07236;118.881409,32.072965;118.88153,32.073351;118.881443,32.073501;118.881305,32.073556;118.88101,32.073577;118.880863,32.073565;118.880706,32.073415;118.880334,32.072691;118.880221,32.072617;118.879779,32.07293;118.879709,32.073293;118.879406,32.073679;118.879102,32.073953;118.878409,32.07421;118.878097,32.074407;118.877958,32.074577;118.877958,32.074705;118.877941,32.074787;118.87775,32.074887;118.877524,32.075055;118.877256,32.075176;118.877004,32.07535;118.876874,32.075383;118.876692,32.075385;118.876458,32.07531;118.876129,32.075126;118.875938,32.074857;118.875921,32.074785;118.875938,32.074675;118.875999,32.074536;118.876163,32.074416;118.876285,32.074359;118.876363,32.074301;118.876371,32.074262;118.876337,32.074225;118.876129,32.074117;118.876076,32.07408;118.876051,32.07398;118.876206,32.073869;118.876449,32.073752;118.876631,32.073528;118.8769,32.073294;118.87703,32.073141;118.877039,32.073018;118.876918,32.072931;118.876761,32.07291;118.876545,32.07291;118.876311,32.072941;118.876206,32.07293;118.876137,32.072889;118.876059,32.07275;118.875946,32.07257;118.875903,32.072401;118.87592,32.072338;118.87599,32.072268;118.876154,32.072181;118.876458,32.072136;118.876709,32.072046;118.87677,32.071957;118.876865,32.071801;118.877039,32.071653;118.877065,32.071638;118.877221,32.071573;118.87742,32.071631;118.87781,32.071837;118.877984,32.071711;118.878114,32.07142;118.8782,32.071381;118.878391,32.071331;118.878694,32.071274;118.878911,32.071165;118.879328,32.070872;118.880784,32.069766;118.881495,32.069344;118.882284,32.068614;118.882466,32.06838;118.882622,32.067972;118.882657,32.067646;118.882813,32.067509;118.883134,32.067407;118.883515,32.067398;118.884261,32.067363;118.884738,32.067276;118.88492,32.067106;118.885076,32.066561;118.885284,32.06581;118.885701,32.06499;118.88629,32.064306;118.886663,32.063809;118.886741,32.063618;118.88675,32.06336;118.886741,32.063206;118.88668,32.063002;118.886576,32.062937;118.886403,32.062909;118.8859,32.062916;118.885848,32.06287;118.885856,32.062712;118.886047,32.062243;118.886125,32.062141;118.886247,32.062102;118.886689,32.062108;118.887166,32.062186;118.887339,32.062209;118.887634,32.061723;118.888059,32.060961;118.887478,32.060961;118.887105,32.060951;118.886758,32.060958;118.886368,32.060991;118.885969,32.060983;118.885856,32.060959;118.885813,32.060922;118.885822,32.06088;118.885926,32.060754;118.885995,32.060629;118.886012,32.060511;118.886021,32.060271;118.886038,32.060147;118.88616,32.060045;118.886429,32.060038;118.886724,32.06001;118.886863,32.059934;118.887131,32.059699;118.887287,32.059463;118.887287,32.059376;118.88727,32.059326;118.887235,32.059311;118.886914,32.059326;118.886715,32.059329;118.886671,32.059309;118.886645,32.059252;118.886645,32.059172;118.886724,32.059049;118.886767,32.058851;118.886819,32.058766;118.886914,32.058734;118.887313,32.058738;118.887946,32.058679;118.888241,32.058631;118.888362,32.058188;118.888389,32.057839;118.888414,32.057539;118.88838,32.056643;118.888362,32.05609;118.888258,32.054747;118.888128,32.053962;118.887911,32.052808;118.887772,32.052185;118.887668,32.051831;118.887312,32.05076;118.887035,32.050884;118.886879,32.050919;118.886697,32.050914;118.886402,32.0508;118.885552,32.050223;118.88517,32.049849;118.884615,32.049315;118.883947,32.048804;118.883253,32.048403;118.882586,32.048052;118.88,32.047844;118.881996,32.047844;118.881588,32.047884;118.880453,32.048764;118.879542,32.049741;118.879135,32.049811;118.877765,32.048914;118.877721,32.048697;118.877843,32.048318;118.878649,32.047739;118.879187,32.047162;118.879256,32.047061;118.879273,32.04704;118.879322,32.046969;118.879337,32.046945;118.879646,32.046502;118.878658,32.046147;118.878051,32.045857;118.877637,32.045552;118.877607,32.045463;118.877607,32.045405;118.877661,32.045332;118.878166,32.043876;118.878171,32.043853;118.878181,32.043832;118.878623,32.041936;118.878943,32.041404;118.879153,32.041388;118.879282,32.041419;118.879403,32.041501;118.88087,32.04;118.880727,32.043557;118.881096,32.04357;118.881376,32.043455;118.882459,32.04329;118.883465,32.043455;118.883529,32.043239;118.883937,32.043354;118.884242,32.042704;118.884357,32.042373;118.884459,32.042385;118.88465,32.041991;118.884866,32.041991;118.884905,32.04157;118.886369,32.041468;118.885731,32.039154;118.88489,32.039359;118.884281,32.039499;118.883848,32.04143;118.882726,32.041124;118.882841,32.040729;118.881652,32.040609;118.881114,32.040424;118.881542,32.039659;118.880956,32.039417;118.881415,32.038781;118.881962,32.037914;118.881542,32.037672;118.88315,32.035602;118.88325,32.035473;118.885524,32.034634;118.886652,32.03446;118.887918,32.034719;118.888421,32.034255;118.889549,32.035083;118.889844,32.034967;118.890703,32.034956;118.89,32.034575;118.893114,32.033436;118.894381,32.032066;118.894919,32.030918;118.895231,32.028177;118.895135,32.027919;118.894484,32.027327;118.893304,32.026209;118.893278,32.025983;118.893356,32.025736;118.893773,32.025544;118.894215,32.025505;118.894534,32.025577;118.894676,32.025616;118.894918,32.025663;118.89517,32.02593;118.895464,32.026407;118.895708,32.026492;118.895838,32.026511;118.896003,32.026496;118.896489,32.026298;118.897296,32.025992;118.897148,32.025788;118.896862,32.025406;118.896584,32.025024;118.896419,32.024814;118.896237,32.024649;118.895716,32.023443;118.895473,32.023192;118.895265,32.02299;118.895048,32.02284;118.893243,32.022123;118.886069,32.019331;118.884959,32.018914;118.884491,32.018428;118.883736,32.017485;118.88064,32.014837;118.880398,32.015067;118.880064,32.015368;118.879435,32.015878;118.878794,32.016191;118.878403,32.016267;118.877684,32.016456;118.876904,32.016856;118.876522,32.017141;118.876271,32.017449;118.876227,32.01769;118.87608,32.01843;118.876046,32.018886;118.876089,32.019227;118.876349,32.020253;118.876505,32.020791;118.876574,32.021116;118.876488,32.021279;118.876271,32.021424;118.876219,32.021448;118.875985,32.021661;118.875621,32.022084;118.875586,32.022297;118.875638,32.023234;118.875422,32.023936;118.875101,32.024209;118.874832,32.024234;118.8742,32.024137;118.873905,32.024133;118.873836,32.024224;118.873818,32.024534;118.873636,32.024597;118.873368,32.024533;118.873056,32.024398;118.871157,32.023221;118.870489,32.02301;118.868986,32.022597;118.867137,32.021958;118.86632,32.021691;118.865532,32.021432;118.864838,32.021145;118.864275,32.022311;118.862551,32.022825;118.862534,32.023563;118.860393,32.023239;118.860263,32.022668;118.859102,32.021744;118.858461,32.021586;118.857412,32.021579;118.856823,32.021806;118.85522,32.023263;118.853271,32.023634;118.853366,32.07;118.8532,32.09;118.85313,32.06;118.852417,32.09;118.85107,32.01;118.850941,32.019122;118.851018,32.018635;118.851003,32.018048;118.850179,32.018227;118.850279,32.018838;118.84919,32.018937;118.848616,32.019098;118.848966,32.08;118.848237,32.02;118.848027,32.019819;118.847775,32.019557;118.846468,32.020004;118.84593,32.019074;118.845705,32.019165;118.845829,32.020363;118.845885,32.0207;118.845984,32.02204;118.845587,32.022449;118.844288,32.02244;118.844246,32.022722;118.844171,32.02304;118.844076,32.02352;118.843968,32.023673;118.843854,32.023833;118.843809,32.02437;118.8439,32.02438;118.843887,32.024548;118.843846,32.024842;118.843854,32.025611;118.843915,32.02606;118.844123,32.026556;118.844357,32.02692;118.844375,32.02717;118.844296,32.02748;118.844175,32.027808;118.843127,32.028797;118.84097,32.029024;118.839039,32.028985;118.838233,32.02932;118.838176,32.029668;118.838072,32.029761;118.838346,32.030698;118.838675,32.031802;118.839074,32.032647;118.839741,32.034919;118.837763,32.035507;118.837721,32.035508;118.837684,32.035531;118.836934,32.035754;118.837298,32.036916;118.837576,32.037438;118.837454,32.038361;118.837922,32.039336;118.838047,32.039947;118.838095,32.039973;118.838059,32.040009;118.838069,32.040058;118.83742,32.040112;118.836219,32.040068;118.8351,32.040002;118.83492,32.039963;118.834671,32.039977;118.831659,32.039807;118.830776,32.039486;118.830066,32.039032;118.829832,32.037989;118.829052,32.034931;118.82874,32.034049;118.828289,32.033797;118.827726,32.033827;118.826929,32.033985;118.826678,32.034174;118.827164,32.038725;118.823008,32.039042;118.822463,32.039061;118.820311,32.039211;118.81852,32.039335;118.817779,32.039387;118.817017,32.039464;118.816098,32.039513;118.815292,32.039577;118.810493,32.039905;118.808769,32.040022;118.807481,32.040125;118.802856,32.040468;118.801043,32.040587;118.799142,32.040741;118.797853,32.040788;118.794839,32.041059;118.794797,32.041062;118.794681,32.041068;118.79458,32.041073;118.793182,32.04115;118.790711,32.041301;118.787717,32.041531;118.784102,32.041767;118.784118,32.043979;118.784114,32.050552;118.784106,32.053925;118.784136,32.053956;118.784136,32.054032;118.784116,32.054032;118.784106,32.054046;118.784104,32.05555;118.784116,32.058212;118.784108,32.059395;118.7841,32.062454;118.784102,32.062758;118.784107,32.064725;118.78408,32.064864;118.784091,32.066431;118.78409,32.069309;118.784085,32.071561;118.784079,32.07379;118.78408,32.07608;118.784086,32.077429;118.784063,32.077471;118.784063,32.077596;118.784091,32.077643;118.784065,32.078843;118.784074,32.081248;118.784074,32.084806;118.784066,32.088778;118.784075,32.089531;118.78404,32.090089;118.783859,32.091148;118.783824,32.091458;118.783919,32.091827;118.784093,32.092269;118.786243,32.091469;118.789026,32.090515;118.79193,32.089132;118.793472,32.088407;118.793854,32.088348;118.795371,32.088359;118.796861,32.088448;118.797217,32.088558;118.797659,32.088907;118.797789,32.089117;118.797624,32.089371;118.796732,32.090724;118.796688,32.091373;118.796827,32.091833;118.797763,32.092283;118.798569,32.092689;118.799037,32.092971;118.799115,32.09324;118.798994,32.094162;118.798899,32.094718;118.798933,32.094887;118.799141,32.094982;118.799774,32.095137";RectanglePosition position = parseBoundingBox(pointStr);System.out.println(JSONUtil.toJsonPrettyStr(position));}

计算结果

{"bottomLeft": {"lng": 118.783824,"lat": 32.014837},"bottomRight": {"lng": 118.908338,"lat": 32.014837},"topRight": {"lng": 118.908338,"lat": 32.106133},"topLeft": {"lng": 118.783824,"lat": 32.106133}}

将结果绘制到地图上(绘制方法,参见:百度JSSDK覆盖物绘制)

完结散花~~~

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。