OSM地圖中通過中心點和長寬繪制一個矩形

如果需要在地圖中繪制一個矩形嫁盲,例如停車位,長10米烈掠,寬5米羞秤,我們希望在地圖縮放過程中,這個停車位是可以根據(jù)地圖縮放放大縮小的左敌,我使用的辦法是通過停車位的中心點坐標瘾蛋,計算出四個頂點的坐標,然后繪制這個矩形矫限,這樣就可以保證無論怎么縮放和旋轉(zhuǎn)哺哼,這個停車位顯示的大小和角度都是符合實際的佩抹。

實現(xiàn)效果如下

地圖停車位截圖.png
/**
     * 繪制旋轉(zhuǎn)的矩形 傳入該矩形的長寬  中心點的經(jīng)緯度  航向角
     * @param centerLat
     * @param centerLon
     * @param width
     * @param height
     * @param heading
     * @return
     */
    public static  GeoPoint[] calculateCornerCoordinates(double centerLat, double centerLon, double width, double height, double heading) {
        double angle = calculateAngle(width/2,height/2);
        double offsetangle = 360-heading;  //相對于正北方向偏移的角度
        double topLeft = 360-(90-(angle-offsetangle));  //如下圖
        double botomRight = 90+(angle-offsetangle);
        double topRight = 90-angle-offsetangle;
        double botomLeft = 180+ (90-angle-offsetangle);
        double c = Math.sqrt(width * width + height * height);  //矩形對角線的長度
        double[] point1 = MapPointUtil.getEndpoint(centerLat, centerLon, topLeft, c/2);
        double[] point2 = MapPointUtil.getEndpoint(centerLat, centerLon, botomRight, c/2);
        double[] point3 = MapPointUtil.getEndpoint(centerLat, centerLon, topRight, c/2);
        double[] point4 = MapPointUtil.getEndpoint(centerLat, centerLon, botomLeft, c/2);
        double[][] corners = {
                {point1[0],point1[1]},
                {point3[0],point3[1]},
                {point2[0],point2[1]},
                {point4[0],point4[1]}
        };
        GeoPoint[] geoPoints = new GeoPoint[corners.length];
        for (int i = 0; i < corners.length; i++) {
            geoPoints[i] = new GeoPoint(corners[i][0], corners[i][1]);
        }
        return geoPoints;
    }

左上角偏移角度計算,需要注意的是對角線的角度不是矩形的航向角取董,根據(jù)正北方向時的狀態(tài)推算出旋轉(zhuǎn)后的角度棍苹,圖中灰色對角線和紅色對角線的夾角就是我們的目標圖形的航向角和360的差值。


矩形左上角角度示例.png
 /**
     * 計算某點指定距離和角度的新的點的經(jīng)緯度
     * @param lat 中心點的緯度
     * @param lng 中心點的經(jīng)度
     * @param angle 角度(相對于正北方向茵汰,順時針方向)
     * @param distance 距離(單位:米)
     * @return 新點的經(jīng)緯度數(shù)組 [緯度, 經(jīng)度]
     */
    public static double[] getEndpoint(double lat, double lng, double angle, double distance) {
        double angleRad = Math.toRadians(angle);

        // 計算緯度變化
        double dLat = distance / EARTH_RADIUS;

        // 計算經(jīng)度變化
        double dLng = distance / (EARTH_RADIUS * Math.cos(Math.toRadians(lat)));

        double newLat = lat + Math.toDegrees(dLat * Math.cos(angleRad));
        double newLng = lng + Math.toDegrees(dLng * Math.sin(angleRad));

        return new double[]{newLat, newLng};
    }

通過上面的計算就可以得到矩形四個頂點的坐標枢里,然后繪制到地圖中即可

GroundOverlay groundOverlay2 = new GroundOverlay();
        groundOverlay2.setImage(pointBit);
        // 計算四個頂點的坐標
        GeoPoint[] corners2 = MapPointUtil.calculateCornerCoordinates("alt", "lng", 6, 10, 171.850f);

        groundOverlay2.setPosition(corners2[0],
                corners2[1],
                corners2[2],
                corners2[3]
        );
        binding.mapview.getOverlays().add(groundOverlay2);
最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市蹂午,隨后出現(xiàn)的幾起案子坡垫,更是在濱河造成了極大的恐慌,老刑警劉巖画侣,帶你破解...
    沈念sama閱讀 219,490評論 6 508
  • 序言:濱河連續(xù)發(fā)生了三起死亡事件冰悠,死亡現(xiàn)場離奇詭異,居然都是意外死亡配乱,警方通過查閱死者的電腦和手機溉卓,發(fā)現(xiàn)死者居然都...
    沈念sama閱讀 93,581評論 3 395
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來搬泥,“玉大人桑寨,你說我怎么就攤上這事》揲荩” “怎么了尉尾?”我有些...
    開封第一講書人閱讀 165,830評論 0 356
  • 文/不壞的土叔 我叫張陵,是天一觀的道長燥透。 經(jīng)常有香客問我沙咏,道長,這世上最難降的妖魔是什么班套? 我笑而不...
    開封第一講書人閱讀 58,957評論 1 295
  • 正文 為了忘掉前任肢藐,我火速辦了婚禮,結(jié)果婚禮上吱韭,老公的妹妹穿的比我還像新娘吆豹。我一直安慰自己,他們只是感情好理盆,可當我...
    茶點故事閱讀 67,974評論 6 393
  • 文/花漫 我一把揭開白布痘煤。 她就那樣靜靜地躺著,像睡著了一般猿规。 火紅的嫁衣襯著肌膚如雪衷快。 梳的紋絲不亂的頭發(fā)上,一...
    開封第一講書人閱讀 51,754評論 1 307
  • 那天坎拐,我揣著相機與錄音烦磁,去河邊找鬼养匈。 笑死哼勇,一個胖子當著我的面吹牛都伪,可吹牛的內(nèi)容都是我干的。 我是一名探鬼主播积担,決...
    沈念sama閱讀 40,464評論 3 420
  • 文/蒼蘭香墨 我猛地睜開眼陨晶,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了帝璧?” 一聲冷哼從身側(cè)響起先誉,我...
    開封第一講書人閱讀 39,357評論 0 276
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎的烁,沒想到半個月后褐耳,有當?shù)厝嗽跇淞掷锇l(fā)現(xiàn)了一具尸體,經(jīng)...
    沈念sama閱讀 45,847評論 1 317
  • 正文 獨居荒郊野嶺守林人離奇死亡渴庆,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內(nèi)容為張勛視角 年9月15日...
    茶點故事閱讀 37,995評論 3 338
  • 正文 我和宋清朗相戀三年铃芦,在試婚紗的時候發(fā)現(xiàn)自己被綠了。 大學(xué)時的朋友給我發(fā)了我未婚夫和他白月光在一起吃飯的照片襟雷。...
    茶點故事閱讀 40,137評論 1 351
  • 序言:一個原本活蹦亂跳的男人離奇死亡刃滓,死狀恐怖,靈堂內(nèi)的尸體忽然破棺而出耸弄,到底是詐尸還是另有隱情咧虎,我是刑警寧澤,帶...
    沈念sama閱讀 35,819評論 5 346
  • 正文 年R本政府宣布计呈,位于F島的核電站砰诵,受9級特大地震影響,放射性物質(zhì)發(fā)生泄漏捌显。R本人自食惡果不足惜胧砰,卻給世界環(huán)境...
    茶點故事閱讀 41,482評論 3 331
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望苇瓣。 院中可真熱鬧尉间,春花似錦、人聲如沸击罪。這莊子的主人今日做“春日...
    開封第一講書人閱讀 32,023評論 0 22
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽媳禁。三九已至眠副,卻和暖如春,著一層夾襖步出監(jiān)牢的瞬間竣稽,已是汗流浹背囱怕。 一陣腳步聲響...
    開封第一講書人閱讀 33,149評論 1 272
  • 我被黑心中介騙來泰國打工霍弹, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人娃弓。 一個月前我還...
    沈念sama閱讀 48,409評論 3 373
  • 正文 我出身青樓典格,卻偏偏與公主長得像,于是被迫代替她去往敵國和親台丛。 傳聞我的和親對象是個殘疾皇子耍缴,可洞房花燭夜當晚...
    茶點故事閱讀 45,086評論 2 355

推薦閱讀更多精彩內(nèi)容