こんにちは親愛なる読者。
トピックで説明されているタスクに遭遇したことがある場合、おそらくgetClosestPoint()メソッドの説明への参照以外の投稿があることに驚くでしょう。そのため、私のソリューションは確かにそれに基づいているとすぐに言います。 ただし、共有するのはそれほど多くのアルゴリズムの美しさではなく(APIを作成したYandexチームによって実現されました)、むしろ私に用意されたタスク
に対する既成のソリューションとしてです。
当社はまた、IPテレフォニーおよびインターネットサービスの提供、および当社独自の光ファイバーのキロメートル単位の提供にも関与しています。 私たちにとって、目的のクライアントのオフィスがケーブルからどれだけ離れているかという問題は非常に重要です。
光学ルートを含むマップの作成から、カットの下でフォームに組み込まれた最短距離決定の実装まで、既製のソリューションを探します。
すべての作業は基本的に既製のソリューションとサンプルをコンパイルすることで構成されていることを、私はあなたを欺いたり、自分を隠そうとはしません。
タスクは次のとおりです。ユーザーが住所を入力します
- サイトおよびGETリクエストを使用するアドレスは、マップのあるページに転送されます
- マップ自体の特別な形式で
または、彼は自分で家を選んで、マウスを正しい場所に突っ込む。
その後、選択した住所と最も近い光ケーブルまでの距離を示すマークが地図に表示されます。 表示を簡単にするために、ケーブルに垂線を描画します(議論の余地のある解決策ですが、視覚的には結果が気に入りました)。
http://www.infotis.ru/maps.htmlに根拠がないように例を挙げ
ます 。
作業はいくつかの段階に削減されました
- ケーブルを物理カードからYandex.Mapに転送します
- 曲線(ポリライン)の形でカードにケーブルを引きます
- カスタムコントロールを作成する
- 距離を計算する関数を書く
- 必要な住所と必要な座標を取得します
ステージ1
この段階では、ITの専門家と直接関係のない同僚の手によって、数十キロメートルのケーブルを地図上に配置する必要がありました。 ここでは、
ymikエディターが手伝ってくれました。 この
投稿の発見から、最終的な選択は(Googleマップではなく)Yandex.Mapsを支持して行われました。
同僚の仕事をしばらくしてから、次の形式のテキストファイルを受け取りました(場所を散らかさないように、2ポイントの1つの曲線の例)
{ "name": "1", "center": { "lng": 37.62110402807594, "lat": 55.74879798509053, "zoom": 12 }, "styles": [{ "name": "ymikEditor#1315408925757#0", "style": { "lineStyle": { "strokeColor": "0000ff80", "strokeWidth": "5" } } }], "objects": [{ "style": "ymikEditor#1315408925757#0", "name": "1", "description": "1", "type": "Polyline", "points": [{ "lng": 37.62110402807594, "lat": 55.773576281653035 }, { "lng": 37.6235072873533, "lat": 55.74957254620929 }] }] }
ステージ2
ymikの作品のイメージと肖像で、これらの芸術を地図に
描きます。
オブジェクトが変数val、mapにあることに同意します-
次は少しのコードです(シンプルですが、ソリューション自体はシンプルなので、コメントを付けましょう)
マップとシンプルなコントロールを作成します。 コードからわかるように、jQueryはプロセスにロードされます。これは、将来(YMaps.jQueryを使用した$の代わりに)使用します。
map = new YMaps.Map(YMaps.jQuery("#YMapsID")[0]); map.setCenter(new YMaps.GeoPoint(37.643347, 55.745478), 13); map.addControl(new YMaps.Zoom()); map.addControl(new YMaps.ToolBar()); map.addControl(new YMaps.ScaleLine()); map.addControl(new YMaps.TypeControl()); map.setType(YMaps.MapType.SATELLITE);
線描画機能
polylines=[]; function draw_lines() { k = 0;
ステージ3
この段階で、主な作業を行います。
まず第一に、ユーザーが必要な住所を入力して、ケーブルが労働者が通過する距離を確認できるフォームをマップ上に作成しておくといいでしょう。
次に、Yandexのネイティブコントロールの例を示します
。http :
//api.yandex.ru/maps/jsapi/examples/mapcontrolscustomizing.htmlこのモデルに従って、行動します。
このコントロールのデザイナーを連れてきます
function nearest_search(object_address) {
フォームを送信する代わりに、距離を検索および計算する機能を開始するトリガー。
YMaps.jQuery('#find_nearest_form').submit(function () { showAddress(YMaps.jQuery("#search_nearest_input").val()); return false; });
次に、元のmaps.yandex.ruから「情報」要素のバリアントを作成します
完全に行う方法については、
http://api.yandex.ru/maps/articles/tasks/service.xml#how-to-use-create-information-toolで説明しています。
この場所ではジオコーディングは必要ないので、少し削減します
function InformationControl() { var geoResult, clickPlace, listener, map;
ステージ4
ほら、すべてのボタンがあります-距離を決定するためのメイン関数を書き始めましょう。
function geotrack(clickPoint, clickPlace) {
ステージ5
住所で座標を検索しましょう。
再びYandexの例
http://api.yandex.ru/maps/jsapi/examples/geocoding.html function showAddress(value) {
ええ、何かがGETに来たかどうか(サイトの概念に応じて、そこから来るはずです)を確認し、もしそうなら、探しているアドレスとしてリクエストを使用します。
var get = location.search; if(get != '') { object_address = decodeURI(get.split('?object_address=')[1]); if(object_address==" ") {object_address=""; } else {YMaps.jQuery('#find_nearest_form').submit(); } } else { object_address=''; }
ソースコード全体は、例のリンクを使用して表示できます。
コメントさせていただきます。
*更新*最後に、投稿を編集する方法を見つけたので、すべてを修正したいので、すべてを追加しました。
助けてくれたみんなに感謝します。
メソッドとオブジェクトに関する情報:
api.yandex.ru/maps/jsapi/doc/ref/reference/map.xmlapi.yandex.ru/maps/jsapi/doc/ref/reference/geopoint.xmlapi.yandex.ru/maps/jsapi/doc/ref/reference/polyline.xml