質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

Q&A

解決済

1回答

888閲覧

swift5によるGooglemapを使った境界線の表示においてデバッグエリアに入っている値をコード内に戻したい

teshiyasato

総合スコア2

XML

XMLは仕様の1つで、マークアップ言語群を構築するために使われています。

デバッグ

デバッグはプログラムのバグや欠陥を検知し、開発中のバグを取り除く為のプロセスを指します。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

コードレビュー

コードレビューは、ソフトウェア開発の一工程で、 ソースコードの検査を行い、開発工程で見過ごされた誤りを検出する事で、 ソフトウェア品質を高めるためのものです。

Google マップ

Google Mapは、Google社がオンラインで提供している地図・ローカル検索サービスです。GIS(Geographic Information System:地理情報システム)の中の「WebGIS」に該当します。地図・航空写真・地形の表示方式があり、それぞれユーザーが縮尺を調整して表示させることができます。地域の情報サービスを検索する機能やルート検索の機能も搭載されています。

0グッド

0クリップ

投稿2020/05/09 21:14

ヘディングのテキスト### 前提・実現したいこと

ここに質問の内容を詳しく書いてください。
swift5でグーグルマップの町丁目ごとの境界線にポリゴンで境界線を描画するiphoneアプリを作っています。
国土地理院から日本の境界線のXMLデータを持ってきて、ポリゴンを描画するため、
rect.add(CLLocationCoordinate2D(latitude:35.8148317924 , longitude: 139.8934857172))
上のようにデバッグエリアにprint("")で連続表示はできたのですが、
実装するにあたりコードの中にこの値を戻す方法がわかりません。

発生している問題・エラーメッセージ

このコードでポリゴン要素になる要素数はデバッグエリアに出力できるようになりましたが、肝心のアプリに反映させるところでつまづきました。。

該当のソースコード

var zahyou:String = "35.8148317924 139.8934857172 35.8154699846 139.8911500311 35.8152509608 139.8911343759 35.8149787827 139.8910987650 35.8146723450 139.8910664514 35.8144362153 139.8910408224 35.8142352198 139.8910218677 35.8140847107 139.8910084763 35.8139062554 139.8909762545 35.8135295238 139.8909095836 35.8129436927 139.8908361217 " class PoliPoli { let saisho = "rect.add(CLLocationCoordinate2D(latitude:" let naka = ", longitude: " let owari = "))\n" var countIndex:Int = 0 var offsetIndex:Int = 14 var countIndex2:Int = 14 var offsetIndex2:Int = 14 let posList2 = zahyou var cnt: Int = 1 let posList = zahyou var flg2:Bool = true var endIndex2 = 0 // var startIndex = zahyou.index(zahyou.startIndex, offsetBy: saishoindex) //開始位var endIndex 置 1 // = zahyou.index(startIndex, offsetBy: saigoIndex) // 長さ 3(単純に文字の長さ) // var posList = zahyou[startIndex..<endIndex] //print(posList) // いうえ //(posList.contains("e")) || (posList2.contains("e")) func func1(){ var _:Int = zahyou.count //print(zahyou.count)//座標の文字数 // count -> 10 let yousosuu = ((zahyou.count/29)*2) + 3 //print(yousosuu) //こっちが今まで一番近かったやつ //最初の1回目 repeat{ switch cnt { case 1 : let startIndex = zahyou.index(zahyou.startIndex, offsetBy: countIndex) //開始位置 1 let endIndex2 = zahyou.index(startIndex, offsetBy: offsetIndex) // 長さ 13(単純に文字の長さ)前の部分は13文字 let posList2 = zahyou[startIndex..<endIndex2] print((saisho + posList2),terminator:"") //一番目の最初 //var x = (("ファンクションのやつ" + saisho + posList2),terminator:"") //print(x) countIndex += 29 offsetIndex = 13 cnt += 1 //後ろの部分 case 2 ,4 ,6 ,8 ,10 ,12 ,14 ,16 ,18 ,20 ,22 ,24 ,26 ,28 ,30 ,32 ,34 ,36 ,38 ,40 ,42 ,44 ,46 ,48 ,50 ,52 ,54 ,56 ,58 ,60 ,62 ,64 ,66 ,68 ,70 ,72 ,74 ,76 ,78 ,80 ,82 ,84 ,86 ,88 ,90 ,92 ,94 ,96 ,98 ,100 ,102 ,104 ,106 ,108 ,110 ,112 ,114 ,116 ,118 ,120 ,122 ,124 ,126 ,128 ,130 ,132 ,134 ,136 ,138 ,140 ,142 ,144 ,146 ,148 ,150 ,152 ,154 ,156 ,158 ,160 ,162 ,164 ,166 ,168 ,170 ,172 ,174 ,176 ,178 ,180 ,182 ,184 ,186 ,188 ,190 ,192 ,194 ,196 ,198 ,200 ,202 ,204 ,206 ,208 ,210 ,212 ,214 ,216 ,218 ,220 ,222 ,224 ,226 ,228 ,230 ,232 ,234 ,236 ,238 ,240 ,242 ,244 ,246 ,248 ,250 ,252 ,254 ,256 ,258 ,260 ,262 ,264 ,266 ,268 ,270 ,272 ,274 ,276 ,278 ,280 ,282 ,284 ,286 ,288 ,290 ,292 ,294 ,296 ,298 ,300 ,302 ,304 ,306 ,308 ,310 ,312 ,314 ,316 ,318 ,320 ,322 ,324 ,326 ,328 ,330 ,332 ,334 ,336 ,338 ,340 ,342 ,344 ,346 ,348 ,350 ,352 ,354 ,356 ,358 ,360 ,362 ,364 ,366 ,368 ,370 ,372 ,374 ,376 ,378 ,380 ,382 ,384 ,386 ,388 ,390 ,392 ,394 ,396 ,398 ,400 ,402 ,404 ,406 ,408 ,410 ,412 ,414 ,416 ,418 ,420 ,422 ,424 ,426 ,428 ,430 ,432 ,434 ,436 ,438 ,440 ,442 ,444 ,446 ,448 ,450 ,452 ,454 ,456 ,458 ,460 ,462 ,464 ,466 ,468 ,470 ,472 ,474 ,476 ,478 ,480 ,482 ,484 ,486 ,488 ,490 ,492 ,494 ,496 ,498 ,500 ,502 ,504 ,506 ,508 ,510 ,512 ,514 ,516 ,518 ,520 ,522 ,524 ,526 ,528 ,530 ,532 ,534 ,536 ,538 ,540 ,542 ,544 ,546 ,548 ,550 ,552 ,554 ,556 ,558 ,560 ,562 ,564 ,566 ,568 ,570 ,572 ,574 ,576 ,578 ,580 ,582 ,584 ,586 ,588 ,590 ,592 ,594 ,596 ,598 ,600 ,602 ,604 ,606 ,608 ,610 ,612 ,614 ,616 ,618 ,620 ,622 ,624 ,626 ,628 ,630 ,632 ,634 ,636 ,638 ,640 ,642 ,644 ,646 ,648 ,650 ,652 ,654 ,656 ,658 ,660 ,662 ,664 ,666 ,668 ,670 ,672 ,674 ,676 ,678 ,680 ,682 ,684 ,686 ,688 ,690 ,692 ,694 ,696 ,698 ,700 ,702 ,704 ,706 ,708 ,710 ,712 ,714 ,716 ,718 ,720 ,722 ,724 ,726 ,728 ,730 ,732 ,734 ,736 ,738 ,740 ,742 ,744 ,746 ,748 ,750 ,752 ,754 ,756 ,758 ,760 ,762 ,764 ,766 ,768 ,770 ,772 ,774 ,776 ,778 ,780 ,782 ,784 ,786 ,788 ,790 ,792 ,794 ,796 ,798 ,800 ,802 ,804 ,806 ,808 ,810 ,812 ,814 ,816 ,818 ,820 ,822 ,824 ,826 ,828 ,830 ,832 ,834 ,836 ,838 ,840 ,842 ,844 ,846 ,848 ,850 ,852 ,854 ,856 ,858 ,860 ,862 ,864 ,866 ,868 ,870 ,872 ,874 ,876 ,878 ,880 ,882 ,884 ,886 ,888 ,890 ,892 ,894 ,896 ,898 ,900 ,902 ,904 ,906 ,908 ,910 ,912 ,914 ,916 ,918 ,920 ,922 ,924 ,926 ,928 ,930 ,932 ,934 ,936 ,938 ,940 ,942 ,944 ,946 ,948 ,950 ,952 ,954 ,956 ,958 ,960 ,962 ,964 ,966 ,968 ,970 ,972 ,974 ,976 ,978 ,980 ,982 ,984 ,986 ,988 ,990 ,992 ,994 ,996 ,998 : let startIndex = zahyou.index(zahyou.startIndex, offsetBy: countIndex2) //開始位置 1 let endIndex = zahyou.index(startIndex, offsetBy: offsetIndex2) // 長さ 14(単純に文字の長さ)後ろの部分は14文字 let posList = zahyou[startIndex..<endIndex] print(naka + posList + owari) //後ろの部分 countIndex2 += 29 offsetIndex2 = 14 cnt += 1 //前の部分 case 3 ,5 ,7 ,9 ,11 ,13 ,15 ,17 ,19 ,21 ,23 ,25 ,27 ,29 ,31 ,33 ,35 ,37 ,39 ,41 ,43 ,45 ,47 ,49 ,51 ,53 ,55 ,57 ,59 ,61 ,63 ,65 ,67 ,69 ,71 ,73 ,75 ,77 ,79 ,81 ,83 ,85 ,87 ,89 ,91 ,93 ,95 ,97 ,99 ,101 ,103 ,105 ,107 ,109 ,111 ,113 ,115 ,117 ,119 ,121 ,123 ,125 ,127 ,129 ,131 ,133 ,135 ,137 ,139 ,141 ,143 ,145 ,147 ,149 ,151 ,153 ,155 ,157 ,159 ,161 ,163 ,165 ,167 ,169 ,171 ,173 ,175 ,177 ,179 ,181 ,183 ,185 ,187 ,189 ,191 ,193 ,195 ,197 ,199 ,201 ,203 ,205 ,207 ,209 ,211 ,213 ,215 ,217 ,219 ,221 ,223 ,225 ,227 ,229 ,231 ,233 ,235 ,237 ,239 ,241 ,243 ,245 ,247 ,249 ,251 ,253 ,255 ,257 ,259 ,261 ,263 ,265 ,267 ,269 ,271 ,273 ,275 ,277 ,279 ,281 ,283 ,285 ,287 ,289 ,291 ,293 ,295 ,297 ,299 ,301 ,303 ,305 ,307 ,309 ,311 ,313 ,315 ,317 ,319 ,321 ,323 ,325 ,327 ,329 ,331 ,333 ,335 ,337 ,339 ,341 ,343 ,345 ,347 ,349 ,351 ,353 ,355 ,357 ,359 ,361 ,363 ,365 ,367 ,369 ,371 ,373 ,375 ,377 ,379 ,381 ,383 ,385 ,387 ,389 ,391 ,393 ,395 ,397 ,399 ,401 ,403 ,405 ,407 ,409 ,411 ,413 ,415 ,417 ,419 ,421 ,423 ,425 ,427 ,429 ,431 ,433 ,435 ,437 ,439 ,441 ,443 ,445 ,447 ,449 ,451 ,453 ,455 ,457 ,459 ,461 ,463 ,465 ,467 ,469 ,471 ,473 ,475 ,477 ,479 ,481 ,483 ,485 ,487 ,489 ,491 ,493 ,495 ,497 ,499 ,501 ,503 ,505 ,507 ,509 ,511 ,513 ,515 ,517 ,519 ,521 ,523 ,525 ,527 ,529 ,531 ,533 ,535 ,537 ,539 ,541 ,543 ,545 ,547 ,549 ,551 ,553 ,555 ,557 ,559 ,561 ,563 ,565 ,567 ,569 ,571 ,573 ,575 ,577 ,579 ,581 ,583 ,585 ,587 ,589 ,591 ,593 ,595 ,597 ,599 ,601 ,603 ,605 ,607 ,609 ,611 ,613 ,615 ,617 ,619 ,621 ,623 ,625 ,627 ,629 ,631 ,633 ,635 ,637 ,639 ,641 ,643 ,645 ,647 ,649 ,651 ,653 ,655 ,657 ,659 ,661 ,663 ,665 ,667 ,669 ,671 ,673 ,675 ,677 ,679 ,681 ,683 ,685 ,687 ,689 ,691 ,693 ,695 ,697 ,699 ,701 ,703 ,705 ,707 ,709 ,711 ,713 ,715 ,717 ,719 ,721 ,723 ,725 ,727 ,729 ,731 ,733 ,735 ,737 ,739 ,741 ,743 ,745 ,747 ,749 ,751 ,753 ,755 ,757 ,759 ,761 ,763 ,765 ,767 ,769 ,771 ,773 ,775 ,777 ,779 ,781 ,783 ,785 ,787 ,789 ,791 ,793 ,795 ,797 ,799 ,801 ,803 ,805 ,807 ,809 ,811 ,813 ,815 ,817 ,819 ,821 ,823 ,825 ,827 ,829 ,831 ,833 ,835 ,837 ,839 ,841 ,843 ,845 ,847 ,849 ,851 ,853 ,855 ,857 ,859 ,861 ,863 ,865 ,867 ,869 ,871 ,873 ,875 ,877 ,879 ,881 ,883 ,885 ,887 ,889 ,891 ,893 ,895 ,897 ,899 ,901 ,903 ,905 ,907 ,909 ,911 ,913 ,915 ,917 ,919 ,921 ,923 ,925 ,927 ,929 ,931 ,933 ,935 ,937 ,939 ,941 ,943 ,945 ,947 ,949 ,951 ,953 ,955 ,957 ,959 ,961 ,963 ,965 ,967 ,969 ,971 ,973 ,975 ,977 ,979 ,981 ,983 ,985 ,987 ,989 ,991 ,993 ,995 ,997 ,999 : flg2 == true let startIndex = zahyou.index(zahyou.startIndex, offsetBy: countIndex) //開始位置 1 let endIndex2 = zahyou.index(startIndex, offsetBy: offsetIndex) // 長さ 14(単純に文字の長さ)後ろの部分は14文字 let posList2 = zahyou[startIndex..<endIndex2] print((saisho + posList2),terminator:"") //二番目からの前部分 cnt += 1 countIndex += 29 offsetIndex = 13 default: print("エラー") break } }while cnt < yousosuu } } var polygon = PoliPoli() //インスタンス化 polygon.func1()

試したこと

returnで戻り値として返せばいいのか、型にすればいいのかわからず困っています。
先人様に助言していただきたい次第です。どうかよろしくお願いいたします。

補足情報(FW/ツールのバージョンなど)

ここにより詳細な情報を記載してください。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

戻り値が[緯度、経度]のような関数を定義すればいいかと思います。

苦労された座標の分割ですが、配列のメソッドを使えば簡潔かつ柔軟にかけると思います。

配列を任意の要素数からなる配列の配列にするメソッドが見当たらない(見落とした?)ので、過去問を参照していますので、使うときには Arrayextension も定義していただけますでしょうか。

swift

1func getCoordinates() -> [[Double]] { 2 let zahyou = "35.8148317924 139.8934857172 35.8154699846 139.8911500311 35.8152509608 139.8911343759 35.8149787827 139.8910987650 35.8146723450 139.8910664514 35.8144362153 139.8910408224 35.8142352198 139.8910218677 35.8140847107 139.8910084763 35.8139062554 139.8909762545 35.8135295238 139.8909095836 35.8129436927 139.8908361217 " 3 4 // 文字列を " " で分割した上、要素をDouble型に変換する 5 let posArray = zahyou.split(separator: " ").map { Double($0) ?? 0 } 6 7 // 配列を任意要素数(ここでは2ごと)の配列に組み替える 8 let coordinates = posArray.split(num: 2) 9 10 // 配列を戻す 11 return coordinates 12} 13 14// 関数から緯度経度の配列を得る 15let coordinateArray = getCoordinates() 16 17// あとは必要な関数を実行するだけ 18for coordinate in coordinateArray { 19 let lat = coordinate[0] 20 let lon = coordinate[1] 21 22 print("緯度: (lat) 経度: (lon)") 23 24 // rect.add(CLLocationCoordinate2D(latitude:lat , longitude: lon)) 25} 26 27// cited from https://teratail.com/questions/107763 28extension Array { 29 /// 配列を要素数が num の配列の配列にする 30 /// 31 /// let array = [1, 2, 3, 4, 5] 32 /// let splited = array.split(num: 2) 33 /// print(splited) 34 /// // [[1, 2], [3, 4], [5]] 35 func split(num: Int) -> [[Element]] { 36 37 /// 配列を半分に分けて前半後半それぞれをもう一度半分に分ける 38 /// これを要素数が num 以下になるまで繰り返す 39 40 let count = self.count 41 42 // 要素数が num 以下の時 43 if count <= num { 44 45 return [self] 46 } 47 // 要素数が 2 * num 以下の時 48 if count <= num * 2 { 49 50 return [Array<Element>(self[0..<num])] 51 + [Array<Element>(self[num...])] 52 } 53 54 // 前半の要素数が num の整数倍になるように分割点を求める 55 let splitPoint = Int(count / num / 2) * num 56 57 switch splitPoint { 58 59 case num: 60 // 前半の要素数が num の時 61 62 return [Array<Element>(self[0..<num])] 63 + Array<Element>(self[num..<count]).split(num: num) 64 65 case (num...): 66 // 前半の要素数が num 以上の時 67 68 return Array<Element>(self[0..<splitPoint]).split(num: num) 69 + Array<Element>(self[splitPoint..<count]).split(num: num) 70 71 default: 72 // ここには到達しない 73 74 fatalError("Not reachable") 75 } 76 } 77}

投稿2020/05/09 23:33

TsukubaDepot

総合スコア5086

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

teshiyasato

2020/05/09 23:40

おおー!!本当に凄いです!ご指導ありがとうございます!先に進みましたらまたチェックしたいただけましたら光栄です!よろしくお願い致します!
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問