0

我對那些喜歡那種事情的人有解決問題的練習。我正在研究使用Google地圖的地圖應用程序。用戶首先輸入一系列座標和一個「半徑」。用戶然後請求繪製一條線或一個區域。這些地塊使用多邊形在Google地圖上進行。換句話說,給定由藍色點和距離定義的藍線(或面積),計算紅色點並繪製紅色多邊形,其中邊緣與用戶提供的邊緣相距給定距離:如何確定一個多邊形的頂點,該多邊形的外邊緣距離Google地圖上javascript或線條的某個給定距離?

line http://i39.tinypic.com/34h8cus.jpg area http://i40.tinypic.com/11git15.jpg

我設法得到這種通過計算向前「最」的情況下工作和反向軸承,然後用軸承找點關閉這些90度,在適當的方向。對於弧線,我只是以5度的間隔計算沿弧線的位置點。在銳角內側,我確定兩條線相交併使用該點,但是當該點的交叉軌跡距離大於所提供的半徑時,這有時會失敗。

我希望有人知道更簡單的方法?無論交叉距離與半徑距離的比例是多少,都可以一直工作嗎?或者,也許圖書館已經存在這樣做?

我希望我想要做的事情是有道理的......很難說出口。也許如果我有搜索甚至會有幫助的話。

回答

0

那麼,答案結果比我想象的要簡單。這讓我回到了近15年前CompSci 101期間教過的一堂課:

「儘可能使用現有的庫」。一旦我發現(通過谷歌搜索),我所尋找的並不是所謂的「偏移量」或「尺度」,但實際上在GIS計算中被稱爲「緩衝區」,這很簡單。有一些偉大的庫,如ClipperAngus Johnson,可以做到這一點,但我希望JavaScript特定。

這將我帶到arcGIS的GeometryService。他們甚至有一個Google Maps version,但它只是API v2。幸運的是,我通過與GMaps API v3一起使用的arcGIS論壇發現了官方的,不支持的版本。因此,我的解決方案是使用arcgislink,它的緩衝功能與Google Maps LatLng點,Google地圖多邊形/多義線以及任何標準arcGIS類型完美配合。任何其他人都需要使用Google地圖做這件事,我強烈建議看看他們的圖書館。

+0

嗨,在一定數量的平面上使用具有複雜多邊形的arcGIS方法,代碼需要某種類型的proxxy。你是否遇到過這種情況,如果是的話,你是如何解決這個問題的? CHeers – 2013-03-28 10:28:54

+0

您正在討論Clipper和Javascript。也許這對於你的目的來說太遲了,但是在你發佈Clipper的Javascript版本後發佈一點點。請參閱演示:http://jsclipper.sourceforge.net/5.0.2.1/main_demo.html。 Clipper可以抵消多邊形。 – 2013-09-05 09:02:07

0

在一般設置中,這個問題是相當困難的,因爲它是一個全局問題(你不能只局部解決,在每個多邊形頂點,而只是處理兩個傳入邊)。也因爲涉及圓弧而感到不安。

有一種解決方案效率很高但安全:假設您有一個通用的多邊形並集算法(如http://gvu.gatech.edu/~jarek/graphics/papers/04PolygonBooleansMargalit.pdf);您將逐個添加每個邊的充氣版本(每個矩形和兩個半圓盤用多邊形近似),以及閉合形狀的原始多邊形。

爲了提高效率,您可以設計一種「掃描線」算法,該算法通過在每個「事件點」處用水平線對平面進行切片,即分段/弧端點和弧頂點,以便每個切片更簡單。你明白我的意思嗎?

順便說一句,你叫什麼「跨軌道距離」?

+0

感謝您的提示,當我抽出時間看看我的想法時,我會檢查一下您的鏈接。我不確定是否有跨線距離的數學術語。我來自導航背景。在導航中,交叉軌跡距離是從地球表面上的點到大圓線的距離。所以我說的是,如果用戶提供的點之一與外部(又稱計算)形狀上的線段之間的距離小於提供用於抵消的距離,則結果可能非常奇怪。 – user985219 2012-03-02 03:00:56

相關問題