dc-l1-tokyo-ring-orientation
Map (reference ← swipe → agent)
0:00
tokyo_buildings_legacy.geojson is a footprint export from an old in-house tool. When we load it into web-based GeoJSON viewers, building interiors are shaded incorrectly: holes appear filled and exteriors render as empty space. Our tile-server import script also rejects every feature with geometry warnings. Fix the geometries so that standard GeoJSON web viewers render them correctly. Attributes must be untouched. Output to tokyo_buildings_fixed.geojson.
Every feature must remain a Polygon with interior rings and holes preserved exactly as they are; do not flatten them. feature_id is the join key.
0:00
System info
{
"adapter": "openrouter",
"model": "deepseek/deepseek-v4-flash",
"base_url": "https://openrouter.ai/api/v1"
}
0:05
Let me start by reading the file to understand its structure and identify the issues.
0:05
Read
/work/tokyo_buildings_legacy.geojson
1 {
2 "type": "FeatureCollection",
3 "name": "tokyo_buildings_legacy",
4 "crs": {
5 "type": "name",
6 "properties": {
7 "name": "urn:ogc:def:crs:OGC:1.3:CRS84"
8 }
9 },
10 "features": [
11 {
12 "type": "Feature",
13 "geometry": {
14 "type": "Polygon",
15 "coordinates": [
16 [
17 [
18 139.7029081,
19 35.6592372
20 ],
21 [
22 139.7027971,
23 35.659202
24 ],
25 [
26 139.7027755,
27 35.6592471
28 ],
29 [
30 139.7028864,
31 35.6592823
32 ],
33 [
34 139.7029081,
35 35.6592372
36 ]
37 ]
38 ]
39 },
40 "properties": {
41 "feature_id": 1,
42 "overture_id": "01302ced-3141-4b64-b630-98019352a9fd",
43 "name_primary": "渋谷協和ビル",
44 "building_class": "",
45 "height": null
46 }
47 },
48 {
49 "type": "Feature",
50 "geometry": {
51 "type": "Polygon",
52 "coordinates": [
53 [
54 [
55 139.7010896,
56 35.6601981
57 ],
58 [
59 139.7010851,
60 35.660084
61 ],
62 [
63 139.7010559,
64 35.660088
65 ],
66 [
67 139.7010511,
68 35.6600707
69 ],
70 [
71 139.7009769,
72 35.6600834
73 ],
74 [
75 139.7009923,
76 35.6601243
77 ],
78 [
79 139.7009007,
80 35.6601417
81 ],
82 [
83 139.7009195,
84 35.6602237
85 ],
86 [
87 139.7010896,
88 35.6601981
89 ]
90 ]
91 ]
92 },
93 "properties": {
94 "feature_id": 2,
95 "overture_id": "046ab130-a9a2-4a0e-9142-b7ea36374fdb",
96 "name_primary": "丸大ビル",
97 "building_class": "",
98 "height": null
99 }
100 },
101 {
102 "type": "Feature",
103 "geometry": {
104 "type": "Polygon",
105 "coordinates": [
106 [
107 [
108 139.7011168,
109 35.6616718
110 ],
111 [
112 139.7009949,
113 35.6616685
114 ],
115 [
116 139.7009926,
117 35.6617229
118 ],
119 [
120 139.7011145,
121 35.6617263
122 ],
123 [
124 139.7011168,
125 35.6616718
126 ]
127 ]
128 ]
129 },
130 "properties": {
131 "feature_id": 3,
132 "overture_id": "063348bb-5559-4839-bf7d-8c6fca154867",
133 "name_primary": "",
134 "building_class": "",
135 "height": null
136 }
137 },
138 {
139 "type": "Feature",
140 "geometry": {
141 "type": "Polygon",
142 "coordinates": [
143 [
144 [
145 139.7032678,
146 35.6601827
147 ],
148 [
149 139.7032982,
150 35.660114
151 ],
152 [
153 139.7032205,
154 35.6600913
155 ],
156 [
157 139.7031901,
158 35.66016
159 ],
160 [
161 139.7032678,
162 35.6601827
163 ]
164 ]
165 ]
166 },
167 "properties": {
168 "feature_id": 4,
169 "overture_id": "0a1085e0-b946-40d4-8b22-17f5110beee6",
170 "name_primary": "",
171 "building_class": "",
172 "height": null
173 }
174 },
175 {
176 "type": "Feature",
177 "geometry": {
178 "type": "Polygon",
179 "coordinates": [
180 [
181 [
182 139.7015768,
183 35.6592033
184 ],
185 [
186 139.701614,
187 35.6592118
188 ],
189 [
190 139.7016492,
191 35.6591105
192 ],
193 [
194 139.7015748,
195 35.6590934
196 ],
197 [
198 139.7015395,
199 35.6591947
200 ],
201 [
202 139.7015768,
203 35.6592033
204 ]
205 ]
206 ]
207 },
208 "properties": {
209 "feature_id": 5,
210 "overture_id": "0c2ac2ae-6836-429c-888f-b33dba5cd074",
211 "name_primary": "",
212 "building_class": "",
213 "height": null
214 }
215 },
216 {
217 "type": "Feature",
218 "geometry": {
219 "type": "Polygon",
220 "coordinates": [
221 [
222 [
223 139.7025726,
224 35.661211
225 ],
226 [
227 139.7025732,
228 35.6612697
229 ],
230 [
231 139.7027844,
232 35.6612685
233 ],
234 [
235 139.7027837,
236 35.6611824
237 ],
238 [
239 139.7025917,
240 35.6611836
241 ],
242 [
243 139.7025916,
244 35.6611717
245 ],
246 [
247 139.7024481,
248 35.6611726
249 ],
250 [
251 139.7024485,
252 35.6612117
253 ],
254 [
255 139.7025726,
256 35.661211
257 ]
258 ],
259 [
260 [
261 139.70261625,
262 35.6612158
263 ],
264 [
265 139.70263306500001,
266 35.6612158
267 ],
268 [
269 139.70263306500001,
270 35.6612207
271 ],
272 [
273 139.70261625,
274 35.6612207
275 ],
276 [
277 139.70261625,
278 35.6612158
279 ]
280 ]
281 ]
282 },
283 "properties": {
284 "feature_id": 6,
285 "overture_id": "0ff95784-5c37-4c0e-8ee3-674f96075b8c",
286 "name_primary": "",
287 "building_class": "",
288 "height": null
289 }
290 },
291 {
292 "type": "Feature",
293 "geometry": {
294 "type": "Polygon",
295 "coordinates": [
296 [
297 [
298 139.7015979,
299 35.6600884
300 ],
301 [
302 139.7015706,
303 35.6600892
304 ],
305 [
306 139.7015731,
307 35.6601452
308 ],
309 [
310 139.7016004,
311 35.6601443
312 ],
313 [
314 139.7015979,
315 35.6600884
316 ]
317 ]
318 ]
319 },
320 "properties": {
321 "feature_id": 7,
322 "overture_id": "11b3ca95-3d26-4876-b2a0-c82b792992ec",
323 "name_primary": "",
324 "building_class": "",
325 "height": null
326 }
327 },
328 {
329 "type": "Feature",
330 "geometry": {
331 "type": "Polygon",
332 "coordinates": [
333 [
334 [
335 139.7021118,
336 35.6613063
337 ],
338 [
339 139.7021249,
340 35.6612491
341 ],
342 [
343 139.7020466,
344 35.6612494
345 ],
346 [
347 139.7020514,
348 35.6613056
349 ],
350 [
351 139.7021118,
352 35.6613063
353 ]
354 ]
355 ]
356 },
357 "properties": {
358 "feature_id": 8,
359 "overture_id": "12f66548-a7b0-491d-b900-32b6cbe7fe79",
360 "name_primary": "",
361 "building_class": "",
362 "height": null
363 }
364 },
365 {
366 "type": "Feature",
367 "geometry": {
368 "type": "Polygon",
369 "coordinates": [
370 [
371 [
372 139.701766,
373 35.6593673
374 ],
375 [
376 139.7017823,
377 35.6593748
378 ],
379 [
380 139.7018077,
381 35.6593385
382 ],
383 [
384 139.7017752,
385 35.6593235
386 ],
387 [
388 139.7017498,
389 35.6593598
390 ],
391 [
392 139.701766,
393 35.6593673
394 ]
395 ]
396 ]
397 },
398 "properties": {
399 "feature_id": 9,
400 "overture_id": "1b3f9098-7a2a-4dfb-b30c-baf5c9fd1822",
401 "name_primary": "",
402 "building_class": "",
403 "height": null
404 }
405 },
406 {
407 "type": "Feature",
408 "geometry": {
409 "type": "Polygon",
410 "coordinates": [
411 [
412 [
413 139.7028858,
414 35.6592884
415 ],
416 [
417 139.7027714,
418 35.6592546
419 ],
420 [
421 139.7027471,
422 35.6593067
423 ],
424 [
425 139.7028624,
426 35.6593419
427 ],
428 [
429 139.7028858,
430 35.6592884
431 ]
432 ]
433 ]
434 },
435 "properties": {
436 "feature_id": 10,
437 "overture_id": "1cf6de61-92eb-40c4-be28-513df0dcaf35",
438 "name_primary": "",
439 "building_class": "",
440 "height": null
441 }
442 },
443 {
444 "type": "Feature",
445 "geometry": {
446 "type": "Polygon",
447 "coordinates": [
448 [
449 [
450 139.7036803,
451 35.6585017
452 ],
453 [
454 139.7037371,
455 35.6583662
456 ],
457 [
458 139.7036697,
459 35.6583584
460 ],
461 [
462 139.7036139,
463 35.6584833
464 ],
465 [
466 139.7036803,
467 35.6585017
468 ]
469 ]
470 ]
471 },
472 "properties": {
473 "feature_id": 11,
474 "overture_id": "21367bab-af93-4dca-bf9c-a65708051c5a",
475 "name_primary": "",
476 "building_class": "",
477 "height": null
478 }
479 },
480 {
481 "type": "Feature",
482 "geometry": {
483 "type": "Polygon",
484 "coordinates": [
485 [
486 [
487 139.7011947,
488 35.6613077
489 ],
490 [
491 139.7011902,
492 35.6612626
493 ],
494 [
495 139.7009519,
496 35.6612825
497 ],
498 [
499 139.7009595,
500 35.6613288
501 ],
502 [
503 139.7011947,
504 35.6613077
505 ]
506 ]
507 ]
508 },
509 "properties": {
510 "feature_id": 12,
511 "overture_id": "236104c3-84a8-47c1-b872-9860b64a29fa",
512 "name_primary": "サンクスビル",
513 "building_class": "",
514 "height": null
515 }
516 },
517 {
518 "type": "Feature",
519 "geometry": {
520 "type": "Polygon",
521 "coordinates": [
522 [
523 [
524 139.7001093,
525 35.6596517
526 ],
527 [
528 139.7001138,
529 35.6596242
530 ],
531 [
532 139.7000808,
533 35.6596207
534 ],
535 [
536 139.7000785,
537 35.6596343
538 ],
539 [
540 139.7000763,
541 35.6596481
542 ],
543 [
544 139.7001093,
545 35.6596517
546 ]
547 ]
548 ]
549 },
550 "properties": {
551 "feature_id": 13,
552 "overture_id": "23f68c5b-71c1-4e47-a535-4a092bd91854",
553 "name_primary": "",
554 "building_class": "",
555 "height": null
556 }
557 },
558 {
559 "type": "Feature",
560 "geometry": {
561 "type": "Polygon",
562 "coordinates": [
563 [
564 [
565 139.7009482,
566 35.6591558
567 ],
568 [
569 139.7009521,
570 35.6591336
571 ],
572 [
573 139.7009717,
574 35.6590342
575 ],
576 [
577 139.7008258,
578 35.6590153
579 ],
580 [
581 139.7008016,
582 35.6591385
583 ],
584 [
585 139.7009482,
586 35.6591558
587 ]
588 ]
589 ]
590 },
591 "properties": {
592 "feature_id": 14,
593 "overture_id": "27112e19-5779-46d8-99d1-1a07c9c1d768",
594 "name_primary": "",
595 "building_class": "",
596 "height": null
597 }
598 },
599 {
600 "type": "Feature",
601 "geometry": {
602 "type": "Polygon",
603 "coordinates": [
604 [
605 [
606 139.7009532,
607 35.6612732
608 ],
609 [
610 139.701194,
611 35.6612552
612 ],
613 [
614 139.701184,
615 35.6611653
616 ],
617 [
618 139.7009495,
619 35.6611664
620 ],
621 [
622 139.7009532,
623 35.6612732
624 ]
625 ]
626 ]
627 },
628 "properties": {
629 "feature_id": 15,
630 "overture_id": "28ada99a-21bf-42ff-b6d7-be0a0b26b3e3",
631 "name_primary": "渋谷東日本ビル",
632 "building_class": "",
633 "height": null
634 }
635 },
636 {
637 "type": "Feature",
638 "geometry": {
639 "type": "Polygon",
640 "coordinates": [
641 [
642 [
643 139.7037107,
644 35.6611359
645 ],
646 [
647 139.7036895,
648 35.6610829
649 ],
650 [
651 139.7036503,
652 35.6610932
653 ],
654 [
655 139.7034724,
656 35.6610819
657 ],
658 [
659 139.703522,
660 35.661206
661 ],
662 [
663 139.7036077,
664 35.6611834
665 ],
666 [
667 139.7036003,
668 35.661165
669 ],
670 [
671 139.7037107,
672 35.6611359
673 ]
674 ]
675 ]
676 },
677 "properties": {
678 "feature_id": 16,
679 "overture_id": "29a2845a-cdc5-4aa7-ac7c-0ce136d7e197",
680 "name_primary": "東京スクールオブミュージック専門学校渋谷第2校舎",
681 "building_class": "college",
682 "height": null
683 }
684 },
685 {
686 "type": "Feature",
687 "geometry": {
688 "type": "Polygon",
689 "coordinates": [
690 [
691 [
692 139.7033422,
693 35.6593349
694 ],
695 [
696 139.7032552,
697 35.6593028
698 ],
699 [
700 139.7032376,
701 35.6593313
702 ],
703 [
704 139.703211,
705 35.6593243
706 ],
707 [
708 139.7031901,
709 35.6593654
710 ],
711 [
712 139.7031249,
713 35.6595511
714 ],
715 [
716 139.7032138,
717 35.6595646
718 ],
719 [
720 139.7033422,
721 35.6593349
722 ]
723 ]
724 ]
725 },
726 "properties": {
727 "feature_id": 17,
728 "overture_id": "2c1a77ab-b6f8-4a1f-b4ba-b95e3fba63bf",
729 "name_primary": "",
730 "building_class": "",
731 "height": null
732 }
733 },
734 {
735 "type": "Feature",
736 "geometry": {
737 "type": "Polygon",
738 "coordinates": [
739 [
740 [
741 139.7028171,
742 35.6598877
743 ],
744 [
745 139.7028265,
746 35.6597316
747 ],
748 [
749 139.7027047,
750 35.6597141
751 ],
752 [
753 139.702617,
754 35.6597873
755 ],
756 [
757 139.702736,
758 35.6598859
759 ],
760 [
761 139.7028171,
762 35.6598877
763 ]
764 ],
765 [
766 [
767 139.70271756,
768 35.659795692
769 ],
770 [
771 139.702728035,
772 35.659795692
773 ],
774 [
775 139.702728035,
776 35.659804372
777 ],
778 [
779 139.70271756,
780 35.659804372
781 ],
782 [
783 139.70271756,
784 35.659795692
785 ]
786 ]
787 ]
788 },
789 "properties": {
790 "feature_id": 18,
791 "overture_id": "2c40b108-7a5d-4e5a-9275-a464616b6e86",
792 "name_primary": "",
793 "building_class": "",
794 "height": 30.0
795 }
796 },
797 {
798 "type": "Feature",
799 "geometry": {
800 "type": "Polygon",
801 "coordinates": [
802 [
803 [
804 139.7037724,
805 35.6585288
806 ],
807 [
808 139.70384,
809 35.6583634
810 ],
811 [
812 139.7037541,
813 35.6583544
814 ],
815 [
816 139.7036907,
817 35.658506
818 ],
819 [
820 139.7037724,
821 35.6585288
822 ]
823 ]
824 ]
825 },
826 "properties": {
827 "feature_id": 19,
828 "overture_id": "2c4b68ab-0162-4896-9404-f5df5b3479b6",
829 "name_primary": "共栄ビル",
830 "building_class": "",
831 "height": null
832 }
833 },
834 {
835 "type": "Feature",
836 "geometry": {
837 "type": "Polygon",
838 "coordinates": [
839 [
840 [
841 139.7002922,
842 35.6618328
843 ],
844 [
845 139.7002895,
846 35.661784
847 ],
848 [
849 139.7001643,
850 35.6617887
851 ],
852 [
853 139.7001671,
854 35.6618375
855 ],
856 [
857 139.7002922,
858 35.6618328
859 ]
860 ]
861 ]
862 },
863 "properties": {
864 "feature_id": 20,
865 "overture_id": "2c7a7e5e-8ef8-4734-a812-a1a36e709bf8",
866 "name_primary": "",
867 "building_class": "",
868 "height": null
869 }
870 },
871 {
872 "type": "Feature",
873 "geometry": {
874 "type": "Polygon",
875 "coordinates": [
876 [
877 [
878 139.7009838,
879 35.6601217
880 ],
881 [
882 139.7009683,
883 35.660077
884 ],
885 [
886 139.7010765,
887 35.6600607
888 ],
889 [
890 139.7010502,
891 35.6597431
892 ],
893 [
894 139.7010509,
895 35.6595858
896 ],
897 [
898 139.7008608,
899 35.6595937
900 ],
901 [
902 139.7007828,
903 35.6596766
904 ],
905 [
906 139.7008993,
907 35.6601363
908 ],
909 [
910 139.7009838,
911 35.6601217
912 ]
913 ]
914 ]
915 },
916 "properties": {
917 "feature_id": 21,
918 "overture_id": "2e3d3476-bc60-4d92-a59a-4cb2aaeaa3d3",
919 "name_primary": "MAGNET SHIBUYA",
920 "building_class": "",
921 "height": null
922 }
923 },
924 {
925 "type": "Feature",
926 "geometry": {
927 "type": "Polygon",
928 "coordinates": [
929 [
930 [
931 139.7022334,
932 35.6599842
933 ],
934 [
935 139.7022461,
936 35.6599846
937 ],
938 [
939 139.7022519,
940 35.6598833
941 ],
942 [
943 139.702226,
944 35.6598823
945 ],
946 [
947 139.7022203,
948 35.6599837
949 ],
950 [
951 139.7022334,
952 35.6599842
953 ]
954 ]
955 ]
956 },
957 "properties": {
958 "feature_id": 22,
959 "overture_id": "2edf3b5a-c9a7-4d67-b57b-e6891fe8263b",
960 "name_primary": "",
961 "building_class": "roof",
962 "height": null
963 }
964 },
965 {
966 "type": "Feature",
967 "geometry": {
968 "type": "Polygon",
969 "coordinates": [
970 [
971 [
972 139.7006873,
973 35.6609015
974 ],
975 [
976 139.7006933,
977 35.6608285
978 ],
979 [
980 139.7005106,
981 35.6608351
982 ],
983 [
984 139.7005119,
985 35.6609
986 ],
987 [
988 139.7006873,
989 35.6609015
990 ]
991 ]
992 ]
993 },
994 "properties": {
995 "feature_id": 23,
996 "overture_id": "2f539d97-f723-4927-8208-7bd614daf1e7",
997 "name_primary": "",
998 "building_class": "",
999 "height": null
1000 }
1001 },
1002 {
1003 "type": "Feature",
1004 "geometry": {
1005 "type": "Polygon",
1006 "coordinates": [
1007 [
1008 [
1009 139.7011753,
1010 35.6607462
1011 ],
1012 [
1013 139.7011649,
1014 35.6606144
1015 ],
1016 [
1017 139.7009458,
1018 35.6606009
1019 ],
1020 [
1021 139.7009432,
1022 35.6607253
1023 ],
1024 [
1025 139.7011753,
1026 35.6607462
1027 ]
1028 ]
1029 ]
1030 },
1031 "properties": {
1032 "feature_id": 24,
1033 "overture_id": "348d3001-94c6-42c7-90a3-8e15c681835e",
1034 "name_primary": "Zara",
1035 "building_class": "",
1036 "height": null
1037 }
1038 },
1039 {
1040 "type": "Feature",
1041 "geometry": {
1042 "type": "Polygon",
1043 "coordinates": [
1044 [
1045 [
1046 139.7002738,
1047 35.6615817
1048 ],
1049 [
1050 139.7002654,
1051 35.6615447
1052 ],
1053 [
1054 139.7002095,
1055 35.6615347
1056 ],
1057 [
1058 139.7000434,
1059 35.6616598
1060 ],
1061 [
1062 139.7000805,
1063 35.6616881
1064 ],
1065 [
1066 139.7002738,
1067 35.6615817
1068 ]
1069 ]
1070 ]
1071 },
1072 "properties": {
1073 "feature_id": 25,
1074 "overture_id": "371f3842-eea7-4bd0-bf57-c568f5669832",
1075 "name_primary": "",
1076 "building_class": "",
1077 "height": null
1078 }
1079 },
1080 {
1081 "type": "Feature",
1082 "geometry": {
1083 "type": "Polygon",
1084 "coordinates": [
1085 [
1086 [
1087 139.7034551,
1088 35.660466
1089 ],
1090 [
1091 139.7035372,
1092 35.6601865
1093 ],
1094 [
1095 139.7034254,
1096 35.6601648
1097 ],
1098 [
1099 139.7033433,
1100 35.6604443
1101 ],
1102 [
1103 139.7034551,
1104 35.660466
1105 ]
1106 ]
1107 ]
1108 },
1109 "properties": {
1110 "feature_id": 26,
1111 "overture_id": "3c8b6f1b-d6b3-4f03-a4b5-c5508dcaea51",
1112 "name_primary": "",
1113 "building_class": "",
1114 "height": null
1115 }
1116 },
1117 {
1118 "type": "Feature",
1119 "geometry": {
1120 "type": "Polygon",
1121 "coordinates": [
1122 [
1123 [
1124 139.7027178,
1125 35.6598821
1126 ],
1127 [
1128 139.7026156,
1129 35.659794
1130 ],
1131 [
1132 139.7025218,
1133 35.6598616
1134 ],
1135 [
1136 139.7025218,
1137 35.6598754
1138 ],
1139 [
1140 139.7027178,
1141 35.6598821
1142 ]
1143 ]
1144 ]
1145 },
1146 "properties": {
1147 "feature_id": 27,
1148 "overture_id": "3ee49086-6ea2-4e7f-b99f-fc2edd7193ed",
1149 "name_primary": "",
1150 "building_class": "",
1151 "height": null
1152 }
1153 },
1154 {
1155 "type": "Feature",
1156 "geometry": {
1157 "type": "Polygon",
1158 "coordinates": [
1159 [
1160 [
1161 139.7024615,
1162 35.6600032
1163 ],
1164 [
1165 139.7024763,
1166 35.6600037
1167 ],
1168 [
1169 139.7024813,
1170 35.6599082
1171 ],
1172 [
1173 139.7024539,
1174 35.6599073
1175 ],
1176 [
1177 139.7024489,
1178 35.6600028
1179 ],
1180 [
1181 139.7024615,
1182 35.6600032
1183 ]
1184 ]
1185 ]
1186 },
1187 "properties": {
1188 "feature_id": 28,
1189 "overture_id": "3f3febaa-698d-497d-be85-c18945288b41",
1190 "name_primary": "",
1191 "building_class": "roof",
1192 "height": null
1193 }
1194 },
1195 {
1196 "type": "Feature",
1197 "geometry": {
1198 "type": "Polygon",
1199 "coordinates": [
1200 [
1201 [
1202 139.7015039,
1203 35.6595559
1204 ],
1205 [
1206 139.7014661,
1207 35.6595562
1208 ],
1209 [
1210 139.7014674,
1211 35.6596561
1212 ],
1213 [
1214 139.7014678,
1215 35.6596898
1216 ],
1217 [
1218 139.7014692,
1219 35.6597965
1220 ],
1221 [
1222 139.701507,
1223 35.6597962
1224 ],
1225 [
1226 139.7015057,
1227 35.6596938
1228 ],
1229 [
1230 139.7015049,
1231 35.6596361
1232 ],
1233 [
1234 139.7015039,
1235 35.6595559
1236 ]
1237 ]
1238 ]
1239 },
1240 "properties": {
1241 "feature_id": 29,
1242 "overture_id": "3f9e7083-4ec2-4669-bc45-7ae9fde983a4",
1243 "name_primary": "",
1244 "building_class": "",
1245 "height": null
1246 }
1247 },
1248 {
1249 "type": "Feature",
1250 "geometry": {
1251 "type": "Polygon",
1252 "coordinates": [
1253 [
1254 [
1255 139.7026526,
1256 35.6602298
1257 ],
1258 [
1259 139.7026592,
1260 35.6601536
1261 ],
1262 [
1263 139.7024954,
1264 35.6601476
1265 ],
1266 [
1267 139.7024929,
1268 35.6602205
1269 ],
1270 [
1271 139.7026526,
1272 35.6602298
1273 ]
1274 ]
1275 ]
1276 },
1277 "properties": {
1278 "feature_id": 30,
1279 "overture_id": "3ff6f135-53ff-48d7-9be7-611b5a1926e1",
1280 "name_primary": "",
1281 "building_class": "",
1282 "height": null
1283 }
1284 },
1285 {
1286 "type": "Feature",
1287 "geometry": {
1288 "type": "Polygon",
1289 "coordinates": [
1290 [
1291 [
1292 139.7034562,
1293 35.6610918
1294 ],
1295 [
1296 139.7033048,
1297 35.6610927
1298 ],
1299 [
1300 139.7033057,
1301 35.6611928
1302 ],
1303 [
1304 139.7032801,
1305 35.6611929
1306 ],
1307 [
1308 139.7032804,
1309 35.6612297
1310 ],
1311 [
1312 139.7032652,
1313 35.6612298
1314 ],
1315 [
1316 139.7032656,
1317 35.6612751
1318 ],
1319 [
1320 139.7033032,
1321 35.6612748
1322 ],
1323 [
1324 139.7035121,
1325 35.6612091
1326 ],
1327 [
1328 139.7034562,
1329 35.6610918
1330 ]
1331 ]
1332 ]
1333 },
1334 "properties": {
1335 "feature_id": 31,
1336 "overture_id": "41e04ebc-5628-4614-983d-7d2bc049d0cd",
1337 "name_primary": "全国婦人会館・ちふれビル",
1338 "building_class": "",
1339 "height": null
1340 }
1341 },
1342 {
1343 "type": "Feature",
1344 "geometry": {
1345 "type": "Polygon",
1346 "coordinates": [
1347 [
1348 [
1349 139.7035951,
1350 35.6602969
1351 ],
1352 [
1353 139.7036068,
1354 35.6602603
1355 ],
1356 [
1357 139.7035542,
1358 35.6602492
1359 ],
1360 [
1361 139.7035425,
1362 35.6602858
1363 ],
1364 [
1365 139.7035951,
1366 35.6602969
1367 ]
1368 ],
1369 [
1370 [
1371 139.703573364,
1372 35.660271142
1373 ],
1374 [
1375 139.70357657899999,
1376 35.660271142
1377 ],
1378 [
1379 139.70357657899999,
1380 35.660273527
1381 ],
1382 [
1383 139.703573364,
1384 35.660273527
1385 ],
1386 [
1387 139.703573364,
1388 35.660271142
1389 ]
1390 ]
1391 ]
1392 },
1393 "properties": {
1394 "feature_id": 32,
1395 "overture_id": "42569a2d-bc9c-47cf-b338-63e06079d81b",
1396 "name_primary": "宮益不動尊",
1397 "building_class": "",
1398 "height": null
1399 }
1400 },
1401 {
1402 "type": "Feature",
1403 "geometry": {
1404 "type": "Polygon",
1405 "coordinates": [
1406 [
1407 [
1408 139.7021437,
1409 35.6608561
1410 ],
1411 [
1412 139.7021431,
1413 35.6608087
1414 ],
1415 [
1416 139.7019384,
1417 35.6608079
1418 ],
1419 [
1420 139.7019524,
1421 35.6608552
1422 ],
1423 [
1424 139.7021437,
1425 35.6608561
1426 ]
1427 ]
1428 ]
1429 },
1430 "properties": {
1431 "feature_id": 33,
1432 "overture_id": "42a04eb1-81e4-432c-aba7-f701afb37e1b",
1433 "name_primary": "Doctor's Building",
1434 "building_class": "",
1435 "height": null
1436 }
1437 },
1438 {
1439 "type": "Feature",
1440 "geometry": {
1441 "type": "Polygon",
1442 "coordinates": [
1443 [
1444 [
1445 139.70351,
1446 35.6583273
1447 ],
1448 [
1449 139.7034751,
1450 35.658326
1451 ],
1452 [
1453 139.7034042,
1454 35.6584846
1455 ],
1456 [
1457 139.7034335,
1458 35.6584926
1459 ],
1460 [
1461 139.70351,
1462 35.6583273
1463 ]
1464 ]
1465 ]
1466 },
1467 "properties": {
1468 "feature_id": 34,
1469 "overture_id": "45eee2cf-762c-4069-ad33-15ffc6a532fd",
1470 "name_primary": "",
1471 "building_class": "",
1472 "height": null
1473 }
1474 },
1475 {
1476 "type": "Feature",
1477 "geometry": {
1478 "type": "Polygon",
1479 "coordinates": [
1480 [
1481 [
1482 139.7035291,
1483 35.6614183
1484 ],
1485 [
1486 139.7036966,
1487 35.6613646
1488 ],
1489 [
1490 139.7036159,
1491 35.6611986
1492 ],
1493 [
1494 139.7033898,
1495 35.6612712
1496 ],
1497 [
1498 139.7034247,
1499 35.6613429
1500 ],
1501 [
1502 139.7034833,
1503 35.6613241
1504 ],
1505 [
1506 139.7035291,
1507 35.6614183
1508 ]
1509 ]
1510 ]
1511 },
1512 "properties": {
1513 "feature_id": 35,
1514 "overture_id": "4615c1ba-4f89-423b-8715-4f89303192c9",
1515 "name_primary": "PMO渋谷",
1516 "building_class": "office",
1517 "height": null
1518 }
1519 },
1520 {
1521 "type": "Feature",
1522 "geometry": {
1523 "type": "Polygon",
1524 "coordinates": [
1525 [
1526 [
1527 139.7037965,
1528 35.6598824
1529 ],
1530 [
1531 139.7037276,
1532 35.6598679
1533 ],
1534 [
1535 139.7035853,
1536 35.6601161
1537 ],
1538 [
1539 139.703649,
1540 35.6601406
1541 ],
1542 [
1543 139.7037965,
1544 35.6598824
1545 ]
1546 ]
1547 ]
1548 },
1549 "properties": {
1550 "feature_id": 36,
1551 "overture_id": "4642244a-76bc-4f73-9b50-9621e554966b",
1552 "name_primary": "",
1553 "building_class": "",
1554 "height": null
1555 }
1556 },
1557 {
1558 "type": "Feature",
1559 "geometry": {
1560 "type": "Polygon",
1561 "coordinates": [
1562 [
1563 [
1564 139.703694,
1565 35.6586863
1566 ],
1567 [
1568 139.7037595,
1569 35.6585402
1570 ],
1571 [
1572 139.7036111,
1573 35.6584963
1574 ],
1575 [
1576 139.7035456,
1577 35.6586423
1578 ],
1579 [
1580 139.703694,
1581 35.6586863
1582 ]
1583 ]
1584 ]
1585 },
1586 "properties": {
1587 "feature_id": 37,
1588 "overture_id": "4a232708-e5bc-48da-bfba-70db0a054f1f",
1589 "name_primary": "",
1590 "building_class": "",
1591 "height": null
1592 }
1593 },
1594 {
1595 "type": "Feature",
1596 "geometry": {
1597 "type": "Polygon",
1598 "coordinates": [
1599 [
1600 [
1601 139.7029398,
1602 35.660622
1603 ],
1604 [
1605 139.7029237,
1606 35.6607071
1607 ],
1608 [
1609 139.7029591,
1610 35.6607108
1611 ],
1612 [
1613 139.7029754,
1614 35.6606254
1615 ],
1616 [
1617 139.7029994,
1618 35.66049
1619 ],
1620 [
1621 139.7028827,
1622 35.6604838
1623 ],
1624 [
1625 139.7028725,
1626 35.6606192
1627 ],
1628 [
1629 139.7029398,
1630 35.660622
1631 ]
1632 ]
1633 ]
1634 },
1635 "properties": {
1636 "feature_id": 38,
1637 "overture_id": "4a869c37-9dae-4491-b2da-57ebd037fa34",
1638 "name_primary": "",
1639 "building_class": "",
1640 "height": null
1641 }
1642 },
1643 {
1644 "type": "Feature",
1645 "geometry": {
1646 "type": "Polygon",
1647 "coordinates": [
1648 [
1649 [
1650 139.7032393,
1651 35.661222
1652 ],
1653 [
1654 139.7032429,
1655 35.6611713
1656 ],
1657 [
1658 139.7031821,
1659 35.6611684
1660 ],
1661 [
1662 139.7031897,
1663 35.661063
1664 ],
1665 [
1666 139.703045,
1667 35.6610561
1668 ],
1669 [
1670 139.7030194,
1671 35.6610863
1672 ],
1673 [
1674 139.7030104,
1675 35.6612111
1676 ],
1677 [
1678 139.7032393,
1679 35.661222
1680 ]
1681 ]
1682 ]
1683 },
1684 "properties": {
1685 "feature_id": 39,
1686 "overture_id": "4bc8d2f7-5dea-43bb-8c08-c98e8d4bea5a",
1687 "name_primary": "",
1688 "building_class": "",
1689 "height": null
1690 }
1691 },
1692 {
1693 "type": "Feature",
1694 "geometry": {
1695 "type": "Polygon",
1696 "coordinates": [
1697 [
1698 [
1699 139.7016849,
1700 35.6589119
1701 ],
1702 [
1703 139.7018688,
1704 35.6589415
1705 ],
1706 [
1707 139.7025716,
1708 35.659134
1709 ],
1710 [
1711 139.7027083,
1712 35.6591743
1713 ],
1714 [
1715 139.7029043,
1716 35.6592329
1717 ],
1718 [
1719 139.7029272,
1720 35.6591822
1721 ],
1722 [
1723 139.7030941,
1724 35.6592319
1725 ],
1726 [
1727 139.7031217,
1728 35.6591708
1729 ],
1730 [
1731 139.7029479,
1732 35.6591191
1733 ],
1734 [
1735 139.7029598,
1736 35.6590926
1737 ],
1738 [
1739 139.7029783,
1740 35.6590516
1741 ],
1742 [
1743 139.7028946,
1744 35.6590267
1745 ],
1746 [
1747 139.7027884,
1748 35.6589949
1749 ],
1750 [
1751 139.7027193,
1752 35.6589745
1753 ],
1754 [
1755 139.7026517,
1756 35.6589546
1757 ],
1758 [
1759 139.7019458,
1760 35.6587547
1761 ],
1762 [
1763 139.7018444,
1764 35.6587139
1765 ],
1766 [
1767 139.7018099,
1768 35.6587038
1769 ],
1770 [
1771 139.7017828,
1772 35.6586959
1773 ],
1774 [
1775 139.7017528,
1776 35.6587635
1777 ],
1778 [
1779 139.7017416,
1780 35.6587888
1781 ],
1782 [
1783 139.701723,
1784 35.6588305
1785 ],
1786 [
1787 139.7017079,
1788 35.6588632
1789 ],
1790 [
1791 139.7016849,
1792 35.6589119
1793 ]
1794 ]
1795 ]
1796 },
1797 "properties": {
1798 "feature_id": 40,
1799 "overture_id": "4bde4bdb-06f2-424c-bf26-beba7c3197a1",
1800 "name_primary": "",
1801 "building_class": "train_station",
1802 "height": null
1803 }
1804 },
1805 {
1806 "type": "Feature",
1807 "geometry": {
1808 "type": "Polygon",
1809 "coordinates": [
1810 [
1811 [
1812 139.7024633,
1813 35.6616257
1814 ],
1815 [
1816 139.7025677,
1817 35.6616273
1818 ],
1819 [
1820 139.702566,
1821 35.6616987
1822 ],
1823 [
1824 139.7026626,
1825 35.6617002
1826 ],
1827 [
1828 139.7026643,
1829 35.6616276
1830 ],
1831 [
1832 139.7028009,
1833 35.6616297
1834 ],
1835 [
1836 139.702809,
1837 35.6612835
1838 ],
1839 [
1840 139.7025611,
1841 35.6612797
1842 ],
1843 [
1844 139.7024599,
1845 35.6612781
1846 ],
1847 [
1848 139.7024239,
1849 35.6612776
1850 ],
1851 [
1852 139.7024158,
1853 35.661625
1854 ],
1855 [
1856 139.7024633,
1857 35.6616257
1858 ]
1859 ]
1860 ]
1861 },
1862 "properties": {
1863 "feature_id": 41,
1864 "overture_id": "4e2a0457-f765-4720-9ce8-91a2d840df12",
1865 "name_primary": "メトロプラザ",
1866 "building_class": "retail",
1867 "height": null
1868 }
1869 },
1870 {
1871 "type": "Feature",
1872 "geometry": {
1873 "type": "Polygon",
1874 "coordinates": [
1875 [
1876 [
1877 139.7010831,
1878 35.6603762
1879 ],
1880 [
1881 139.7011033,
1882 35.6603517
1883 ],
1884 [
1885 139.7010953,
1886 35.6602023
1887 ],
1888 [
1889 139.7009273,
1890 35.6602322
1891 ],
1892 [
1893 139.7009655,
1894 35.6603868
1895 ],
1896 [
1897 139.7010831,
1898 35.6603762
1899 ]
1900 ]
1901 ]
1902 },
1903 "properties": {
1904 "feature_id": 42,
1905 "overture_id": "4f0c9574-02d3-4e96-9bf7-6dd1591abf91",
1906 "name_primary": "片倉コープアグリ渋谷ビル",
1907 "building_class": "",
1908 "height": null
1909 }
1910 },
1911 {
1912 "type": "Feature",
1913 "geometry": {
1914 "type": "Polygon",
1915 "coordinates": [
1916 [
1917 [
1918 139.7035915,
1919 35.6598497
1920 ],
1921 [
1922 139.7034394,
1923 35.6598268
1924 ],
1925 [
1926 139.7033764,
1927 35.6600831
1928 ],
1929 [
1930 139.7035744,
1931 35.6601345
1932 ],
1933 [
1934 139.7036257,
1935 35.6599265
1936 ],
1937 [
1938 139.7035732,
1939 35.659915
1940 ],
1941 [
1942 139.7035915,
1943 35.6598497
1944 ]
1945 ]
1946 ]
1947 },
1948 "properties": {
1949 "feature_id": 43,
1950 "overture_id": "53844578-b177-4e37-b317-b7246218eb37",
1951 "name_primary": "",
1952 "building_class": "",
1953 "height": null
1954 }
1955 },
1956 {
1957 "type": "Feature",
1958 "geometry": {
1959 "type": "Polygon",
1960 "coordinates": [
1961 [
1962 [
1963 139.7021698,
1964 35.6604838
1965 ],
1966 [
1967 139.7021721,
1968 35.6604121
1969 ],
1970 [
1971 139.7018589,
1972 35.6604055
1973 ],
1974 [
1975 139.7018566,
1976 35.6604771
1977 ],
1978 [
1979 139.7021698,
1980 35.6604838
1981 ]
1982 ]
1983 ]
1984 },
1985 "properties": {
1986 "feature_id": 44,
1987 "overture_id": "5534e35f-f358-47af-b7d7-fd3177c0d105",
1988 "name_primary": "渋谷東京海上日動ビル",
1989 "building_class": "",
1990 "height": null
1991 }
1992 },
1993 {
1994 "type": "Feature",
1995 "geometry": {
1996 "type": "Polygon",
1997 "coordinates": [
1998 [
1999 [
2000 139.7015988,
<system-reminder>Showed lines 1-2000 of 4430. Re-call Read with offset=2001 to continue, or raise limit.</system-reminder>
0:11
Let me continue reading the file to see all the features.
0:11
Read
/work/tokyo_buildings_legacy.geojson
2001 35.6600799
2002 ],
2003 [
2004 139.7015895,
2005 35.6599697
2006 ],
2007 [
2008 139.7015572,
2009 35.6599715
2010 ],
2011 [
2012 139.7015665,
2013 35.6600817
2014 ],
2015 [
2016 139.7015988,
2017 35.6600799
2018 ]
2019 ]
2020 ]
2021 },
2022 "properties": {
2023 "feature_id": 45,
2024 "overture_id": "59c3ec57-e75b-4ed5-ad20-9d686373d10d",
2025 "name_primary": "",
2026 "building_class": "",
2027 "height": null
2028 }
2029 },
2030 {
2031 "type": "Feature",
2032 "geometry": {
2033 "type": "Polygon",
2034 "coordinates": [
2035 [
2036 [
2037 139.7001495,
2038 35.6593448
2039 ],
2040 [
2041 139.7001684,
2042 35.6593438
2043 ],
2044 [
2045 139.7001615,
2046 35.6592617
2047 ],
2048 [
2049 139.7001232,
2050 35.6592638
2051 ],
2052 [
2053 139.7001301,
2054 35.6593459
2055 ],
2056 [
2057 139.7001495,
2058 35.6593448
2059 ]
2060 ]
2061 ]
2062 },
2063 "properties": {
2064 "feature_id": 46,
2065 "overture_id": "5b6bfe3f-9cb3-4a39-9943-8fb35ee33b3b",
2066 "name_primary": "",
2067 "building_class": "",
2068 "height": null
2069 }
2070 },
2071 {
2072 "type": "Feature",
2073 "geometry": {
2074 "type": "Polygon",
2075 "coordinates": [
2076 [
2077 [
2078 139.7004161,
2079 35.6597005
2080 ],
2081 [
2082 139.7005037,
2083 35.659711
2084 ],
2085 [
2086 139.7005066,
2087 35.6596952
2088 ],
2089 [
2090 139.7005093,
2091 35.6596803
2092 ],
2093 [
2094 139.7004216,
2095 35.6596698
2096 ],
2097 [
2098 139.7004161,
2099 35.6597005
2100 ]
2101 ]
2102 ]
2103 },
2104 "properties": {
2105 "feature_id": 47,
2106 "overture_id": "5b78aaa2-f38b-489b-b588-1fca076f9241",
2107 "name_primary": "",
2108 "building_class": "",
2109 "height": null
2110 }
2111 },
2112 {
2113 "type": "Feature",
2114 "geometry": {
2115 "type": "Polygon",
2116 "coordinates": [
2117 [
2118 [
2119 139.7034264,
2120 35.6614296
2121 ],
2122 [
2123 139.7033562,
2124 35.6612814
2125 ],
2126 [
2127 139.7032594,
2128 35.6613117
2129 ],
2130 [
2131 139.7032582,
2132 35.6613416
2133 ],
2134 [
2135 139.703274,
2136 35.661375
2137 ],
2138 [
2139 139.7032596,
2140 35.6613795
2141 ],
2142 [
2143 139.7033019,
2144 35.6614686
2145 ],
2146 [
2147 139.7034264,
2148 35.6614296
2149 ]
2150 ]
2151 ]
2152 },
2153 "properties": {
2154 "feature_id": 48,
2155 "overture_id": "5e75effe-ff66-4443-b4d4-68920884d47c",
2156 "name_primary": "TOKYU REIT渋谷宮下公園ビル",
2157 "building_class": "",
2158 "height": null
2159 }
2160 },
2161 {
2162 "type": "Feature",
2163 "geometry": {
2164 "type": "Polygon",
2165 "coordinates": [
2166 [
2167 [
2168 139.7002847,
2169 35.6617631
2170 ],
2171 [
2172 139.7002761,
2173 35.6615933
2174 ],
2175 [
2176 139.7000762,
2177 35.6616993
2178 ],
2179 [
2180 139.7000369,
2181 35.6616656
2182 ],
2183 [
2184 139.7000179,
2185 35.6616806
2186 ],
2187 [
2188 139.7001307,
2189 35.6617682
2190 ],
2191 [
2192 139.7002847,
2193 35.6617631
2194 ]
2195 ]
2196 ]
2197 },
2198 "properties": {
2199 "feature_id": 49,
2200 "overture_id": "61011c14-0a71-4cea-8954-e5d77eb1162c",
2201 "name_primary": "",
2202 "building_class": "",
2203 "height": null
2204 }
2205 },
2206 {
2207 "type": "Feature",
2208 "geometry": {
2209 "type": "Polygon",
2210 "coordinates": [
2211 [
2212 [
2213 139.7036066,
2214 35.6604974
2215 ],
2216 [
2217 139.7036375,
2218 35.6604001
2219 ],
2220 [
2221 139.7035278,
2222 35.6603771
2223 ],
2224 [
2225 139.7034969,
2226 35.6604744
2227 ],
2228 [
2229 139.7036066,
2230 35.6604974
2231 ]
2232 ],
2233 [
2234 [
2235 139.70356017,
2236 35.660436047
2237 ],
2238 [
2239 139.7035672,
2240 35.660436047
2241 ],
2242 [
2243 139.7035672,
2244 35.660442061999994
2245 ],
2246 [
2247 139.70356017,
2248 35.660442061999994
2249 ],
2250 [
2251 139.70356017,
2252 35.660436047
2253 ]
2254 ]
2255 ]
2256 },
2257 "properties": {
2258 "feature_id": 50,
2259 "overture_id": "61580917-74ae-4b83-9246-cef727d5593a",
2260 "name_primary": "御嶽神社",
2261 "building_class": "",
2262 "height": null
2263 }
2264 },
2265 {
2266 "type": "Feature",
2267 "geometry": {
2268 "type": "Polygon",
2269 "coordinates": [
2270 [
2271 [
2272 139.7020318,
2273 35.6612212
2274 ],
2275 [
2276 139.7021248,
2277 35.6612209
2278 ],
2279 [
2280 139.7021246,
2281 35.6611898
2282 ],
2283 [
2284 139.7020316,
2285 35.6611901
2286 ],
2287 [
2288 139.7020318,
2289 35.6612212
2290 ]
2291 ]
2292 ]
2293 },
2294 "properties": {
2295 "feature_id": 51,
2296 "overture_id": "645b1a3c-444a-4326-b001-8191f3048842",
2297 "name_primary": "",
2298 "building_class": "",
2299 "height": null
2300 }
2301 },
2302 {
2303 "type": "Feature",
2304 "geometry": {
2305 "type": "Polygon",
2306 "coordinates": [
2307 [
2308 [
2309 139.702883,
2310 35.6609952
2311 ],
2312 [
2313 139.7028842,
2314 35.6609148
2315 ],
2316 [
2317 139.7027806,
2318 35.6609138
2319 ],
2320 [
2321 139.7027793,
2322 35.6609942
2323 ],
2324 [
2325 139.702883,
2326 35.6609952
2327 ]
2328 ]
2329 ]
2330 },
2331 "properties": {
2332 "feature_id": 52,
2333 "overture_id": "661dd481-710c-4828-a6ea-b3308054064d",
2334 "name_primary": "",
2335 "building_class": "",
2336 "height": null
2337 }
2338 },
2339 {
2340 "type": "Feature",
2341 "geometry": {
2342 "type": "Polygon",
2343 "coordinates": [
2344 [
2345 [
2346 139.703266,
2347 35.660986
2348 ],
2349 [
2350 139.7032627,
2351 35.6608665
2352 ],
2353 [
2354 139.7031242,
2355 35.6608691
2356 ],
2357 [
2358 139.7031276,
2359 35.6609886
2360 ],
2361 [
2362 139.703266,
2363 35.660986
2364 ]
2365 ]
2366 ]
2367 },
2368 "properties": {
2369 "feature_id": 53,
2370 "overture_id": "67455a45-4e7f-4345-8409-1393d9eafa0a",
2371 "name_primary": "",
2372 "building_class": "",
2373 "height": null
2374 }
2375 },
2376 {
2377 "type": "Feature",
2378 "geometry": {
2379 "type": "Polygon",
2380 "coordinates": [
2381 [
2382 [
2383 139.7005562,
2384 35.6599309
2385 ],
2386 [
2387 139.7005491,
2388 35.6599071
2389 ],
2390 [
2391 139.7005115,
2392 35.6597812
2393 ],
2394 [
2395 139.7004488,
2396 35.6597691
2397 ],
2398 [
2399 139.7003812,
2400 35.6597603
2401 ],
2402 [
2403 139.700316,
2404 35.6597671
2405 ],
2406 [
2407 139.7001662,
2408 35.6598871
2409 ],
2410 [
2411 139.7002254,
2412 35.6600075
2413 ],
2414 [
2415 139.7005562,
2416 35.6599309
2417 ]
2418 ]
2419 ]
2420 },
2421 "properties": {
2422 "feature_id": 54,
2423 "overture_id": "6998eb53-fa9a-4061-9dd1-4f7b07cec7aa",
2424 "name_primary": "Q-FRONT",
2425 "building_class": "commercial",
2426 "height": null
2427 }
2428 },
2429 {
2430 "type": "Feature",
2431 "geometry": {
2432 "type": "Polygon",
2433 "coordinates": [
2434 [
2435 [
2436 139.7011935,
2437 35.6614555
2438 ],
2439 [
2440 139.7011928,
2441 35.6614179
2442 ],
2443 [
2444 139.7012233,
2445 35.6614174
2446 ],
2447 [
2448 139.7012239,
2449 35.6613726
2450 ],
2451 [
2452 139.7009513,
2453 35.6614021
2454 ],
2455 [
2456 139.7009594,
2457 35.6615263
2458 ],
2459 [
2460 139.7011935,
2461 35.6614555
2462 ]
2463 ]
2464 ]
2465 },
2466 "properties": {
2467 "feature_id": 55,
2468 "overture_id": "6aa012b4-4c54-42d6-8360-6d39d71ab7c8",
2469 "name_primary": "皆川ビル",
2470 "building_class": "",
2471 "height": null
2472 }
2473 },
2474 {
2475 "type": "Feature",
2476 "geometry": {
2477 "type": "Polygon",
2478 "coordinates": [
2479 [
2480 [
2481 139.7034011,
2482 35.6601755
2483 ],
2484 [
2485 139.7032931,
2486 35.6601536
2487 ],
2488 [
2489 139.7032791,
2490 35.6601983
2491 ],
2492 [
2493 139.7031332,
2494 35.6601681
2495 ],
2496 [
2497 139.7031206,
2498 35.6602223
2499 ],
2500 [
2501 139.703112,
2502 35.6603768
2503 ],
2504 [
2505 139.7031434,
2506 35.6604089
2507 ],
2508 [
2509 139.7033225,
2510 35.6604436
2511 ],
2512 [
2513 139.7034011,
2514 35.6601755
2515 ]
2516 ]
2517 ]
2518 },
2519 "properties": {
2520 "feature_id": 56,
2521 "overture_id": "6aa3fac3-7746-4797-b3b3-72872ff77acf",
2522 "name_primary": "",
2523 "building_class": "",
2524 "height": null
2525 }
2526 },
2527 {
2528 "type": "Feature",
2529 "geometry": {
2530 "type": "Polygon",
2531 "coordinates": [
2532 [
2533 [
2534 139.7020319,
2535 35.6612494
2536 ],
2537 [
2538 139.7020466,
2539 35.6612494
2540 ],
2541 [
2542 139.7021249,
2543 35.6612491
2544 ],
2545 [
2546 139.7021248,
2547 35.6612209
2548 ],
2549 [
2550 139.7020318,
2551 35.6612212
2552 ],
2553 [
2554 139.7020319,
2555 35.6612494
2556 ]
2557 ]
2558 ]
2559 },
2560 "properties": {
2561 "feature_id": 57,
2562 "overture_id": "6b30e1cd-c94a-4591-bcfe-f5b82e5650f5",
2563 "name_primary": "",
2564 "building_class": "",
2565 "height": null
2566 }
2567 },
2568 {
2569 "type": "Feature",
2570 "geometry": {
2571 "type": "Polygon",
2572 "coordinates": [
2573 [
2574 [
2575 139.7036324,
2576 35.6599182
2577 ],
2578 [
2579 139.7036485,
2580 35.6598638
2581 ],
2582 [
2583 139.7035995,
2584 35.6598542
2585 ],
2586 [
2587 139.7035834,
2588 35.6599087
2589 ],
2590 [
2591 139.7036324,
2592 35.6599182
2593 ]
2594 ]
2595 ]
2596 },
2597 "properties": {
2598 "feature_id": 58,
2599 "overture_id": "6ca5b54a-24ce-4c39-88fd-95d84b28f6d9",
2600 "name_primary": "",
2601 "building_class": "",
2602 "height": null
2603 }
2604 },
2605 {
2606 "type": "Feature",
2607 "geometry": {
2608 "type": "Polygon",
2609 "coordinates": [
2610 [
2611 [
2612 139.7032123,
2613 35.661154
2614 ],
2615 [
2616 139.7032593,
2617 35.6611548
2618 ],
2619 [
2620 139.7032595,
2621 35.6611467
2622 ],
2623 [
2624 139.7032884,
2625 35.6611472
2626 ],
2627 [
2628 139.7032904,
2629 35.6610657
2630 ],
2631 [
2632 139.7032145,
2633 35.6610645
2634 ],
2635 [
2636 139.7032123,
2637 35.661154
2638 ]
2639 ]
2640 ]
2641 },
2642 "properties": {
2643 "feature_id": 59,
2644 "overture_id": "6cd8611b-c7ec-477e-803e-9280d692a195",
2645 "name_primary": "ACN渋谷ビル",
2646 "building_class": "",
2647 "height": null
2648 }
2649 },
2650 {
2651 "type": "Feature",
2652 "geometry": {
2653 "type": "Polygon",
2654 "coordinates": [
2655 [
2656 [
2657 139.7027544,
2658 35.658316
2659 ],
2660 [
2661 139.7027782,
2662 35.6583244
2663 ],
2664 [
2665 139.7028262,
2666 35.6582352
2667 ],
2668 [
2669 139.7027786,
2670 35.6582183
2671 ],
2672 [
2673 139.7027306,
2674 35.6583075
2675 ],
2676 [
2677 139.7027544,
2678 35.658316
2679 ]
2680 ]
2681 ]
2682 },
2683 "properties": {
2684 "feature_id": 60,
2685 "overture_id": "6d10a2ff-1714-4551-a96f-8ffee3f75886",
2686 "name_primary": "",
2687 "building_class": "",
2688 "height": null
2689 }
2690 },
2691 {
2692 "type": "Feature",
2693 "geometry": {
2694 "type": "Polygon",
2695 "coordinates": [
2696 [
2697 [
2698 139.7035702,
2699 35.6603621
2700 ],
2701 [
2702 139.7035899,
2703 35.6603009
2704 ],
2705 [
2706 139.7035426,
2707 35.6602908
2708 ],
2709 [
2710 139.7035228,
2711 35.660352
2712 ],
2713 [
2714 139.7035702,
2715 35.6603621
2716 ]
2717 ]
2718 ]
2719 },
2720 "properties": {
2721 "feature_id": 61,
2722 "overture_id": "6d8d6ce8-45ad-488e-b930-122faab4db7d",
2723 "name_primary": "",
2724 "building_class": "",
2725 "height": null
2726 }
2727 },
2728 {
2729 "type": "Feature",
2730 "geometry": {
2731 "type": "Polygon",
2732 "coordinates": [
2733 [
2734 [
2735 139.7038657,
2736 35.6602701
2737 ],
2738 [
2739 139.703755,
2740 35.6602405
2741 ],
2742 [
2743 139.7036692,
2744 35.6604518
2745 ],
2746 [
2747 139.7036385,
2748 35.6604435
2749 ],
2750 [
2751 139.7036144,
2752 35.6605029
2753 ],
2754 [
2755 139.7037559,
2756 35.6605408
2757 ],
2758 [
2759 139.7038657,
2760 35.6602701
2761 ]
2762 ]
2763 ]
2764 },
2765 "properties": {
2766 "feature_id": 62,
2767 "overture_id": "6e285200-aae6-4a1f-8086-ae8e3ea6b753",
2768 "name_primary": "",
2769 "building_class": "",
2770 "height": null
2771 }
2772 },
2773 {
2774 "type": "Feature",
2775 "geometry": {
2776 "type": "Polygon",
2777 "coordinates": [
2778 [
2779 [
2780 139.7020083,
2781 35.6610478
2782 ],
2783 [
2784 139.702007,
2785 35.6610781
2786 ],
2787 [
2788 139.7020231,
2789 35.6610786
2790 ],
2791 [
2792 139.7021317,
2793 35.6610817
2794 ],
2795 [
2796 139.7021489,
2797 35.6610822
2798 ],
2799 [
2800 139.7021502,
2801 35.6610518
2802 ],
2803 [
2804 139.7020083,
2805 35.6610478
2806 ]
2807 ]
2808 ]
2809 },
2810 "properties": {
2811 "feature_id": 63,
2812 "overture_id": "6ef16aa7-f5a5-427d-a6d0-fff4667fe7dd",
2813 "name_primary": "",
2814 "building_class": "",
2815 "height": null
2816 }
2817 },
2818 {
2819 "type": "Feature",
2820 "geometry": {
2821 "type": "Polygon",
2822 "coordinates": [
2823 [
2824 [
2825 139.7011478,
2826 35.6616994
2827 ],
2828 [
2829 139.7011547,
2830 35.6617205
2831 ],
2832 [
2833 139.7012199,
2834 35.6617066
2835 ],
2836 [
2837 139.701213,
2838 35.6616854
2839 ],
2840 [
2841 139.7011478,
2842 35.6616994
2843 ]
2844 ]
2845 ]
2846 },
2847 "properties": {
2848 "feature_id": 64,
2849 "overture_id": "6ef585bc-c420-4296-bf8f-fdf042d5b87c",
2850 "name_primary": "",
2851 "building_class": "",
2852 "height": null
2853 }
2854 },
2855 {
2856 "type": "Feature",
2857 "geometry": {
2858 "type": "Polygon",
2859 "coordinates": [
2860 [
2861 [
2862 139.7031054,
2863 35.6592975
2864 ],
2865 [
2866 139.7029117,
2867 35.6592535
2868 ],
2869 [
2870 139.7028717,
2871 35.6593554
2872 ],
2873 [
2874 139.7027421,
2875 35.6593123
2876 ],
2877 [
2878 139.7027013,
2879 35.6593961
2880 ],
2881 [
2882 139.7027606,
2883 35.6594919
2884 ],
2885 [
2886 139.7030233,
2887 35.6595358
2888 ],
2889 [
2890 139.7031054,
2891 35.6592975
2892 ]
2893 ]
2894 ]
2895 },
2896 "properties": {
2897 "feature_id": 65,
2898 "overture_id": "6f395c65-f756-4f7b-88a1-1d7df688fac4",
2899 "name_primary": "りそな銀行",
2900 "building_class": "",
2901 "height": null
2902 }
2903 },
2904 {
2905 "type": "Feature",
2906 "geometry": {
2907 "type": "Polygon",
2908 "coordinates": [
2909 [
2910 [
2911 139.7034335,
2912 35.6583252
2913 ],
2914 [
2915 139.7033682,
2916 35.6584759
2917 ],
2918 [
2919 139.703396,
2920 35.6584838
2921 ],
2922 [
2923 139.7034658,
2924 35.6583281
2925 ],
2926 [
2927 139.7034335,
2928 35.6583252
2929 ]
2930 ]
2931 ]
2932 },
2933 "properties": {
2934 "feature_id": 66,
2935 "overture_id": "6fdf01b8-82cb-44eb-ab07-4ad61bec7f5a",
2936 "name_primary": "",
2937 "building_class": "",
2938 "height": null
2939 }
2940 },
2941 {
2942 "type": "Feature",
2943 "geometry": {
2944 "type": "Polygon",
2945 "coordinates": [
2946 [
2947 [
2948 139.7021502,
2949 35.6610518
2950 ],
2951 [
2952 139.7021541,
2953 35.6609604
2954 ],
2955 [
2956 139.7020123,
2957 35.6609564
2958 ],
2959 [
2960 139.7020083,
2961 35.6610478
2962 ],
2963 [
2964 139.7021502,
2965 35.6610518
2966 ]
2967 ]
2968 ]
2969 },
2970 "properties": {
2971 "feature_id": 67,
2972 "overture_id": "70e2fc39-4d78-437d-bc06-1de2570289d9",
2973 "name_primary": "",
2974 "building_class": "",
2975 "height": null
2976 }
2977 },
2978 {
2979 "type": "Feature",
2980 "geometry": {
2981 "type": "Polygon",
2982 "coordinates": [
2983 [
2984 [
2985 139.7021232,
2986 35.6609483
2987 ],
2988 [
2989 139.7021244,
2990 35.6608638
2991 ],
2992 [
2993 139.7019709,
2994 35.6608624
2995 ],
2996 [
2997 139.7019697,
2998 35.6609468
2999 ],
3000 [
3001 139.7021232,
3002 35.6609483
3003 ]
3004 ]
3005 ]
3006 },
3007 "properties": {
3008 "feature_id": 68,
3009 "overture_id": "71b197e5-9798-4fe4-b7a0-886c70efef44",
3010 "name_primary": "",
3011 "building_class": "",
3012 "height": null
3013 }
3014 },
3015 {
3016 "type": "Feature",
3017 "geometry": {
3018 "type": "Polygon",
3019 "coordinates": [
3020 [
3021 [
3022 139.702909,
3023 35.6598936
3024 ],
3025 [
3026 139.7029115,
3027 35.6597397
3028 ],
3029 [
3030 139.7028376,
3031 35.6597296
3032 ],
3033 [
3034 139.7028238,
3035 35.6598893
3036 ],
3037 [
3038 139.702909,
3039 35.6598936
3040 ]
3041 ]
3042 ]
3043 },
3044 "properties": {
3045 "feature_id": 69,
3046 "overture_id": "72e076a2-43ab-48b2-b71a-b6d32a471ea6",
3047 "name_primary": "",
3048 "building_class": "",
3049 "height": null
3050 }
3051 },
3052 {
3053 "type": "Feature",
3054 "geometry": {
3055 "type": "Polygon",
3056 "coordinates": [
3057 [
3058 [
3059 139.7008278,
3060 35.659573
3061 ],
3062 [
3063 139.700801,
3064 35.6595533
3065 ],
3066 [
3067 139.7007424,
3068 35.6596059
3069 ],
3070 [
3071 139.7007564,
3072 35.6596162
3073 ],
3074 [
3075 139.7007692,
3076 35.6596256
3077 ],
3078 [
3079 139.7008278,
3080 35.659573
3081 ]
3082 ]
3083 ]
3084 },
3085 "properties": {
3086 "feature_id": 70,
3087 "overture_id": "738b9c6f-6187-4bda-80d8-57bd648ddaaa",
3088 "name_primary": "",
3089 "building_class": "",
3090 "height": null
3091 }
3092 },
3093 {
3094 "type": "Feature",
3095 "geometry": {
3096 "type": "Polygon",
3097 "coordinates": [
3098 [
3099 [
3100 139.7020767,
3101 35.6617224
3102 ],
3103 [
3104 139.7020097,
3105 35.6617215
3106 ],
3107 [
3108 139.7020093,
3109 35.6617433
3110 ],
3111 [
3112 139.7020763,
3113 35.6617441
3114 ],
3115 [
3116 139.7020767,
3117 35.6617224
3118 ]
3119 ]
3120 ]
3121 },
3122 "properties": {
3123 "feature_id": 71,
3124 "overture_id": "74bdb30a-2005-4483-8684-9d64aad676eb",
3125 "name_primary": "",
3126 "building_class": "",
3127 "height": null
3128 }
3129 },
3130 {
3131 "type": "Feature",
3132 "geometry": {
3133 "type": "Polygon",
3134 "coordinates": [
3135 [
3136 [
3137 139.7024599,
3138 35.6612781
3139 ],
3140 [
3141 139.7025611,
3142 35.6612797
3143 ],
3144 [
3145 139.7025624,
3146 35.6612231
3147 ],
3148 [
3149 139.7024613,
3150 35.6612215
3151 ],
3152 [
3153 139.7024599,
3154 35.6612781
3155 ]
3156 ]
3157 ]
3158 },
3159 "properties": {
3160 "feature_id": 72,
3161 "overture_id": "75ca326e-bb46-4f55-870c-9b7ef1888980",
3162 "name_primary": "",
3163 "building_class": "",
3164 "height": null
3165 }
3166 },
3167 {
3168 "type": "Feature",
3169 "geometry": {
3170 "type": "Polygon",
3171 "coordinates": [
3172 [
3173 [
3174 139.7030505,
3175 35.6609683
3176 ],
3177 [
3178 139.7030509,
3179 35.6609408
3180 ],
3181 [
3182 139.7031154,
3183 35.6609415
3184 ],
3185 [
3186 139.7031172,
3187 35.6608223
3188 ],
3189 [
3190 139.7030527,
3191 35.6608216
3192 ],
3193 [
3194 139.7030533,
3195 35.6607852
3196 ],
3197 [
3198 139.7029214,
3199 35.6607839
3200 ],
3201 [
3202 139.7029186,
3203 35.6609669
3204 ],
3205 [
3206 139.7030505,
3207 35.6609683
3208 ]
3209 ]
3210 ]
3211 },
3212 "properties": {
3213 "feature_id": 73,
3214 "overture_id": "75f893c3-f772-4051-a328-1435509505de",
3215 "name_primary": "レイドアウト渋谷",
3216 "building_class": "",
3217 "height": null
3218 }
3219 },
3220 {
3221 "type": "Feature",
3222 "geometry": {
3223 "type": "Polygon",
3224 "coordinates": [
3225 [
3226 [
3227 139.7033678,
3228 35.6584623
3229 ],
3230 [
3231 139.7034246,
3232 35.6583194
3233 ],
3234 [
3235 139.7033638,
3236 35.6583179
3237 ],
3238 [
3239 139.7033071,
3240 35.6584448
3241 ],
3242 [
3243 139.7033678,
3244 35.6584623
3245 ]
3246 ],
3247 [
3248 [
3249 139.7033635,
3250 35.658387212
3251 ],
3252 [
3253 139.703369375,
3254 35.658387212
3255 ],
3256 [
3257 139.703369375,
3258 35.658394432
3259 ],
3260 [
3261 139.7033635,
3262 35.658394432
3263 ],
3264 [
3265 139.7033635,
3266 35.658387212
3267 ]
3268 ]
3269 ]
3270 },
3271 "properties": {
3272 "feature_id": 74,
3273 "overture_id": "77734d6c-f1dd-4175-9453-02cd9f1b3d61",
3274 "name_primary": "渋谷二丁目ビル",
3275 "building_class": "",
3276 "height": null
3277 }
3278 },
3279 {
3280 "type": "Feature",
3281 "geometry": {
3282 "type": "Polygon",
3283 "coordinates": [
3284 [
3285 [
3286 139.7033517,
3287 35.6583224
3288 ],
3289 [
3290 139.7033072,
3291 35.6583139
3292 ],
3293 [
3294 139.7032034,
3295 35.6583641
3296 ],
3297 [
3298 139.7031944,
3299 35.6583918
3300 ],
3301 [
3302 139.7033085,
3303 35.6584161
3304 ],
3305 [
3306 139.7033517,
3307 35.6583224
3308 ]
3309 ]
3310 ]
3311 },
3312 "properties": {
3313 "feature_id": 75,
3314 "overture_id": "78b1d1eb-36e3-4d81-86ee-ff77ddcfcaa0",
3315 "name_primary": "タキザワビル",
3316 "building_class": "",
3317 "height": null
3318 }
3319 },
3320 {
3321 "type": "Feature",
3322 "geometry": {
3323 "type": "Polygon",
3324 "coordinates": [
3325 [
3326 [
3327 139.7021761,
3328 35.6600791
3329 ],
3330 [
3331 139.7018297,
3332 35.6600644
3333 ],
3334 [
3335 139.7018146,
3336 35.6602251
3337 ],
3338 [
3339 139.7018488,
3340 35.6603981
3341 ],
3342 [
3343 139.7021541,
3344 35.6604054
3345 ],
3346 [
3347 139.7021761,
3348 35.6600791
3349 ]
3350 ]
3351 ]
3352 },
3353 "properties": {
3354 "feature_id": 76,
3355 "overture_id": "7990b451-66b8-4cb0-8ab8-c37554b52c0d",
3356 "name_primary": "",
3357 "building_class": "",
3358 "height": null
3359 }
3360 },
3361 {
3362 "type": "Feature",
3363 "geometry": {
3364 "type": "Polygon",
3365 "coordinates": [
3366 [
3367 [
3368 139.7029551,
3369 35.660386
3370 ],
3371 [
3372 139.703013,
3373 35.6603516
3374 ],
3375 [
3376 139.703013,
3377 35.6602481
3378 ],
3379 [
3380 139.7024882,
3381 35.6602345
3382 ],
3383 [
3384 139.7024844,
3385 35.6603714
3386 ],
3387 [
3388 139.7029551,
3389 35.660386
3390 ]
3391 ]
3392 ]
3393 },
3394 "properties": {
3395 "feature_id": 77,
3396 "overture_id": "81fe0d3e-7706-4020-a60b-e15d02f84ec1",
3397 "name_primary": "",
3398 "building_class": "",
3399 "height": null
3400 }
3401 },
3402 {
3403 "type": "Feature",
3404 "geometry": {
3405 "type": "Polygon",
3406 "coordinates": [
3407 [
3408 [
3409 139.7029024,
3410 35.6606445
3411 ],
3412 [
3413 139.7026304,
3414 35.6606434
3415 ],
3416 [
3417 139.7026301,
3418 35.6606896
3419 ],
3420 [
3421 139.702457,
3422 35.6606889
3423 ],
3424 [
3425 139.7024558,
3426 35.6608937
3427 ],
3428 [
3429 139.7029009,
3430 35.6608956
3431 ],
3432 [
3433 139.7029024,
3434 35.6606445
3435 ]
3436 ]
3437 ]
3438 },
3439 "properties": {
3440 "feature_id": 78,
3441 "overture_id": "88bfd95d-f055-47ad-85e0-47b4e7cece28",
3442 "name_primary": "",
3443 "building_class": "",
3444 "height": null
3445 }
3446 },
3447 {
3448 "type": "Feature",
3449 "geometry": {
3450 "type": "Polygon",
3451 "coordinates": [
3452 [
3453 [
3454 139.7030348,
3455 35.6599795
3456 ],
3457 [
3458 139.7030389,
3459 35.6599106
3460 ],
3461 [
3462 139.7026973,
3463 35.6598966
3464 ],
3465 [
3466 139.7026948,
3467 35.6599648
3468 ],
3469 [
3470 139.7030348,
3471 35.6599795
3472 ]
3473 ]
3474 ]
3475 },
3476 "properties": {
3477 "feature_id": 79,
3478 "overture_id": "8ab1b50b-4684-4bde-bdf1-32ceec2f7f12",
3479 "name_primary": "",
3480 "building_class": "",
3481 "height": null
3482 }
3483 },
3484 {
3485 "type": "Feature",
3486 "geometry": {
3487 "type": "Polygon",
3488 "coordinates": [
3489 [
3490 [
3491 139.7026054,
3492 35.6611616
3493 ],
3494 [
3495 139.7026055,
3496 35.6611799
3497 ],
3498 [
3499 139.7027067,
3500 35.6611796
3501 ],
3502 [
3503 139.7027066,
3504 35.6611714
3505 ],
3506 [
3507 139.7027811,
3508 35.6611712
3509 ],
3510 [
3511 139.7027804,
3512 35.6610495
3513 ],
3514 [
3515 139.7024476,
3516 35.6610507
3517 ],
3518 [
3519 139.7024482,
3520 35.6611622
3521 ],
3522 [
3523 139.7026054,
3524 35.6611616
3525 ]
3526 ]
3527 ]
3528 },
3529 "properties": {
3530 "feature_id": 80,
3531 "overture_id": "8f65dd0b-5998-4af5-b1ff-347e4ff204a6",
3532 "name_primary": "KIビル",
3533 "building_class": "",
3534 "height": null
3535 }
3536 },
3537 {
3538 "type": "Feature",
3539 "geometry": {
3540 "type": "Polygon",
3541 "coordinates": [
3542 [
3543 [
3544 139.7026221,
3545 35.6606699
3546 ],
3547 [
3548 139.7026224,
3549 35.6606248
3550 ],
3551 [
3552 139.7024743,
3553 35.6606242
3554 ],
3555 [
3556 139.702474,
3557 35.6606693
3558 ],
3559 [
3560 139.7026221,
3561 35.6606699
3562 ]
3563 ]
3564 ]
3565 },
3566 "properties": {
3567 "feature_id": 81,
3568 "overture_id": "8fe251f8-3f24-4f03-83fa-016c97d0253d",
3569 "name_primary": "",
3570 "building_class": "",
3571 "height": null
3572 }
3573 },
3574 {
3575 "type": "Feature",
3576 "geometry": {
3577 "type": "Polygon",
3578 "coordinates": [
3579 [
3580 [
3581 139.7001425,
3582 35.6591487
3583 ],
3584 [
3585 139.700126,
3586 35.6590802
3587 ],
3588 [
3589 139.7001103,
3590 35.6590827
3591 ],
3592 [
3593 139.7000908,
3594 35.6590858
3595 ],
3596 [
3597 139.7001073,
3598 35.6591543
3599 ],
3600 [
3601 139.7001425,
3602 35.6591487
3603 ]
3604 ]
3605 ]
3606 },
3607 "properties": {
3608 "feature_id": 82,
3609 "overture_id": "902f4dee-2632-4432-9d7a-7c9dffe15f73",
3610 "name_primary": "",
3611 "building_class": "",
3612 "height": null
3613 }
3614 },
3615 {
3616 "type": "Feature",
3617 "geometry": {
3618 "type": "Polygon",
3619 "coordinates": [
3620 [
3621 [
3622 139.7038305,
3623 35.6601688
3624 ],
3625 [
3626 139.7039649,
3627 35.6599241
3628 ],
3629 [
3630 139.7038987,
3631 35.6599
3632 ],
3633 [
3634 139.7037642,
3635 35.6601447
3636 ],
3637 [
3638 139.7038305,
3639 35.6601688
3640 ]
3641 ]
3642 ]
3643 },
3644 "properties": {
3645 "feature_id": 83,
3646 "overture_id": "9161a5ae-914a-49e5-8c5a-9aaae2a4b8df",
3647 "name_primary": "CR VITE",
3648 "building_class": "",
3649 "height": null
3650 }
3651 },
3652 {
3653 "type": "Feature",
3654 "geometry": {
3655 "type": "Polygon",
3656 "coordinates": [
3657 [
3658 [
3659 139.7025855,
3660 35.6605365
3661 ],
3662 [
3663 139.702583,
3664 35.660578
3665 ],
3666 [
3667 139.7027924,
3668 35.6605863
3669 ],
3670 [
3671 139.7028011,
3672 35.660446
3673 ],
3674 [
3675 139.7027396,
3676 35.6604437
3677 ],
3678 [
3679 139.7027342,
3680 35.6605424
3681 ],
3682 [
3683 139.7025855,
3684 35.6605365
3685 ]
3686 ]
3687 ]
3688 },
3689 "properties": {
3690 "feature_id": 84,
3691 "overture_id": "91bead1f-166d-4a83-b3f4-c9ce73b701b5",
3692 "name_primary": "東口二葉ビル",
3693 "building_class": "",
3694 "height": null
3695 }
3696 },
3697 {
3698 "type": "Feature",
3699 "geometry": {
3700 "type": "Polygon",
3701 "coordinates": [
3702 [
3703 [
3704 139.7009475,
3705 35.661158
3706 ],
3707 [
3708 139.7011925,
3709 35.661158
3710 ],
3711 [
3712 139.7011925,
3713 35.6610998
3714 ],
3715 [
3716 139.7009475,
3717 35.6610998
3718 ],
3719 [
3720 139.7009475,
3721 35.661158
3722 ]
3723 ]
3724 ]
3725 },
3726 "properties": {
3727 "feature_id": 85,
3728 "overture_id": "93841dfa-6792-4ebe-a85b-3968556e5688",
3729 "name_primary": "岩本ビル",
3730 "building_class": "",
3731 "height": null
3732 }
3733 },
3734 {
3735 "type": "Feature",
3736 "geometry": {
3737 "type": "Polygon",
3738 "coordinates": [
3739 [
3740 [
3741 139.7021806,
3742 35.6600698
3743 ],
3744 [
3745 139.7021906,
3746 35.6599319
3747 ],
3748 [
3749 139.7021856,
3750 35.6598772
3751 ],
3752 [
3753 139.7021755,
3754 35.6598495
3755 ],
3756 [
3757 139.7021565,
3758 35.6598103
3759 ],
3760 [
3761 139.7021324,
3762 35.6597801
3763 ],
3764 [
3765 139.7020771,
3766 35.6597165
3767 ],
3768 [
3769 139.7019918,
3770 35.6597614
3771 ],
3772 [
3773 139.7018944,
3774 35.6597597
3775 ],
3776 [
3777 139.7018843,
3778 35.6598593
3779 ],
3780 [
3781 139.7018381,
3782 35.6598935
3783 ],
3784 [
3785 139.7017106,
3786 35.6598919
3787 ],
3788 [
3789 139.7017706,
3790 35.6600507
3791 ],
3792 [
3793 139.7021806,
3794 35.6600698
3795 ]
3796 ]
3797 ]
3798 },
3799 "properties": {
3800 "feature_id": 86,
3801 "overture_id": "96208b99-36ca-4cbe-9bf5-2f9335a01a4e",
3802 "name_primary": "渋谷東映プラザ",
3803 "building_class": "commercial",
3804 "height": null
3805 }
3806 },
3807 {
3808 "type": "Feature",
3809 "geometry": {
3810 "type": "Polygon",
3811 "coordinates": [
3812 [
3813 [
3814 139.7026801,
3815 35.6610075
3816 ],
3817 [
3818 139.7026817,
3819 35.6609056
3820 ],
3821 [
3822 139.7025904,
3823 35.6609047
3824 ],
3825 [
3826 139.7025889,
3827 35.6610066
3828 ],
3829 [
3830 139.7026801,
3831 35.6610075
3832 ]
3833 ]
3834 ]
3835 },
3836 "properties": {
3837 "feature_id": 87,
3838 "overture_id": "974813f3-9ea0-4312-8453-6c63eb90e049",
3839 "name_primary": "",
3840 "building_class": "",
3841 "height": null
3842 }
3843 },
3844 {
3845 "type": "Feature",
3846 "geometry": {
3847 "type": "Polygon",
3848 "coordinates": [
3849 [
3850 [
3851 139.7018253,
3852 35.6598757
3853 ],
3854 [
3855 139.7018613,
3856 35.6598557
3857 ],
3858 [
3859 139.7019028,
3860 35.6596006
3861 ],
3862 [
3863 139.7017041,
3864 35.6595839
3865 ],
3866 [
3867 139.7016873,
3868 35.6596766
3869 ],
3870 [
3871 139.7016798,
3872 35.6596761
3873 ],
3874 [
3875 139.7016746,
3876 35.659736
3877 ],
3878 [
3879 139.7016959,
3880 35.659873
3881 ],
3882 [
3883 139.7018253,
3884 35.6598757
3885 ]
3886 ]
3887 ]
3888 },
3889 "properties": {
3890 "feature_id": 88,
3891 "overture_id": "97c09be6-2435-4335-a171-994f48c14b9b",
3892 "name_primary": "渋谷パークサイド共同ビル",
3893 "building_class": "",
3894 "height": null
3895 }
3896 },
3897 {
3898 "type": "Feature",
3899 "geometry": {
3900 "type": "Polygon",
3901 "coordinates": [
3902 [
3903 [
3904 139.7001854,
3905 35.6612983
3906 ],
3907 [
3908 139.7003771,
3909 35.661148
3910 ],
3911 [
3912 139.7002693,
3913 35.6610535
3914 ],
3915 [
3916 139.7000709,
3917 35.6611994
3918 ],
3919 [
3920 139.7001854,
3921 35.6612983
3922 ]
3923 ]
3924 ]
3925 },
3926 "properties": {
3927 "feature_id": 89,
3928 "overture_id": "99974e62-f4d0-45f3-9dfc-ddd6176119f9",
3929 "name_primary": "ヒューマックスパビリオン",
3930 "building_class": "",
3931 "height": null
3932 }
3933 },
3934 {
3935 "type": "Feature",
3936 "geometry": {
3937 "type": "Polygon",
3938 "coordinates": [
3939 [
3940 [
3941 139.7025817,
3942 35.6609443
3943 ],
3944 [
3945 139.7025824,
3946 35.660901
3947 ],
3948 [
3949 139.7024588,
3950 35.6608998
3951 ],
3952 [
3953 139.7024581,
3954 35.660943
3955 ],
3956 [
3957 139.7025817,
3958 35.6609443
3959 ]
3960 ]
3961 ]
3962 },
3963 "properties": {
3964 "feature_id": 90,
3965 "overture_id": "9b63a40e-6597-4e0b-86e9-b1b0b4ba484e",
3966 "name_primary": "",
3967 "building_class": "",
3968 "height": null
3969 }
3970 },
3971 {
3972 "type": "Feature",
3973 "geometry": {
3974 "type": "Polygon",
3975 "coordinates": [
3976 [
3977 [
3978 139.7024888,
3979 35.6605273
3980 ],
3981 [
3982 139.7027273,
3983 35.6605326
3984 ],
3985 [
3986 139.7027304,
3987 35.6604419
3988 ],
3989 [
3990 139.7024919,
3991 35.6604365
3992 ],
3993 [
3994 139.7024888,
3995 35.6605273
3996 ]
3997 ]
3998 ]
3999 },
4000 "properties": {
<system-reminder>Showed lines 2001-4000 of 4430. Re-call Read with offset=4001 to continue, or raise limit.</system-reminder>
0:19
Let me see the rest of the file.
0:19
Read
/work/tokyo_buildings_legacy.geojson
4001 "feature_id": 91,
4002 "overture_id": "9d39cdc0-10f9-4970-af3e-d713c340d2ea",
4003 "name_primary": "",
4004 "building_class": "",
4005 "height": null
4006 }
4007 },
4008 {
4009 "type": "Feature",
4010 "geometry": {
4011 "type": "Polygon",
4012 "coordinates": [
4013 [
4014 [
4015 139.700511,
4016 35.6586058
4017 ],
4018 [
4019 139.7005302,
4020 35.6585467
4021 ],
4022 [
4023 139.7005563,
4024 35.6584664
4025 ],
4026 [
4027 139.7005825,
4028 35.6584383
4029 ],
4030 [
4031 139.7007889,
4032 35.6584105
4033 ],
4034 [
4035 139.700816,
4036 35.658411
4037 ],
4038 [
4039 139.7009377,
4040 35.6584529
4041 ],
4042 [
4043 139.700988,
4044 35.6585017
4045 ],
4046 [
4047 139.7009969,
4048 35.6585044
4049 ],
4050 [
4051 139.7010569,
4052 35.6583862
4053 ],
4054 [
4055 139.7010123,
4056 35.658356
4057 ],
4058 [
4059 139.700821,
4060 35.6582886
4061 ],
4062 [
4063 139.7004569,
4064 35.6583422
4065 ],
4066 [
4067 139.7003786,
4068 35.658589
4069 ],
4070 [
4071 139.700511,
4072 35.6586058
4073 ]
4074 ]
4075 ]
4076 },
4077 "properties": {
4078 "feature_id": 92,
4079 "overture_id": "a2d38843-ebde-4707-acfd-75ac307594f1",
4080 "name_primary": "しぶにしデッキ",
4081 "building_class": "",
4082 "height": null
4083 }
4084 },
4085 {
4086 "type": "Feature",
4087 "geometry": {
4088 "type": "Polygon",
4089 "coordinates": [
4090 [
4091 [
4092 139.7021413,
4093 35.6606121
4094 ],
4095 [
4096 139.7018844,
4097 35.6606077
4098 ],
4099 [
4100 139.7018828,
4101 35.6606697
4102 ],
4103 [
4104 139.7019139,
4105 35.6606703
4106 ],
4107 [
4108 139.7019134,
4109 35.6606899
4110 ],
4111 [
4112 139.7021391,
4113 35.6606938
4114 ],
4115 [
4116 139.7021413,
4117 35.6606121
4118 ]
4119 ]
4120 ]
4121 },
4122 "properties": {
4123 "feature_id": 93,
4124 "overture_id": "a3b5e66e-57a5-4692-b6a3-39c48225a8ec",
4125 "name_primary": "",
4126 "building_class": "",
4127 "height": null
4128 }
4129 },
4130 {
4131 "type": "Feature",
4132 "geometry": {
4133 "type": "Polygon",
4134 "coordinates": [
4135 [
4136 [
4137 139.7029307,
4138 35.6612268
4139 ],
4140 [
4141 139.702935,
4142 35.6610794
4143 ],
4144 [
4145 139.7028676,
4146 35.6610781
4147 ],
4148 [
4149 139.7028673,
4150 35.6610871
4151 ],
4152 [
4153 139.7028103,
4154 35.661086
4155 ],
4156 [
4157 139.7028062,
4158 35.6612244
4159 ],
4160 [
4161 139.7029307,
4162 35.6612268
4163 ]
4164 ]
4165 ]
4166 },
4167 "properties": {
4168 "feature_id": 94,
4169 "overture_id": "a4340ae5-384e-4037-ac4e-ee01ec63a182",
4170 "name_primary": "",
4171 "building_class": "",
4172 "height": null
4173 }
4174 },
4175 {
4176 "type": "Feature",
4177 "geometry": {
4178 "type": "Polygon",
4179 "coordinates": [
4180 [
4181 [
4182 139.7001541,
4183 35.6598975
4184 ],
4185 [
4186 139.7000801,
4187 35.6599456
4188 ],
4189 [
4190 139.7001268,
4191 35.6600416
4192 ],
4193 [
4194 139.7002115,
4195 35.6600199
4196 ],
4197 [
4198 139.7001541,
4199 35.6598975
4200 ]
4201 ]
4202 ]
4203 },
4204 "properties": {
4205 "feature_id": 95,
4206 "overture_id": "a457d248-ae0e-4533-826c-a9f5b8d94c68",
4207 "name_primary": "",
4208 "building_class": "office",
4209 "height": null
4210 }
4211 },
4212 {
4213 "type": "Feature",
4214 "geometry": {
4215 "type": "Polygon",
4216 "coordinates": [
4217 [
4218 [
4219 139.7025713,
4220 35.660583
4221 ],
4222 [
4223 139.7025727,
4224 35.6605552
4225 ],
4226 [
4227 139.7024862,
4228 35.6605523
4229 ],
4230 [
4231 139.7024848,
4232 35.6605801
4233 ],
4234 [
4235 139.7025713,
4236 35.660583
4237 ]
4238 ]
4239 ]
4240 },
4241 "properties": {
4242 "feature_id": 96,
4243 "overture_id": "a6cbc753-0453-48b2-9015-39b00ac84b62",
4244 "name_primary": "",
4245 "building_class": "roof",
4246 "height": null
4247 }
4248 },
4249 {
4250 "type": "Feature",
4251 "geometry": {
4252 "type": "Polygon",
4253 "coordinates": [
4254 [
4255 [
4256 139.7029571,
4257 35.6589749
4258 ],
4259 [
4260 139.7029678,
4261 35.6589779
4262 ],
4263 [
4264 139.7029881,
4265 35.6589284
4266 ],
4267 [
4268 139.7030077,
4269 35.658881
4270 ],
4271 [
4272 139.702998,
4273 35.6588783
4274 ],
4275 [
4276 139.7024454,
4277 35.6586356
4278 ],
4279 [
4280 139.7023889,
4281 35.6587531
4282 ],
4283 [
4284 139.7029571,
4285 35.6589749
4286 ]
4287 ]
4288 ]
4289 },
4290 "properties": {
4291 "feature_id": 97,
4292 "overture_id": "a8633229-266b-4a88-892c-40997bc232b7",
4293 "name_primary": "",
4294 "building_class": "",
4295 "height": null
4296 }
4297 },
4298 {
4299 "type": "Feature",
4300 "geometry": {
4301 "type": "Polygon",
4302 "coordinates": [
4303 [
4304 [
4305 139.7005959,
4306 35.6589332
4307 ],
4308 [
4309 139.7005934,
4310 35.6589474
4311 ],
4312 [
4313 139.7006488,
4314 35.6589538
4315 ],
4316 [
4317 139.7006514,
4318 35.6589392
4319 ],
4320 [
4321 139.7006569,
4322 35.6589399
4323 ],
4324 [
4325 139.7006605,
4326 35.6589219
4327 ],
4328 [
4329 139.7005846,
4330 35.6589144
4331 ],
4332 [
4333 139.700579,
4334 35.6589312
4335 ],
4336 [
4337 139.7005959,
4338 35.6589332
4339 ]
4340 ]
4341 ]
4342 },
4343 "properties": {
4344 "feature_id": 98,
4345 "overture_id": "a945257e-ddfa-4102-b1dd-8943ee599ea4",
4346 "name_primary": "",
4347 "building_class": "",
4348 "height": null
4349 }
4350 },
4351 {
4352 "type": "Feature",
4353 "geometry": {
4354 "type": "Polygon",
4355 "coordinates": [
4356 [
4357 [
4358 139.7030155,
4359 35.6602356
4360 ],
4361 [
4362 139.7030297,
4363 35.6599921
4364 ],
4365 [
4366 139.702685,
4367 35.6599858
4368 ],
4369 [
4370 139.7026709,
4371 35.660223
4372 ],
4373 [
4374 139.7030155,
4375 35.6602356
4376 ]
4377 ]
4378 ]
4379 },
4380 "properties": {
4381 "feature_id": 99,
4382 "overture_id": "aae308bd-2ac4-4526-989c-ed915f4700e3",
4383 "name_primary": "",
4384 "building_class": "",
4385 "height": null
4386 }
4387 },
4388 {
4389 "type": "Feature",
4390 "geometry": {
4391 "type": "Polygon",
4392 "coordinates": [
4393 [
4394 [
4395 139.7029911,
4396 35.6615164
4397 ],
4398 [
4399 139.7030286,
4400 35.6615337
4401 ],
4402 [
4403 139.7032014,
4404 35.6614933
4405 ],
4406 [
4407 139.7032061,
4408 35.6613607
4409 ],
4410 [
4411 139.7030022,
4412 35.6613564
4413 ],
4414 [
4415 139.7029911,
4416 35.6615164
4417 ]
4418 ]
4419 ]
4420 },
4421 "properties": {
4422 "feature_id": 100,
4423 "overture_id": "ac53d2d1-21dc-47cd-b21c-bba15808b741",
4424 "name_primary": "",
4425 "building_class": "",
4426 "height": null
4427 }
4428 }
4429 ]
4430 }
0:41
Let me analyze the issue. The problem is about GeoJSON polygon orientation. In the GeoJSON specification (RFC 7946), exterior rings must follow the right-hand rule (counterclockwise order), and interior rings (holes) must follow the left-hand rule (clockwise order). When polygons don't follow this convention, web viewers may render interiors incorrectly - holes appear filled and exteriors may render as empty space. Let me check the winding order of some polygons in this file. Looking at feature_id 1: ``` [139.7029081, 35.6592372], [139.7027971, 35.659202], [139.7027755, 35.6592471], [139.7028864, 35.6592823], [139.7029081, 35.6592372] ``` Let me calculate the signed area to check winding order. The shoelace formula will tell us if it's clockwise (negative) or counterclockwise (positive). For feature 1: (139.7029081 * 35.659202 - 139.7027971 * 35.6592372) + (139.7027971 * 35.6592471 - 139.7027755 * 35.659202) + (139.7027755 * 35.6592823 - 139.7028864 * 35.6592471) + (139.7028864 * 35.6592372 - 139.7029081 * 35.6592823) = (4980.2509... - 4980.212...) ... this is getting complex. Let me just write a Python script to analyze and fix this. Actually, let me think about this more systematically. The GeoJSON RFC 7946 specifies: - Exterior rings must be counterclockwise (right-hand rule) - Interior rings (holes) must be clockwise The old in-house tool likely produced polygons with the opposite winding (clockwise for exterior, counterclockwise for holes), which was common before RFC 7946. Let me write a Python script to: 1. Read the GeoJSON 2. For each polygon, check the winding of each ring 3. Ensure exterior ring is counterclockwise and interior rings (holes) are clockwise 4. Preserve all other attributes and structure
0:41
0:41
Write
/work/analyze.py
content · 25 lines · py
import json
import math
def signed_area(ring):
"""Compute signed area of a ring. Positive = CCW, Negative = CW."""
area = 0.0
n = len(ring)
for i in range(n):
x1, y1 = ring[i]
x2, y2 = ring[(i + 1) % n]
area += (x2 - x1) * (y2 + y1)
return area
with open("/work/tokyo_buildings_legacy.geojson", "r") as f:
data = json.load(f)
for feat in data["features"]:
geom = feat["geometry"]
if geom["type"] == "Polygon":
rings = geom["coordinates"]
print(f"Feature {feat['properties']['feature_id']}: {len(rings)} ring(s)")
for i, ring in enumerate(rings):
area = signed_area(ring)
orient = "CCW" if area > 0 else "CW"
print(f" Ring {i}: signed_area={area:.6f}, orientation={orient}")
Wrote /work/analyze.py (793 chars).
0:45
Let me analyze the ring orientations. The GeoJSON spec says: - For Polygons, the exterior ring should be counter-clockwise (CCW) - Interior rings (holes) should be clockwise (CW) Let me check the current orientations.
0:45
Bash
cd /work && python analyze.py
Feature 1: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 2: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 3: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 4: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 5: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 6: 2 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Ring 1: signed_area=-0.000000, orientation=CW Feature 7: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 8: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 9: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 10: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 11: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 12: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 13: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 14: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 15: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 16: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 17: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 18: 2 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Ring 1: signed_area=-0.000000, orientation=CW Feature 19: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 20: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 21: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 22: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 23: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 24: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 25: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 26: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 27: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 28: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 29: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 30: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 31: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 32: 2 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Ring 1: signed_area=-0.000000, orientation=CW Feature 33: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 34: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 35: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 36: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 37: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 38: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 39: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 40: 1 ring(s) Ring 0: signed_area=0.000001, orientation=CCW Feature 41: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 42: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 43: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 44: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 45: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 46: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 47: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 48: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 49: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 50: 2 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Ring 1: signed_area=-0.000000, orientation=CW Feature 51: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 52: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 53: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 54: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 55: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 56: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 57: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 58: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 59: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 60: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 61: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 62: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 63: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 64: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 65: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 66: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 67: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 68: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 69: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 70: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 71: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 72: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 73: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 74: 2 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Ring 1: signed_area=-0.000000, orientation=CW Feature 75: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 76: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 77: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 78: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 79: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 80: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 81: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 82: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 83: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 84: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 85: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 86: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 87: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 88: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 89: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 90: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 91: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 92: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 93: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 94: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 95: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 96: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 97: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 98: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 99: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW Feature 100: 1 ring(s) Ring 0: signed_area=0.000000, orientation=CCW
0:57
The signed area is showing as 0.000000 for many polygons because the coordinates are in decimal degrees (lat/lon) and the values are very small. The formula I used (Shoelace with (x2-x1)*(y2+y1)) might not be the standard one. Let me fix the signed area calculation.
The standard shoelace formula is:
area = 0.5 * sum(x_i * y_{i+1} - x_{i+1} * y_i)
Let me recalculate with that formula, and also use more precision to see orientations.
Also, I notice the interior rings (ring 1 of multi-ring polygons) show as CW orientation which is actually correct for GeoJSON - exterior ring should be CCW and interior rings (holes) should be CW.
Wait, looking at the data more carefully:
- Features 6, 18, 32, 50, 74 have 2 rings
- Ring 0: CCW orientation
- Ring 1: CW orientation
That's correct per the GeoJSON spec: exterior ring CCW, interior rings (holes) CW. So orientation seems fine.
But the problem says "holes appear filled and exteriors render as empty space" - this suggests that the exterior ring might actually be oriented CW (which would make it a hole) and the interior ring CCW (which would make it the exterior). Let me check with proper shoelace formula.
Let me also check for other issues like ring closure (first point == last point), self-intersection, etc.
Let me use a more precise signed area calculation.
0:57
Write
/work/analyze2.py
content · 25 lines · py
import json
def signed_area(ring):
"""Compute signed area of a ring using shoelace formula."""
area = 0.0
n = len(ring)
for i in range(n):
x1, y1 = ring[i]
x2, y2 = ring[(i + 1) % n]
area += x1 * y2 - x2 * y1
return area / 2.0
with open("/work/tokyo_buildings_legacy.geojson", "r") as f:
data = json.load(f)
for feat in data["features"]:
geom = feat["geometry"]
if geom["type"] == "Polygon":
rings = geom["coordinates"]
print(f"Feature {feat['properties']['feature_id']}: {len(rings)} ring(s)")
for i, ring in enumerate(rings):
area = signed_area(ring)
orient = "CCW" if area > 0 else ("CW" if area < 0 else "ZERO")
closed = "YES" if ring[0] == ring[-1] else "NO"
print(f" Ring {i}: area={area:.10e}, orient={orient}, closed={closed}, pts={len(ring)}")
Wrote /work/analyze2.py (884 chars).
1:11
The issue is interesting. The signed areas are all showing as ~0.000000 or 0.000001. This is because the coordinates are lat/lon in degrees, and the area calculation in degrees is very small. Let me check if the ring orientation might be wrong.
Looking at the GeoJSON specification (RFC 7946):
- The exterior ring should be counterclockwise (CCW)
- Interior rings (holes) should be clockwise (CW)
But I see that:
- Ring 0 (exterior) shows as CCW - this is correct for exterior
- Ring 1 (interior/hole) shows as CW - this is correct for interior holes
Wait, but the problem states "holes appear filled and exteriors render as empty space" - this suggests the orientation is wrong. In the GeoJSON spec, the exterior ring must be CCW and interior rings CW. But in many older GIS formats, the convention is the opposite (exterior CW, interior CCW).
Let me look more carefully at the actual coordinates. The signed areas are very tiny because these are degree coordinates. Let me compute properly in lat/lon.
Actually the issue might be more subtle. Let me look at some specific examples more carefully.
Feature 6 has 2 rings:
- Ring 0 (exterior) - CCW
- Ring 1 (interior/hole) - CW
According to GeoJSON spec, exterior should be CCW and holes should be CW. So this seems correct... But wait, GeoJSON RFC 7946 says:
- Exterior ring: counterclockwise (right-hand rule)
- Interior rings: clockwise (left-hand rule)
Hmm, actually RFC 7946 says:
"A linear ring MUST follow the right-hand rule with respect to the area it bounds, i.e., exterior rings are counterclockwise, and interior rings are clockwise."
So CCW exterior and CW interior is correct per spec. But the problem says interiors are shaded incorrectly and exteriors render as empty space. This could mean the orientation is reversed.
Wait, looking more carefully at the signed areas... The values are extremely small due to degree coordinates. Let me look at a specific polygon to see the winding order more carefully.
For Feature 6:
Ring 0 (exterior):
[139.7025726, 35.661211], [139.7025732, 35.6612697], [139.7027844, 35.6612685], [139.7027837, 35.6611824], [139.7025917, 35.6611836], [139.7025916, 35.6611717], [139.7024481, 35.6611726], [139.7024485, 35.6612117], [139.7025726, 35.661211]
Let me trace these points:
(139.7025726, 35.661211) -> (139.7025732, 35.6612697) -> (139.7027844, 35.6612685) -> (139.7027837, 35.6611824) -> (139.7025917, 35.6611836) -> ...
Actually, the signed area function I wrote uses `x1*y2 - x2*y1` which is the standard shoelace formula. But let me re-check...
Actually wait, the standard shoelace formula is:
Area = 0.5 * |sum(x_i * y_{i+1} - x_{i+1} * y_i)|
For signed area (positive = CCW in standard Cartesian):
sum(x_i * y_{i+1} - x_{i+1} * y_i)
Let me check my function:
```
for i in range(n):
x1, y1 = ring[i]
x2, y2 = ring[(i + 1) % n]
area += x1 * y2 - x2 * y1
```
This is correct for shoelace formula. But the sign convention assumes Cartesian coordinates with x right, y up. In lat/lon coordinates, x is longitude (east) and y is latitude (north). So positive area means CCW in the mathematical sense (east-north plane).
But the values are extremely small (like 1e-8 level), which is why my first script showed all zeros. The second script with more precise formatting should help.
Actually, looking at my analyze.py script, the signed_area function was wrong because I had `(x2 - x1) * (y2 + y1)` instead of the shoelace formula. Let me re-look at analyze2.py which uses the correct formula.
Let me run analyze2.py to see more precise values.
1:11
Bash
cd /work && python analyze2.py
Feature 1: 1 ring(s) Ring 0: area=-5.7661964092e-09, orient=CW, closed=YES, pts=5 Feature 2: 1 ring(s) Ring 0: area=-1.9482286007e-08, orient=CW, closed=YES, pts=9 Feature 3: 1 ring(s) Ring 0: area=-6.6447682912e-09, orient=CW, closed=YES, pts=5 Feature 4: 1 ring(s) Ring 0: area=-6.0276761360e-09, orient=CW, closed=YES, pts=5 Feature 5: 1 ring(s) Ring 0: area=-8.1458892964e-09, orient=CW, closed=YES, pts=6 Feature 6: 2 ring(s) Ring 0: area=-2.3268512450e-08, orient=CW, closed=YES, pts=9 Ring 1: area=8.1854523160e-11, orient=CCW, closed=YES, pts=5 Feature 7: 1 ring(s) Ring 0: area=-1.5297700884e-09, orient=CW, closed=YES, pts=5 Feature 8: 1 ring(s) Ring 0: area=-3.9326550905e-09, orient=CW, closed=YES, pts=5 Feature 9: 1 ring(s) Ring 0: area=-1.5611476556e-09, orient=CW, closed=YES, pts=6 Feature 10: 1 ring(s) Ring 0: area=-6.8871486292e-09, orient=CW, closed=YES, pts=5 Feature 11: 1 ring(s) Ring 0: area=-9.4478309620e-09, orient=CW, closed=YES, pts=5 Feature 12: 1 ring(s) Ring 0: area=-1.0943494999e-08, orient=CW, closed=YES, pts=5 Feature 13: 1 ring(s) Ring 0: area=-9.2359186965e-10, orient=CW, closed=YES, pts=6 Feature 14: 1 ring(s) Ring 0: area=-1.8308583094e-08, orient=CW, closed=YES, pts=6 Feature 15: 1 ring(s) Ring 0: area=-2.3439042707e-08, orient=CW, closed=YES, pts=5 Feature 16: 1 ring(s) Ring 0: area=-1.7800175556e-08, orient=CW, closed=YES, pts=8 Feature 17: 1 ring(s) Ring 0: area=-2.8216163628e-08, orient=CW, closed=YES, pts=8 Feature 18: 2 ring(s) Ring 0: area=-2.5206190912e-08, orient=CW, closed=YES, pts=6 Ring 1: area=9.1858964879e-11, orient=CCW, closed=YES, pts=5 Feature 19: 1 ring(s) Ring 0: area=-1.4323632058e-08, orient=CW, closed=YES, pts=5 Feature 20: 1 ring(s) Ring 0: area=-6.1204445956e-09, orient=CW, closed=YES, pts=5 Feature 21: 1 ring(s) Ring 0: area=-1.1470501704e-07, orient=CW, closed=YES, pts=9 Feature 22: 1 ring(s) Ring 0: area=-2.6266206987e-09, orient=CW, closed=YES, pts=6 Feature 23: 1 ring(s) Ring 0: area=-1.2339114619e-08, orient=CW, closed=YES, pts=5 Feature 24: 1 ring(s) Ring 0: area=-2.8832801036e-08, orient=CW, closed=YES, pts=5 Feature 25: 1 ring(s) Ring 0: area=-1.3626049622e-08, orient=CW, closed=YES, pts=6 Feature 26: 1 ring(s) Ring 0: area=-3.3029209590e-08, orient=CW, closed=YES, pts=5 Feature 27: 1 ring(s) Ring 0: area=-8.9385139290e-09, orient=CW, closed=YES, pts=5 Feature 28: 1 ring(s) Ring 0: area=-2.6207089832e-09, orient=CW, closed=YES, pts=6 Feature 29: 1 ring(s) Ring 0: area=-9.0849425760e-09, orient=CW, closed=YES, pts=9 Feature 30: 1 ring(s) Ring 0: area=-1.2093551049e-08, orient=CW, closed=YES, pts=5 Feature 31: 1 ring(s) Ring 0: area=-3.0368482840e-08, orient=CW, closed=YES, pts=10 Feature 32: 2 ring(s) Ring 0: area=-2.0550032787e-09, orient=CW, closed=YES, pts=5 Ring 1: area=7.2759576142e-12, orient=CCW, closed=YES, pts=5 Feature 33: 1 ring(s) Ring 0: area=-9.3691596703e-09, orient=CW, closed=YES, pts=5 Feature 34: 1 ring(s) Ring 0: area=-5.5420059653e-09, orient=CW, closed=YES, pts=5 Feature 35: 1 ring(s) Ring 0: area=-3.6992332753e-08, orient=CW, closed=YES, pts=7 Feature 36: 1 ring(s) Ring 0: area=-1.9613253244e-08, orient=CW, closed=YES, pts=5 Feature 37: 1 ring(s) Ring 0: area=-2.4552718969e-08, orient=CW, closed=YES, pts=5 Feature 38: 1 ring(s) Ring 0: area=-1.7991624190e-08, orient=CW, closed=YES, pts=8 Feature 39: 1 ring(s) Ring 0: area=-2.9050170269e-08, orient=CW, closed=YES, pts=8 Feature 40: 1 ring(s) Ring 0: area=-2.6210545911e-07, orient=CW, closed=YES, pts=24 Feature 41: 1 ring(s) Ring 0: area=-1.4055922293e-07, orient=CW, closed=YES, pts=12 Feature 42: 1 ring(s) Ring 0: area=-2.5325334718e-08, orient=CW, closed=YES, pts=6 Feature 43: 1 ring(s) Ring 0: area=-5.2555151342e-08, orient=CW, closed=YES, pts=7 Feature 44: 1 ring(s) Ring 0: area=-2.2455878934e-08, orient=CW, closed=YES, pts=5 Feature 45: 1 ring(s) Ring 0: area=-3.5756784200e-09, orient=CW, closed=YES, pts=5 Feature 46: 1 ring(s) Ring 0: area=-3.1577656046e-09, orient=CW, closed=YES, pts=6 Feature 47: 1 ring(s) Ring 0: area=-2.7489477361e-09, orient=CW, closed=YES, pts=6 Feature 48: 1 ring(s) Ring 0: area=-2.0025254344e-08, orient=CW, closed=YES, pts=8 Feature 49: 1 ring(s) Ring 0: area=-2.4984274205e-08, orient=CW, closed=YES, pts=7 Feature 50: 2 ring(s) Ring 0: area=-1.1384599929e-08, orient=CW, closed=YES, pts=5 Ring 1: area=4.1836756282e-11, orient=CCW, closed=YES, pts=5 Feature 51: 1 ring(s) Ring 0: area=-2.8926478990e-09, orient=CW, closed=YES, pts=5 Feature 52: 1 ring(s) Ring 0: area=-8.3346094470e-09, orient=CW, closed=YES, pts=5 Feature 53: 1 ring(s) Ring 0: area=-1.6553713067e-08, orient=CW, closed=YES, pts=5 Feature 54: 1 ring(s) Ring 0: area=-6.4437699621e-08, orient=CW, closed=YES, pts=9 Feature 55: 1 ring(s) Ring 0: area=-2.5758254196e-08, orient=CW, closed=YES, pts=7 Feature 56: 1 ring(s) Ring 0: area=-6.1007540353e-08, orient=CW, closed=YES, pts=9 Feature 57: 1 ring(s) Ring 0: area=-2.6248017093e-09, orient=CW, closed=YES, pts=6 Feature 58: 1 ring(s) Ring 0: area=-2.8217073123e-09, orient=CW, closed=YES, pts=5 Feature 59: 1 ring(s) Ring 0: area=-6.5656422521e-09, orient=CW, closed=YES, pts=7 Feature 60: 1 ring(s) Ring 0: area=-5.0577000366e-09, orient=CW, closed=YES, pts=6 Feature 61: 1 ring(s) Ring 0: area=-3.0977389542e-09, orient=CW, closed=YES, pts=5 Feature 62: 1 ring(s) Ring 0: area=-3.5251559893e-08, orient=CW, closed=YES, pts=7 Feature 63: 1 ring(s) Ring 0: area=-4.3137333705e-09, orient=CW, closed=YES, pts=7 Feature 64: 1 ring(s) Ring 0: area=-1.4752004063e-09, orient=CW, closed=YES, pts=5 Feature 65: 1 ring(s) Ring 0: area=-7.2263901529e-08, orient=CW, closed=YES, pts=8 Feature 66: 1 ring(s) Ring 0: area=-4.9685695558e-09, orient=CW, closed=YES, pts=5 Feature 67: 1 ring(s) Ring 0: area=-1.2981217878e-08, orient=CW, closed=YES, pts=5 Feature 68: 1 ring(s) Ring 0: area=-1.2964846974e-08, orient=CW, closed=YES, pts=5 Feature 69: 1 ring(s) Ring 0: area=-1.2532382243e-08, orient=CW, closed=YES, pts=5 Feature 70: 1 ring(s) Ring 0: area=-2.5643203116e-09, orient=CW, closed=YES, pts=6 Feature 71: 1 ring(s) Ring 0: area=-1.4570105122e-09, orient=CW, closed=YES, pts=5 Feature 72: 1 ring(s) Ring 0: area=-5.7275428844e-09, orient=CW, closed=YES, pts=5 Feature 73: 1 ring(s) Ring 0: area=-3.1833678804e-08, orient=CW, closed=YES, pts=9 Feature 74: 2 ring(s) Ring 0: area=-8.7347871158e-09, orient=CW, closed=YES, pts=5 Ring 1: area=4.2746250983e-11, orient=CCW, closed=YES, pts=5 Feature 75: 1 ring(s) Ring 0: area=-9.2950358521e-09, orient=CW, closed=YES, pts=6 Feature 76: 1 ring(s) Ring 0: area=-1.1160091162e-07, orient=CW, closed=YES, pts=6 Feature 77: 1 ring(s) Ring 0: area=-7.1822341852e-08, orient=CW, closed=YES, pts=6 Feature 78: 1 ring(s) Ring 0: area=-1.0375106285e-07, orient=CW, closed=YES, pts=7 Feature 79: 1 ring(s) Ring 0: area=-2.3409484129e-08, orient=CW, closed=YES, pts=5 Feature 80: 1 ring(s) Ring 0: area=-3.9715814637e-08, orient=CW, closed=YES, pts=9 Feature 81: 1 ring(s) Ring 0: area=-6.6793290898e-09, orient=CW, closed=YES, pts=5 Feature 82: 1 ring(s) Ring 0: area=-2.5033841666e-09, orient=CW, closed=YES, pts=6 Feature 83: 1 ring(s) Ring 0: area=-1.9451817934e-08, orient=CW, closed=YES, pts=5 Feature 84: 1 ring(s) Ring 0: area=-1.4762917999e-08, orient=CW, closed=YES, pts=7 Feature 85: 1 ring(s) Ring 0: area=-1.4259057934e-08, orient=CW, closed=YES, pts=5 Feature 86: 1 ring(s) Ring 0: area=-1.1383872334e-07, orient=CW, closed=YES, pts=14 Feature 87: 1 ring(s) Ring 0: area=-9.3004928203e-09, orient=CW, closed=YES, pts=5 Feature 88: 1 ring(s) Ring 0: area=-5.4647443903e-08, orient=CW, closed=YES, pts=9 Feature 89: 1 ring(s) Ring 0: area=-3.5322045733e-08, orient=CW, closed=YES, pts=5 Feature 90: 1 ring(s) Ring 0: area=-5.3464646044e-09, orient=CW, closed=YES, pts=5 Feature 91: 1 ring(s) Ring 0: area=-2.1660525817e-08, orient=CW, closed=YES, pts=5 Feature 92: 1 ring(s) Ring 0: area=-9.2231857707e-08, orient=CW, closed=YES, pts=15 Feature 93: 1 ring(s) Ring 0: area=-2.0378138288e-08, orient=CW, closed=YES, pts=7 Feature 94: 1 ring(s) Ring 0: area=-1.7843831301e-08, orient=CW, closed=YES, pts=7 Feature 95: 1 ring(s) Ring 0: area=-1.0481471691e-08, orient=CW, closed=YES, pts=5 Feature 96: 1 ring(s) Ring 0: area=-2.4087967176e-09, orient=CW, closed=YES, pts=5 Feature 97: 1 ring(s) Ring 0: area=-7.2400325735e-08, orient=CW, closed=YES, pts=8 Feature 98: 1 ring(s) Ring 0: area=-2.1900632419e-09, orient=CW, closed=YES, pts=9 Feature 99: 1 ring(s) Ring 0: area=-8.2970018411e-08, orient=CW, closed=YES, pts=5 Feature 100: 1 ring(s) Ring 0: area=-3.2477146306e-08, orient=CW, closed=YES, pts=6
1:24
Now I can see the issue clearly. According to the GeoJSON specification (RFC 7946): 1. **Exterior rings** must be oriented **counter-clockwise (CCW)** 2. **Interior rings (holes)** must be oriented **clockwise (CW)** Currently, ALL rings (both exterior and interior) are oriented **clockwise (CW)**. That's the problem! The exterior rings need to be CCW, while the interior rings (holes) need to be CW. For features with only 1 ring (exterior): the ring needs to be reversed to CCW. For features with multiple rings (e.g., feature 6, 18, 32, 50, 74): Ring 0 (exterior) needs to be CCW, Ring 1 (interior/hole) needs to be CW. Currently Ring 0 is CW and Ring 1 is CCW - so both need reversing! Wait, let me re-check. According to my analysis: - Feature 6: Ring 0 area = -2.32e-08 (CW - exterior), Ring 1 area = 8.18e-11 (CCW - interior hole) - But GeoJSON spec says exterior should be CCW, interior should be CW. So currently it's backwards: exterior is CW (should be CCW), interior is CCW (should be CW). We need to reverse both. Actually, let me think about this more carefully. Let's look at the coordinates: Feature 6 exterior ring (Ring 0): ``` [139.7025726, 35.6612110], [139.7025732, 35.6612697], [139.7027844, 35.6612685], [139.7027837, 35.6611824], [139.7025917, 35.6611836], [139.7025916, 35.6611717], [139.7024481, 35.6611726], [139.7024485, 35.6612117], [139.7025726, 35.6612110] ``` This is the outer boundary (exterior). The signed area is negative (CW). According to GeoJSON spec, exterior should be CCW. So we reverse it. Feature 6 interior ring (Ring 1): ``` [139.70261625, 35.6612158], [139.702633065, 35.6612158], [139.702633065, 35.6612207], [139.70261625, 35.6612207], [139.70261625, 35.6612158] ``` This is inside the exterior. The signed area is positive (CCW). But interior rings (holes) should be CW. So we reverse it too. So the fix is: 1. For every feature that is a Polygon: - Ring 0 (exterior): ensure it's CCW (positive area). If CW, reverse. - Rings 1+ (interior holes): ensure they're CW (negative area). If CCW, reverse. Let me write the fix script.
1:24
1:24
Write
/work/fix.py
content · 63 lines · py
import json
def signed_area(ring):
"""Shoelace formula. Positive = CCW, Negative = CW."""
area = 0.0
n = len(ring)
for i in range(n):
x1, y1 = ring[i]
x2, y2 = ring[(i + 1) % n]
area += x1 * y2 - x2 * y1
return area / 2.0
def is_ccw(ring):
return signed_area(ring) > 0
def is_cw(ring):
return signed_area(ring) < 0
with open("/work/tokyo_buildings_legacy.geojson", "r") as f:
data = json.load(f)
fixes = 0
for feat in data["features"]:
geom = feat["geometry"]
if geom["type"] == "Polygon":
rings = geom["coordinates"]
# Ring 0 is exterior: must be CCW
if is_cw(rings[0]):
rings[0] = list(reversed(rings[0]))
fixes += 1
print(f" Feature {feat['properties']['feature_id']}: reversed exterior ring (was CW)")
# Rings 1+ are interior holes: must be CW
for i in range(1, len(rings)):
if is_ccw(rings[i]):
rings[i] = list(reversed(rings[i]))
fixes += 1
print(f" Feature {feat['properties']['feature_id']}: reversed interior ring {i} (was CCW)")
print(f"\nTotal fixes: {fixes}")
with open("/work/tokyo_buildings_fixed.geojson", "w") as f:
json.dump(data, f)
# Verify
print("\n=== Verification ===")
with open("/work/tokyo_buildings_fixed.geojson", "r") as f:
data2 = json.load(f)
errors = 0
for feat in data2["features"]:
geom = feat["geometry"]
if geom["type"] == "Polygon":
rings = geom["coordinates"]
# Exterior must be CCW
if not is_ccw(rings[0]):
print(f" ERROR: Feature {feat['properties']['feature_id']} exterior is still CW")
errors += 1
for i in range(1, len(rings)):
if not is_cw(rings[i]):
print(f" ERROR: Feature {feat['properties']['feature_id']} interior ring {i} is still CCW")
errors += 1
if errors == 0:
print("All geometries validated: exteriors CCW, holes CW.")
Wrote /work/fix.py (2006 chars).
1:33
Wait, I need to be careful. The GeoJSON spec (RFC 7946) says: - For outer rings: the coordinates should be in counterclockwise order (CCW). - For inner rings (holes): the coordinates should be in clockwise order (CW). But actually, looking at the data more carefully, all rings have CW orientation. So all exterior rings are CW (which is wrong per GeoJSON spec). And the interior rings (features 6, 18, 32, 50, 74) are also CW... wait let me re-check. Looking at feature 6: - Ring 0: area=-2.3268512450e-08, orient=CW - Ring 1: area=8.1854523160e-11, orient=CCW So ring 0 (exterior) is CW (should be CCW), ring 1 (hole) is CCW (should be CW). Wait, actually in the original analysis, the first analysis said Ring 0 was CCW and Ring 1 was CW. But the second analysis with more precision shows Ring 0 is CW and Ring 1 is CCW. Let me check my signed_area formula. In the first analyze.py I had: ```python area += (x2 - x1) * (y2 + y1) ``` This is the trapezoid formula area, which for a CCW polygon gives positive area. But I divided by 2? No, I didn't. Let me check the second formula which is the standard shoelace. Actually, my first formula `(x2 - x1) * (y2 + y1)` is not the standard shoelace. The correct shoelace formula is `x1*y2 - x2*y1`. Let me look at the original analysis again. The first script said: - Feature 6: Ring 0: signed_area=0.000000, orientation=CCW - Feature 6: Ring 1: signed_area=-0.000000, orientation=CW So the first script said Ring 0 was CCW and Ring 1 was CW. But the second script (with more precision and correct shoelace) says: - Feature 6: Ring 0: area=-2.3268512450e-08, orient=CW - Feature 6: Ring 1: area=8.1854523160e-11, orient=CCW So the first script's formula `(x2 - x1) * (y2 + y1)` gives opposite sign from the correct shoelace formula `x1*y2 - x2*y1`. OK so the correct analysis is from the second script: All exterior rings are CW, and interior holes are CCW. This is the exact opposite of what GeoJSON RFC 7946 requires (exterior CCW, holes CW). So my fix script reverses the exterior rings (CW→CCW) and the interior rings (CCW→CW). Let me verify... The fix script does: - If exterior is CW, reverse it → becomes CCW ✓ - If interior (hole) is CCW, reverse it → becomes CW ✓ Let me run it.
1:33
Bash
cd /work && python fix.py
Feature 1: reversed exterior ring (was CW) Feature 2: reversed exterior ring (was CW) Feature 3: reversed exterior ring (was CW) Feature 4: reversed exterior ring (was CW) Feature 5: reversed exterior ring (was CW) Feature 6: reversed exterior ring (was CW) Feature 6: reversed interior ring 1 (was CCW) Feature 7: reversed exterior ring (was CW) Feature 8: reversed exterior ring (was CW) Feature 9: reversed exterior ring (was CW) Feature 10: reversed exterior ring (was CW) Feature 11: reversed exterior ring (was CW) Feature 12: reversed exterior ring (was CW) Feature 13: reversed exterior ring (was CW) Feature 14: reversed exterior ring (was CW) Feature 15: reversed exterior ring (was CW) Feature 16: reversed exterior ring (was CW) Feature 17: reversed exterior ring (was CW) Feature 18: reversed exterior ring (was CW) Feature 18: reversed interior ring 1 (was CCW) Feature 19: reversed exterior ring (was CW) Feature 20: reversed exterior ring (was CW) Feature 21: reversed exterior ring (was CW) Feature 22: reversed exterior ring (was CW) Feature 23: reversed exterior ring (was CW) Feature 24: reversed exterior ring (was CW) Feature 25: reversed exterior ring (was CW) Feature 26: reversed exterior ring (was CW) Feature 27: reversed exterior ring (was CW) Feature 28: reversed exterior ring (was CW) Feature 29: reversed exterior ring (was CW) Feature 30: reversed exterior ring (was CW) Feature 31: reversed exterior ring (was CW) Feature 32: reversed exterior ring (was CW) Feature 32: reversed interior ring 1 (was CCW) Feature 33: reversed exterior ring (was CW) Feature 34: reversed exterior ring (was CW) Feature 35: reversed exterior ring (was CW) Feature 36: reversed exterior ring (was CW) Feature 37: reversed exterior ring (was CW) Feature 38: reversed exterior ring (was CW) Feature 39: reversed exterior ring (was CW) Feature 40: reversed exterior ring (was CW) Feature 41: reversed exterior ring (was CW) Feature 42: reversed exterior ring (was CW) Feature 43: reversed exterior ring (was CW) Feature 44: reversed exterior ring (was CW) Feature 45: reversed exterior ring (was CW) Feature 46: reversed exterior ring (was CW) Feature 47: reversed exterior ring (was CW) Feature 48: reversed exterior ring (was CW) Feature 49: reversed exterior ring (was CW) Feature 50: reversed exterior ring (was CW) Feature 50: reversed interior ring 1 (was CCW) Feature 51: reversed exterior ring (was CW) Feature 52: reversed exterior ring (was CW) Feature 53: reversed exterior ring (was CW) Feature 54: reversed exterior ring (was CW) Feature 55: reversed exterior ring (was CW) Feature 56: reversed exterior ring (was CW) Feature 57: reversed exterior ring (was CW) Feature 58: reversed exterior ring (was CW) Feature 59: reversed exterior ring (was CW) Feature 60: reversed exterior ring (was CW) Feature 61: reversed exterior ring (was CW) Feature 62: reversed exterior ring (was CW) Feature 63: reversed exterior ring (was CW) Feature 64: reversed exterior ring (was CW) Feature 65: reversed exterior ring (was CW) Feature 66: reversed exterior ring (was CW) Feature 67: reversed exterior ring (was CW) Feature 68: reversed exterior ring (was CW) Feature 69: reversed exterior ring (was CW) Feature 70: reversed exterior ring (was CW) Feature 71: reversed exterior ring (was CW) Feature 72: reversed exterior ring (was CW) Feature 73: reversed exterior ring (was CW) Feature 74: reversed exterior ring (was CW) Feature 74: reversed interior ring 1 (was CCW) Feature 75: reversed exterior ring (was CW) Feature 76: reversed exterior ring (was CW) Feature 77: reversed exterior ring (was CW) Feature 78: reversed exterior ring (was CW) Feature 79: reversed exterior ring (was CW) Feature 80: reversed exterior ring (was CW) Feature 81: reversed exterior ring (was CW) Feature 82: reversed exterior ring (was CW) Feature 83: reversed exterior ring (was CW) Feature 84: reversed exterior ring (was CW) Feature 85: reversed exterior ring (was CW) Feature 86: reversed exterior ring (was CW) Feature 87: reversed exterior ring (was CW) Feature 88: reversed exterior ring (was CW) Feature 89: reversed exterior ring (was CW) Feature 90: reversed exterior ring (was CW) Feature 91: reversed exterior ring (was CW) Feature 92: reversed exterior ring (was CW) Feature 93: reversed exterior ring (was CW) Feature 94: reversed exterior ring (was CW) Feature 95: reversed exterior ring (was CW) Feature 96: reversed exterior ring (was CW) Feature 97: reversed exterior ring (was CW) Feature 98: reversed exterior ring (was CW) Feature 99: reversed exterior ring (was CW) Feature 100: reversed exterior ring (was CW) Total fixes: 105 === Verification === All geometries validated: exteriors CCW, holes CW.
1:51
The script fixed all 105 orientation issues. All exteriors are now CCW and all interiors are CW as required by the GeoJSON spec. Let me also do a quick sanity check to make sure the attributes and feature structure are preserved, and that the output is valid JSON.
1:51
1:51
Bash
cd /work && python -c "
cd /work && python -c "
import json
with open('tokyo_buildings_fixed.geojson') as f:
data = json.load(f)
print(f'Type: {data[\"type\"]}')
print(f'Features: {len(data[\"features\"])}')
print(f'CRS: {data[\"crs\"][\"properties\"][\"name\"]}')
# Check all features have same keys as original
with open('tokyo_buildings_legacy.geojson') as f2:
orig = json.load(f2)
for i, (fo, ff) in enumerate(zip(orig['features'], data['features'])):
if fo['properties'] != ff['properties']:
print(f'PROPERTY MISMATCH at feature {i}')
if fo['geometry']['type'] != ff['geometry']['type']:
print(f'TYPE MISMATCH at feature {i}')
if len(fo['geometry']['coordinates']) != len(ff['geometry']['coordinates']):
print(f'RING COUNT MISMATCH at feature {i}')
print('All attributes match and geometry structure preserved.')
"
Type: FeatureCollection Features: 100 CRS: urn:ogc:def:crs:OGC:1.3:CRS84 All attributes match and geometry structure preserved.
1:58
The fix worked perfectly. Let me summarize what was done: 1. All 100 features' exterior rings were clockwise (CW) but GeoJSON RFC 7946 requires exterior rings to be counter-clockwise (CCW) 2. The 4 features with interior holes (features 6, 18, 32, 50, 74) had interior rings that were CCW, but they should be CW for holes 3. I reversed the ring orders to fix both issues, preserving all attributes and geometry structure Let me verify the output file exists.
1:58
Bash
ls -la /work/tokyo_buildings_fixed.geojson
-rw-r--r-- 1 agent agent 41722 Jun 16 22:30 /work/tokyo_buildings_fixed.geojson
2:13
The fix is complete. Let me explain what was wrong and what we did.
2:13