Plot 3D dari ketinggian gunung di peta

Oct 09 2020

Saya mencoba menggambar ketinggian pegunungan di peta. Saat ini, saya memiliki gambar 2D yang dihasilkan menggunakan kode seperti yang ditunjukkan di bawah ini. Saya berharap untuk membuat plot 3D, di mana, pada z = 0 adalah petanya, dan pada setiap koordinat di mana ada gunung, ketinggian gunung itu direpresentasikan sebagai sebuah batang (atau garis tipis) yang tingginya adalah elevasi gunung .

mnh = {Entity["Mountain", "BarrettMountain::3kp8s"], 
   Entity["Mountain", "BartlettHaystack::38c83"], 
   Entity["Mountain", "BayleMountain::pxgy3"], 
   Entity["Mountain", "BearMountain::5r473"], 
   Entity["Mountain", "BelknapMountain::2c52p"], 
   Entity["Mountain", "BlackCap::stw8t"], 
   Entity["Mountain", "BlackCrescentMountain::9kv2y"], 
   Entity["Mountain", "BlueJob::7k6mc"], 
   Entity["Mountain", "Bondcliff"], 
   Entity["Mountain", "BoottSpur::cn623"], 
   Entity["Mountain", "CannonMountain::ctp49"], 
   Entity["Mountain", "CarterDome"], 
   Entity["Mountain", "CrotchedMountain::34sd3"], 
   Entity["Mountain", "EastmanMountain::72n76"], 
   Entity["Mountain", "EastPeak::mq29m"], 
   Entity["Mountain", "GaleheadMountain::4sm7n"], 
   Entity["Mountain", "GapMountain::pdxy9"], 
   Entity["Mountain", "GunstockMountain::m3drm"], 
   Entity["Mountain", "ImpMountain::xq742"], 
   Entity["Mountain", "KearsargeNorth::48k2t"], 
   Entity["Mountain", "KidderMountain::6n368"], 
   Entity["Mountain", "LarcomMountain::229k6"], 
   Entity["Mountain", "LittleHaystackMountain::pb363"], 
   Entity["Mountain", "LittleMonadnockMountain::79k9k"], 
   Entity["Mountain", "LoonMountain::pz4tf"], 
   Entity["Mountain", "LovewellMountain::hdrr3"], 
   Entity["Mountain", "MiddleCarterMountain::xry6p"], 
   Entity["Mountain", "MiddleMoriahMountain::t4g69"], 
   Entity["Mountain", "MineHill::8jh85"], 
   Entity["Mountain", "MooseMountain::628t9"], 
   Entity["Mountain", "MountArfield"], 
   Entity["Mountain", "MountAvalon::2q623"], 
   Entity["Mountain", "MountBlue::7584f"], 
   Entity["Mountain", "MountBond"], 
   Entity["Mountain", "MountCabot::pd355"], 
   Entity["Mountain", "MountCardigan::jfn3z"], 
   Entity["Mountain", "MountCarrigain"], 
   Entity["Mountain", "MountChocorua"], 
   Entity["Mountain", "MountClay::68jcg"], 
   Entity["Mountain", "MountCrescent::5323x"], 
   Entity["Mountain", "MountDavis::3gy56"], 
   Entity["Mountain", "MountDoublehead::7v4c8"], 
   Entity["Mountain", "MountEisenhower::w8t5t"], 
   Entity["Mountain", "MountField::8x8xp"], 
   Entity["Mountain", "MountFlume::2f974"], 
   Entity["Mountain", "MountFranklin::6bwfh"], 
   Entity["Mountain", "MountGuyot::skb7j"], 
   Entity["Mountain", "MountHale::x2s5c"], 
   Entity["Mountain", "MountHight::6252v"], 
   Entity["Mountain", "MountIsolation"]};
GeoGraphics[{Red, PointSize[0.01], Point[mnh]}, ImageSize -> 500]

Jawaban

3 DanielHuber Oct 09 2020 at 18:47

Ini membutuhkan beberapa peretasan.

Pertama, kita mendapatkan daftar entitas dan menyebutnya: mnh.

Kedua, kami membuat gambar menggunakan GeoGraphics dan menyebutnya: im. Kemudian kami mengubah gambar 2D ini menjadi gambar 3D dan menyebutnya: im3,

Selanjutnya kami ingin mendapatkan garis vertikal untuk ketinggian. Di sini kita menemui masalah. Posisi pegunungan diberikan dalam Lintang / Bujur, tetapi koordinat gambar diberikan dalam piksel. Oleh karena itu diperlukan suatu fungsi untuk mengubah koordinat tersebut, sebut saja: trans. Dengannya kita bisa menghitung gambar koordinat pegunungan. Dengan menggunakan fungsi ini, kita dapat menyusun garis yang menggambarkan ketinggian gunung. Koordinat dan ketinggian gunung yang kita dapatkan dari properti: "Koordinat" dan "Ketinggian" Entitas. Ini kodenya, Anda mungkin memiliki parameter berbeda untuk menyesuaikannya dengan kebutuhan Anda:

mnh = {Entity["Mountain", "BarrettMountain::3kp8s"], 
   Entity["Mountain", "BartlettHaystack::38c83"], 
   Entity["Mountain", "BayleMountain::pxgy3"], 
   Entity["Mountain", "BearMountain::5r473"], 
   Entity["Mountain", "BelknapMountain::2c52p"], 
   Entity["Mountain", "BlackCap::stw8t"], 
   Entity["Mountain", "BlackCrescentMountain::9kv2y"], 
   Entity["Mountain", "BlueJob::7k6mc"], 
   Entity["Mountain", "Bondcliff"], 
   Entity["Mountain", "BoottSpur::cn623"], 
   Entity["Mountain", "CannonMountain::ctp49"], 
   Entity["Mountain", "CarterDome"], 
   Entity["Mountain", "CrotchedMountain::34sd3"], 
   Entity["Mountain", "EastmanMountain::72n76"], 
   Entity["Mountain", "EastPeak::mq29m"], 
   Entity["Mountain", "GaleheadMountain::4sm7n"], 
   Entity["Mountain", "GapMountain::pdxy9"], 
   Entity["Mountain", "GunstockMountain::m3drm"], 
   Entity["Mountain", "ImpMountain::xq742"], 
   Entity["Mountain", "KearsargeNorth::48k2t"], 
   Entity["Mountain", "KidderMountain::6n368"], 
   Entity["Mountain", "LarcomMountain::229k6"], 
   Entity["Mountain", "LittleHaystackMountain::pb363"], 
   Entity["Mountain", "LittleMonadnockMountain::79k9k"], 
   Entity["Mountain", "LoonMountain::pz4tf"], 
   Entity["Mountain", "LovewellMountain::hdrr3"], 
   Entity["Mountain", "MiddleCarterMountain::xry6p"], 
   Entity["Mountain", "MiddleMoriahMountain::t4g69"], 
   Entity["Mountain", "MineHill::8jh85"], 
   Entity["Mountain", "MooseMountain::628t9"], 
   Entity["Mountain", "MountArfield"], 
   Entity["Mountain", "MountAvalon::2q623"], 
   Entity["Mountain", "MountBlue::7584f"], 
   Entity["Mountain", "MountBond"], 
   Entity["Mountain", "MountCabot::pd355"], 
   Entity["Mountain", "MountCardigan::jfn3z"], 
   Entity["Mountain", "MountCarrigain"], 
   Entity["Mountain", "MountChocorua"], 
   Entity["Mountain", "MountClay::68jcg"], 
   Entity["Mountain", "MountCrescent::5323x"], 
   Entity["Mountain", "MountDavis::3gy56"], 
   Entity["Mountain", "MountDoublehead::7v4c8"], 
   Entity["Mountain", "MountEisenhower::w8t5t"], 
   Entity["Mountain", "MountField::8x8xp"], 
   Entity["Mountain", "MountFlume::2f974"], 
   Entity["Mountain", "MountFranklin::6bwfh"], 
   Entity["Mountain", "MountGuyot::skb7j"], 
   Entity["Mountain", "MountHale::x2s5c"], 
   Entity["Mountain", "MountHight::6252v"], 
   Entity["Mountain", "MountIsolation"]};
GeoGraphics[{Red, PointSize[0.01], Point[mnh]}, ImageSize -> 500];

im = GeoGraphics[{Red, PointSize[0.01], Point[mnh]}, ImageSize -> 500];
im3 = Image3D[{Image[im]}];

trans = RescalingTransform[
   im[[15, 2, 2, 2]], {0, #} & /@ Most@ImageDimensions[im3]];
lines = Line[{Append[t = trans[Reverse[#["Coordinates"]]], 0], 
      Append[t, #["Elevation"][[1]]]}] & /@ mnh;
Show[{im3, Graphics3D[{Blue, lines}]}, BoxRatios -> {1, 1, 1}, 
 SphericalRegion -> True, PlotRange -> All, ImageSize -> 600]