windows phone 7 - Rendering bug in Bing Maps MapPolyline on WP7 if zoomed out? -
i'm having trouble mappolyline
. somehow renders gps trace incorrectly if zoomed out.
at low mapcontrol.zoomlevel (eg 9) lines/edges still drawn shouldn't. here screenshots demonstrate odd behavior.
http://img403.imageshack.us/g/capture4jz.png/
image description:
- the first image zoomed out (zoomlevel = 9) (pay attention blue mappolyline)
- second image zoomed in little (the mappolyline still same same -> incorrect)
- third image again zoomed in further (however mappolyline looks still similar)
- last image: actual gps trace looks like.
so mappolyline drawing gps trace incorrectly if map zoomed out. seems stops scaling @ point , stays same @ lower zoomlevels (9 - 15 == zooming out)
maybe did wrong? can tell me how fix this? workaround?
here simple test app demonstrate odd behavior (this behavior same on device , simulator):
mainpage.xaml
<!--contentpanel - place additional content here--> <grid x:name="contentpanel" grid.row="1" margin="12,0,12,0" > <my:map x:name="mapcontrol" margin="8" credentialsprovider="{binding credentialsprovider}"> <my:maplayer> <my:mappolyline x:name="mappolyline" stroke="#ff2c76b7" opacity="0.85" strokethickness="6" /> </my:maplayer> </my:map> <button content="+" horizontalalignment="left" height="86" verticalalignment="bottom" margin="108,0,0,51" width="95" name="zoominbutton" click="zoominbutton_click" /> <button content="-" horizontalalignment="right" height="86" verticalalignment="bottom" margin="0,0,101,51" width="98" name="zoomoutbutton" click="zoomoutbutton_click" /> </grid>
mainpage.xaml.cs
// constructor public mainpage() { initializecomponent(); this.datacontext = this; // load actual trace var loadedtrace = loadcardrive(); var locations = new locationcollection(); foreach (var item in loadedtrace) { locations.add(item.location); } mappolyline.locations = locations; // zoom center mapcontrol.setview(locationrect.createlocationrect(locations)); mapcontrol.zoomlevel = 9; } private void zoominbutton_click(object sender, routedeventargs e) { mapcontrol.zoomlevel += 1; debug.writeline(mapcontrol.zoomlevel); } private void zoomoutbutton_click(object sender, routedeventargs e) { mapcontrol.zoomlevel -= 1; debug.writeline(mapcontrol.zoomlevel); } #region car drive trace public list<geoposition<geocoordinate>> loadcardrive() { return new list<geoposition<geocoordinate>>() { new geoposition<geocoordinate>(new datetimeoffset(634315405647110000, timespan.fromhours(1)), new geocoordinate(48.24879119, 14.30983157, 264.5, 7, 8, 0, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405667080000, timespan.fromhours(1)), new geocoordinate(48.24881212, 14.30975438, 266.25, 9, 8, 3.08515646975006, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405686990000, timespan.fromhours(1)), new geocoordinate(48.2488539, 14.30977517, 264.450002034505, 9, 8, 2.7708502915673, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405707010000, timespan.fromhours(1)), new geocoordinate(48.24888582, 14.30973458, 264.833329942491, 7, 6, 2.622272942855, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405727010000, timespan.fromhours(1)), new geocoordinate(48.24890673, 14.30970928, 264.027773256655, 7, 6, 2.09121417243467, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405747020000, timespan.fromhours(1)), new geocoordinate(48.2489299, 14.30967342, 263.053696997372, 7, 6, 1.89013767966395, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405767030000, timespan.fromhours(1)), new geocoordinate(48.24893927, 14.30963082, 262.293819348999, 7, 6, 1.66950420129036, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405787040000, timespan.fromhours(1)), new geocoordinate(48.2489513, 14.30961666, 260.815840816629, 7, 6, 1.45526477188896, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405807090000, timespan.fromhours(1)), new geocoordinate(48.24897547, 14.30958534, 260.136549319532, 7, 6, 1.42904734840548, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405827120000, timespan.fromhours(1)), new geocoordinate(48.2490056, 14.30956493, 259.084125976376, 7, 4, 1.48926924922331, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405847120000, timespan.fromhours(1)), new geocoordinate(48.24901793, 14.30954465, 258.240225098636, 7, 4, 1.8838781127322, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405927280000, timespan.fromhours(1)), new geocoordinate(48.24901616, 14.30950247, 257.208112955994, 7, 6, 1.42209719840891, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405947300000, timespan.fromhours(1)), new geocoordinate(48.24902166, 14.30943419, 256.616110650371, 9, 6, 1.37894394353935, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405967320000, timespan.fromhours(1)), new geocoordinate(48.24902592, 14.30939502, 256.30807656996, 12, 6, 1.19195039763596, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315405987320000, timespan.fromhours(1)), new geocoordinate(48.24906708, 14.30934571, 256.508064441282, 7, 6, 2.04223380763222, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406007340000, timespan.fromhours(1)), new geocoordinate(48.24907986, 14.30932245, 256.405378302576, 7, 6, 2.21050803017023, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406027360000, timespan.fromhours(1)), new geocoordinate(48.24908171, 14.30927428, 256.371151650296, 9, 6, 2.11644554209566, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406067370000, timespan.fromhours(1)), new geocoordinate(48.24906849, 14.30929253, 256.325514053301, 7, 6, 1.30317650495332, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406107390000, timespan.fromhours(1)), new geocoordinate(48.24908503, 14.3092208, 255.065555234533, 9, 8, 1.03139622772203, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406147410000, timespan.fromhours(1)), new geocoordinate(48.24912105, 14.30913114, 253.697027164955, 17, 12, 1.28256512364723, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406167450000, timespan.fromhours(1)), new geocoordinate(48.24913691, 14.30915501, 253.087527466496, 17, 12, 1.48256704150828, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406207450000, timespan.fromhours(1)), new geocoordinate(48.24910669, 14.30913564, 252.394849509312, 26, 12, 1.45368860226716, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406227460000, timespan.fromhours(1)), new geocoordinate(48.24905554, 14.30905891, 252.427454922925, 14, 12, 1.70982854209585, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406247480000, timespan.fromhours(1)), new geocoordinate(48.24904891, 14.30902087, 252.407432776241, 14, 12, 2.32817436513961, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406267490000, timespan.fromhours(1)), new geocoordinate(48.24903438, 14.30895531, 252.511633302066, 9, 8, 2.40899029224891, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406307520000, timespan.fromhours(1)), new geocoordinate(48.2490193, 14.30891254, 254.10635332493, 9, 8, 1.92159113286849, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406327520000, timespan.fromhours(1)), new geocoordinate(48.24899752, 14.30886584, 255.33932684116, 9, 8, 1.38514001477141, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406347530000, timespan.fromhours(1)), new geocoordinate(48.24899835, 14.30883893, 256.148560055363, 12, 8, 1.2548486272039, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406387570000, timespan.fromhours(1)), new geocoordinate(48.24895525, 14.30878854, 257.595958229831, 9, 6, 1.33167435077218, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406407570000, timespan.fromhours(1)), new geocoordinate(48.24894308, 14.30881919, 257.748172761731, 7, 6, 1.3437967879493, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406427590000, timespan.fromhours(1)), new geocoordinate(48.24894424, 14.30879602, 258.148045698359, 7, 6, 1.40506752120999, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406447590000, timespan.fromhours(1)), new geocoordinate(48.24897013, 14.3087708, 258.73206875102, 7, 6, 1.32722909233662, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406507630000, timespan.fromhours(1)), new geocoordinate(48.24899411, 14.30871161, 258.393367414116, 7, 6, 1.19050981731556, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406527630000, timespan.fromhours(1)), new geocoordinate(48.24900568, 14.30880985, 259.441816124056, 7, 6, 1.60071978622932, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406587660000, timespan.fromhours(1)), new geocoordinate(48.24901868, 14.30875422, 258.645063213896, 7, 6, 1.42179922641885, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406607680000, timespan.fromhours(1)), new geocoordinate(48.2490225, 14.3087142, 258.128955710307, 9, 8, 1.6648361142989, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406627690000, timespan.fromhours(1)), new geocoordinate(48.24899202, 14.30876327, 258.258006308068, 7, 6, 1.63091850786356, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406647700000, timespan.fromhours(1)), new geocoordinate(48.248999, 14.30873814, 256.795654006125, 7, 6, 1.69687386722371, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406747760000, timespan.fromhours(1)), new geocoordinate(48.24898286, 14.30874518, 254.117882702387, 7, 6, 1.19924244305006, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406787770000, timespan.fromhours(1)), new geocoordinate(48.24900199, 14.30874282, 252.40450816716, 7, 8, 0, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406807800000, timespan.fromhours(1)), new geocoordinate(48.24901148, 14.30871393, 250.174130289849, 7, 12, 0.562022727939566, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406847810000, timespan.fromhours(1)), new geocoordinate(48.24902338, 14.30869189, 247.292875416659, 12, 12, 0.674589842740374, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406867820000, timespan.fromhours(1)), new geocoordinate(48.24902707, 14.30871843, 246.122333200998, 9, 12, 0.873256080158558, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406907840000, timespan.fromhours(1)), new geocoordinate(48.2490188, 14.30875003, 245.538406941563, 9, 12, 0.82098105319536, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406967870000, timespan.fromhours(1)), new geocoordinate(48.24903988, 14.30876066, 246.520244679682, 14, 12, 0.75138387232891, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315406987880000, timespan.fromhours(1)), new geocoordinate(48.24901843, 14.30869998, 247.552885908253, 14, 12, 1.28196277976357, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407007890000, timespan.fromhours(1)), new geocoordinate(48.24901495, 14.30869837, 247.82437482814, 12, 12, 1.07140934525889, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407067930000, timespan.fromhours(1)), new geocoordinate(48.24893342, 14.30866289, 245.792420245464, 9, 8, 1.48298498088654, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407087940000, timespan.fromhours(1)), new geocoordinate(48.24894735, 14.30866824, 243.872265024535, 9, 8, 0.870070550784878, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407107950000, timespan.fromhours(1)), new geocoordinate(48.24895537, 14.3086449, 241.021559722161, 9, 12, 1.11347094540375, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407147970000, timespan.fromhours(1)), new geocoordinate(48.24895027, 14.30862412, 238.031278984576, 12, 8, 0.773571842819805, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407167980000, timespan.fromhours(1)), new geocoordinate(48.24894213, 14.30857577, 235.850946235579, 14, 12, 1.12116766217648, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407188000000, timespan.fromhours(1)), new geocoordinate(48.24895591, 14.30851958, 233.260739705546, 19, 12, 1.27163333307808, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407208000000, timespan.fromhours(1)), new geocoordinate(48.24895305, 14.30858254, 230.737230681547, 12, 8, 1.90409780733048, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407228010000, timespan.fromhours(1)), new geocoordinate(48.24896214, 14.3085505, 228.832656795698, 14, 8, 1.72105403937988, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407248030000, timespan.fromhours(1)), new geocoordinate(48.24891651, 14.30852579, 227.723297860253, 12, 12, 2.15635087285783, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407268030000, timespan.fromhours(1)), new geocoordinate(48.24888497, 14.30851276, 226.018651551984, 14, 12, 1.91486801065635, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407308050000, timespan.fromhours(1)), new geocoordinate(48.24889868, 14.3084777, 224.780651838584, 17, 12, 1.7239841715139, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407328060000, timespan.fromhours(1)), new geocoordinate(48.2489161, 14.3084672, 223.699763727846, 19, 12, 1.19438627085672, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407348070000, timespan.fromhours(1)), new geocoordinate(48.24892424, 14.30845455, 222.860140556649, 14, 8, 0.846422498991796, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407388110000, timespan.fromhours(1)), new geocoordinate(48.24897215, 14.30844792, 223.319966060326, 14, 8, 1.20716161411786, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407428130000, timespan.fromhours(1)), new geocoordinate(48.24897508, 14.30842744, 224.160031469981, 19, 12, 0.932657766636434, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407448150000, timespan.fromhours(1)), new geocoordinate(48.24899233, 14.30847249, 225.093328441092, 14, 12, 1.13484005811991, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407488210000, timespan.fromhours(1)), new geocoordinate(48.2489731, 14.30852733, 226.251119970358, 14, 12, 1.0108183931221, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407508180000, timespan.fromhours(1)), new geocoordinate(48.24895873, 14.3085864, 226.881478734806, 12, 8, 1.4631129974199, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407528190000, timespan.fromhours(1)), new geocoordinate(48.24897776, 14.30857073, 227.710866235055, 12, 8, 1.83969601940619, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407548210000, timespan.fromhours(1)), new geocoordinate(48.24895268, 14.30856623, 228.097452392297, 14, 8, 1.80248844193688, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407568210000, timespan.fromhours(1)), new geocoordinate(48.24899134, 14.30857573, 228.902770841279, 9, 8, 1.87871250563877, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407588220000, timespan.fromhours(1)), new geocoordinate(48.24896963, 14.30857888, 229.666741077859, 12, 8, 1.57348661211614, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407608230000, timespan.fromhours(1)), new geocoordinate(48.24897652, 14.30861496, 230.789833237369, 14, 8, 1.44588983852298, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407648250000, timespan.fromhours(1)), new geocoordinate(48.24896462, 14.30855057, 232.685526806248, 12, 12, 1.62641254715026, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407668260000, timespan.fromhours(1)), new geocoordinate(48.24897762, 14.30855976, 233.658453347872, 14, 12, 1.30362718600298, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407708280000, timespan.fromhours(1)), new geocoordinate(48.24897772, 14.30853848, 235.647995419212, 7, 8, 1.09568972753188, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315407908300000, timespan.fromhours(1)), new geocoordinate(48.24897772, 14.30853848, 235.647995419212, 7, 8, 0, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412290810000, timespan.fromhours(1)), new geocoordinate(48.24900281, 14.30853533, 238.398661578303, 7, 6, 0, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412330830000, timespan.fromhours(1)), new geocoordinate(48.24916174, 14.30887975, 240.382221033677, 9, 8, 2.0845116247323, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412370850000, timespan.fromhours(1)), new geocoordinate(48.24932241, 14.30944236, 242.993631606337, 9, 8, 5.21982023106023, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412390860000, timespan.fromhours(1)), new geocoordinate(48.24939839, 14.30973055, 244.458617546671, 7, 6, 8.64711029733088, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412410870000, timespan.fromhours(1)), new geocoordinate(48.24949181, 14.31003057, 246.884087120013, 7, 8, 10.8538398691813, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412430880000, timespan.fromhours(1)), new geocoordinate(48.24959673, 14.31033509, 248.180905624572, 9, 8, 11.8312, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412450890000, timespan.fromhours(1)), new geocoordinate(48.24965238, 14.31066123, 249.088334983872, 7, 8, 12.6028, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412470900000, timespan.fromhours(1)), new geocoordinate(48.24978463, 14.3109267, 249.723078168309, 9, 8, 12.5685068628947, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412490910000, timespan.fromhours(1)), new geocoordinate(48.24994331, 14.3111727, 249.970473085232, 9, 8, 12.4484800654093, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412510920000, timespan.fromhours(1)), new geocoordinate(48.25010288, 14.3112952, 249.897850417847, 9, 6, 11.608293464152, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412550940000, timespan.fromhours(1)), new geocoordinate(48.2504877, 14.31153935, 251.089439133188, 7, 6, 10.8881333333333, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412570950000, timespan.fromhours(1)), new geocoordinate(48.25063711, 14.31161383, 251.629094482507, 7, 6, 9.91077352956136, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412590960000, timespan.fromhours(1)), new geocoordinate(48.25077697, 14.31164086, 251.939513239737, 9, 8, 9.08773349685669, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412610970000, timespan.fromhours(1)), new geocoordinate(48.25089215, 14.31165132, 251.956198505071, 12, 8, 7.79596221612368, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412630980000, timespan.fromhours(1)), new geocoordinate(48.25094566, 14.31162197, 252.531907983946, 7, 6, 5.73086814976673, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412650990000, timespan.fromhours(1)), new geocoordinate(48.25097386, 14.31163463, 252.696037530844, 7, 6, 3.77117962934291, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412671000000, timespan.fromhours(1)), new geocoordinate(48.2510034, 14.31162491, 253.075981838263, 9, 6, 2.64702266191533, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412691010000, timespan.fromhours(1)), new geocoordinate(48.25102581, 14.31159456, 252.590673123036, 9, 6, 1.97770819383125, 0)), new geoposition<geocoordinate>(new datetimeoffset(634315412731030000, timespan.fromhours(1)), new geocoordinate(48.25103794, 14.31161438, 252.78888905611, 9, 6, 1.61398873787711, 0)), }; } #endregion
i not think have done wrong, issue (i believe) there great deal of data in small vicinity. means lots of sharp angles quite high strokethickness melds 1 blob.
a workaround makes more eye pleasing change strokethickness based on zoom level (the more zoomed out lower strokethickness) following :
private void mapcontrol_viewchangeend(object sender, mapeventargs e) { if (mapcontrol.zoomlevel > 17) mappolyline.strokethickness = 6.00; else mappolyline.strokethickness = 2.00; }
i believe needs looked though.
Comments
Post a Comment