Josh2
January 23, 2012, 6:50pm
1
Using Map Suite Web Edition how come when I do the call to GetFeaturesNearestTo I get the error "The Field name you want is not exist"?
I have removed all code but the GetFeaturesNearestTo() call just to make sure it isn't something else but still throws the error.
string[] shapeFiles = new string[] {ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA10.shp"
, ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA20.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA30.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA40.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA50.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA60.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA65.shp" , ConfigurationManager.AppSettings["MapDataDirectory"] + "/USA/TLKA/NDlkaA70.shp" }; for (int idx = 0; idx < shapeFiles.Length; ++idx) { MultipleShapeFileFeatureLayer.BuildIndex(shapeFiles[idx], BuildIndexMode.DoNotRebuild); } MultipleShapeFileFeatureLayer lineLayer = new MultipleShapeFileFeatureLayer(shapeFiles); lineLayer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20; billingOverlay.Layers.Add("ND", lineLayer); Collection<Feature> closestFeatures = billingLayer.QueryTools.GetFeaturesNearestTo(new PointShape(vertex), GeographyUnit.Feet, 100, ReturningColumnsType.AllColumns); Any help would be greatly appreciated. - Josh
Josh, Thanks for your sample code, I can recreated your issue. I think it’s maybe a bug in our MapSuiteCore, I will provide a workdaround to you first and meanwhile we will try to fix it, any progress I will let you know. Thanks, James
Josh2
January 24, 2012, 10:30am
3
Thanks for the update the workaround should be good for now as I'm not sure when we will get a chance to implement a new update to the MapSuiteCore files.
- Josh
Josh2
January 25, 2012, 10:36am
4
I know you all are busy people but any update on this after 2 days?
Thanks,
- Josh
Clint
January 25, 2012, 11:08am
5
Josh, James is out the rest of the week so I’m not sure why he said he was going to provide a work around. I will take a look at it today and see if we can figure out what is going on. From your code snippet, I assuming that the billingLayer is actually all the North Dakota road files and that you are trying to find the closest road to a particular point within a 100 feet, is this correct? Thanks!
Josh2
January 25, 2012, 11:20am
7
LayerOverlay billingOverlay = new LayerOverlay("billingOverlay");
billingOverlay.IsBaseOverlay = false; mapControl.CustomOverlays.Add(billingOverlay); and then later in the code right before the GetNearestTo MultipleShapeFileFeatureLayer billingLayer = (MultipleShapeFileFeatureLayer)((LayerOverlay)mapControl.CustomOverlays["billingOverlay"]).Layers[0];
Clint
January 25, 2012, 3:06pm
8
Josh, We figured out what was happening. The NDlkaA10 shapefile actually has an extra column on it called “Symbol” since not all the columns are the same across all the shapefiles the query is causing an error when it hits a shapefile that doesn’t have the “Symbol” column. We are looking into a better way to handle this exception so it’s apparent what is going on to the developer and they can fix the issue. The best way to get it to work now is to pass in the column names that you care about instead of returning all of the columns. One requirement is that the columns you specify must exist in all the shapfiles that make up the MultiShapefileFeaturelayer. Below is a code example on how to specify only the columns you want returned for the feature. NDRoads.QueryTools.GetFeaturesNearestTo(new PointShape(-96.7983, 46.8751), GeographyUnit.DecimalDegree, 10, new string[]{“FENAME”,“FEDIRP”,“FETYPE”}); Thanks!
Josh2
January 26, 2012, 1:38pm
9
Clint thanks for the response.
That seems to have solved the error issue which is great. However now it is taking a extreme amount of time to find the closest feature. Do you maybe have any suggestions on how I can speed this process up?
I have tried to call GetFeaturesWithinDistanceOf and it seems to return every feature in the MultiShapeFileFeatureLayer no matter what distance I give it.
- Josh
David
January 27, 2012, 1:01pm
10
Josh, Let me look into that one. Is this going to be the main reason you use the MultipleShapeFileFeatureLayer? David
Josh2
January 27, 2012, 1:21pm
11
That is correct.
Basically what I'm looking to do is load all of North Dakotas shapefiles. And using points from a GPS unit on a truck find the nearest road and display that road in a report format with distance and time on road.
I have the distance and time all finished just cannot pull the road name for the report.
Example:
I-94 58456ft 1h 21min
HWY-1 12345ft 2hr
Main Steet 1000ft 22min
If there is a better example out there that I may not have found that would be great too.
- Josh
Josh2
January 27, 2012, 1:37pm
12
Here are some test gps coords if it helps.
Most of them should evaluate to Township Road 133.
Latitude Longitude
47.180945 -95.996972
47.181062 -95.996970
47.181188 -95.996968
47.181317 -95.996972
47.181447 -95.996972
47.181568 -95.996972
47.181697 -95.996972
47.181820 -95.996973
47.181945 -95.996975
47.182070 -95.996975
47.182165 -95.996977
47.182200 -95.996975
47.182275 -95.996975
47.182355 -95.996977
47.182445 -95.996978
47.182548 -95.996980
47.182648 -95.996978
47.182752 -95.996980
47.182877 -95.996980
47.182995 -95.996980
47.183122 -95.996978
47.183242 -95.996975
47.183363 -95.996975
47.183477 -95.996975
47.183595 -95.996977
47.183717 -95.996972
47.183835 -95.996968
47.183947 -95.996970
47.184065 -95.996973
47.184178 -95.996975
47.184278 -95.996970
47.184382 -95.996968
47.184495 -95.996972
47.184607 -95.996975
47.184727 -95.996975
47.184840 -95.996975
47.184940 -95.996970
47.185063 -95.996972
47.185185 -95.996973
47.185307 -95.996977
47.185425 -95.996975
47.185543 -95.996975
47.185668 -95.996977
47.185790 -95.996973
47.185922 -95.996977
47.186048 -95.996980
47.186190 -95.996980
47.186337 -95.996982
47.186477 -95.996985
47.186610 -95.996992
47.186743 -95.996993
47.186878 -95.996995
47.187025 -95.996997
47.187167 -95.996995
47.187312 -95.996997
47.187445 -95.996997
47.187572 -95.997002
47.187697 -95.997005
47.187820 -95.997007
47.187957 -95.997007
47.188093 -95.997008
47.188217 -95.997007
47.188353 -95.997010
47.188500 -95.997015
47.188642 -95.997017
47.188782 -95.997017
47.188913 -95.997022
47.189052 -95.997020
47.189188 -95.997020
47.189322 -95.997022
47.189460 -95.997022
47.189597 -95.997020
47.189733 -95.997023
47.189868 -95.997025
47.190005 -95.997027
47.190135 -95.997027
47.190263 -95.997025
47.190398 -95.997023
47.190530 -95.997025
47.190665 -95.997025
47.190795 -95.997025
47.190928 -95.997025
47.191065 -95.997025
47.191200 -95.997027
47.191330 -95.997028
47.191475 -95.997033
47.191620 -95.997033
47.191758 -95.997035
47.191898 -95.997037
47.192035 -95.997035
47.192168 -95.997038
47.192303 -95.997043
47.192440 -95.997042
47.192575 -95.997042
47.192698 -95.997042
47.192742 -95.997043
47.192742 -95.997043
47.192742 -95.997043
47.192742 -95.997042
47.192742 -95.997042
47.192742 -95.997042
47.192743 -95.997042
47.192743 -95.997042
47.192743 -95.997043
47.192743 -95.997043
47.192850 -95.997052
47.192982 -95.997053
47.193117 -95.997052
47.193252 -95.997058
47.193397 -95.997057
47.193547 -95.997055
47.193693 -95.997055
47.193838 -95.997057
47.193975 -95.997060
47.194108 -95.997062
47.194230 -95.997065
47.194343 -95.997062
47.194465 -95.997058
47.194585 -95.997065
47.194708 -95.997068
47.194823 -95.997073
47.194953 -95.997068
47.195097 -95.997072
47.195240 -95.997072
47.195367 -95.997078
47.195510 -95.997080
47.195648 -95.997083
47.195783 -95.997085
47.195923 -95.997087
47.196063 -95.997087
47.196203 -95.997095
47.196347 -95.997097
47.196483 -95.997100
47.196623 -95.997103
47.196755 -95.997108
47.196883 -95.997115
47.197013 -95.997120
47.197148 -95.997123
47.197288 -95.997125
47.197427 -95.997128
47.197567 -95.997130
47.197707 -95.997133
47.197848 -95.997138
47.197990 -95.997143
47.198132 -95.997147
47.198277 -95.997150
47.198420 -95.997153
47.198567 -95.997160
47.198712 -95.997163
47.198858 -95.997168
47.199005 -95.997172
47.199152 -95.997178
47.199292 -95.997182
47.199432 -95.997185
47.199552 -95.997192
47.199678 -95.997192
47.199800 -95.997197
47.199928 -95.997200
47.200058 -95.997202
47.200190 -95.997207
47.200317 -95.997203
47.200427 -95.997207
47.200550 -95.997210
47.200670 -95.997213
47.200793 -95.997215
47.200922 -95.997217
47.201063 -95.997227
47.201207 -95.997228
47.201363 -95.997230
47.201518 -95.997233
47.201652 -95.997237
47.201795 -95.997237
47.201927 -95.997240
47.201940 -95.997240
47.201940 -95.997238
47.201940 -95.997238
47.201940 -95.997238
47.201940 -95.997238
47.201942 -95.997238
47.201942 -95.997238
47.201942 -95.997238
47.201942 -95.997238
47.201942 -95.997238
47.201942 -95.997238
47.201940 -95.997238
47.201940 -95.997238
47.201940 -95.997238
47.201940 -95.997238
47.201940 -95.997240
47.201940 -95.997240
47.201940 -95.997240
47.201940 -95.997240
47.201968 -95.997240
47.202100 -95.997238
47.202245 -95.997242
47.202390 -95.997242
47.202528 -95.997242
47.202663 -95.997245
47.202803 -95.997245
47.202950 -95.997243
47.203093 -95.997243
47.203237 -95.997245
47.203382 -95.997248
47.203523 -95.997253
47.203663 -95.997253
47.203798 -95.997253
47.203940 -95.997253
47.204080 -95.997255
47.204218 -95.997257
47.204343 -95.997258
47.204478 -95.997255
47.204612 -95.997257
47.204765 -95.997257
47.204915 -95.997255
47.205060 -95.997255
47.205197 -95.997257
47.205340 -95.997258
47.205480 -95.997260
47.205618 -95.997258
47.205755 -95.997258
47.205895 -95.997258
47.206040 -95.997260
47.206187 -95.997262
47.206328 -95.997260
47.206470 -95.997260
47.206610 -95.997263
47.206745 -95.997267
47.206880 -95.997267
47.207017 -95.997267
47.207155 -95.997267
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207233 -95.997268
47.207308 -95.997265
47.207463 -95.997263
47.207618 -95.997267
47.207772 -95.997268
47.207923 -95.997270
47.208073 -95.997270
47.208223 -95.997272
47.208370 -95.997273
47.208510 -95.997272
47.208650 -95.997272
47.208790 -95.997272
47.208937 -95.997272
47.209082 -95.997272
47.209225 -95.997275
47.209368 -95.997278
47.209500 -95.997283
47.209613 -95.997282
47.209652 -95.997280
47.209743 -95.997275
47.209857 -95.997273
47.209955 -95.997275
47.210065 -95.997275
47.210190 -95.997275
47.210322 -95.997277
47.210465 -95.997278
47.210618 -95.997275
47.210767 -95.997273
47.210832 -95.997272
47.210722 -95.997272
47.210505 -95.997285
47.210310 -95.997318
47.210123 -95.997327
47.209960 -95.997318
47.209777 -95.997312
47.209645 -95.997307
47.209632 -95.997308
47.209693 -95.997307
47.209795 -95.997310
47.209910 -95.997315
47.210032 -95.997320
47.210157 -95.997318
47.210285 -95.997320
47.210415 -95.997320
47.210557 -95.997318
47.210698 -95.997318
47.210840 -95.997317
47.210983 -95.997313
47.211125 -95.997315
47.211263 -95.997315
47.211402 -95.997315
47.211540 -95.997315
47.211682 -95.997315
47.211820 -95.997317
47.211960 -95.997315
47.212097 -95.997315
47.212233 -95.997315
47.212370 -95.997313
47.212492 -95.997313
47.212618 -95.997310
47.212752 -95.997305
47.212878 -95.997308
47.212998 -95.997310
47.213130 -95.997305
47.213265 -95.997302
47.213403 -95.997300
47.213538 -95.997303
47.213560 -95.997305
47.213560 -95.997307
47.213560 -95.997307
47.213562 -95.997308
47.213562 -95.997308
47.213562 -95.997308
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213563 -95.997310
47.213598 -95.997302
47.213680 -95.997302
47.213763 -95.997302
47.213848 -95.997302
47.213957 -95.997298
47.214078 -95.997298
47.214175 -95.997298
47.214275 -95.997297
47.214413 -95.997295
47.214545 -95.997292
47.214677 -95.997293
47.214818 -95.997290
47.214957 -95.997293
47.215093 -95.997290
47.215232 -95.997290
47.215387 -95.997287
47.215528 -95.997285
47.215670 -95.997283
47.215810 -95.997282
47.215958 -95.997280
47.216118 -95.997280
47.216265 -95.997277
47.216413 -95.997277
47.216563 -95.997275
47.216698 -95.997273
47.216825 -95.997275
47.216963 -95.997273
47.217100 -95.997268
47.217242 -95.997265
47.217388 -95.997265
47.217538 -95.997268
47.217687 -95.997267
47.217838 -95.997265
47.217988 -95.997263
47.218135 -95.997260
47.218282 -95.997257
47.218433 -95.997258
47.218585 -95.997257
47.218732 -95.997257
47.218878 -95.997257
47.219010 -95.997255
47.219133 -95.997253
47.219282 -95.997255
47.219432 -95.997253
47.219572 -95.997253
47.219715 -95.997252
47.219862 -95.997252
47.220005 -95.997250
47.220143 -95.997250
47.220273 -95.997250
47.220370 -95.997255
47.220497 -95.997255
47.220635 -95.997258
47.220772 -95.997255
47.220908 -95.997253
47.221045 -95.997250
47.221183 -95.997247
47.221315 -95.997243
47.221447 -95.997248
47.221588 -95.997248
47.221733 -95.997243
47.221857 -95.997243
47.221957 -95.997242
47.222092 -95.997243
47.222242 -95.997242
47.222383 -95.997238
47.222530 -95.997240
47.222672 -95.997240
47.222798 -95.997235
47.222932 -95.997232
47.223078 -95.997230
47.223225 -95.997228
47.223357 -95.997235
47.223482 -95.997228
47.223622 -95.997225
47.223765 -95.997222
47.223905 -95.997220
47.224033 -95.997220
47.224177 -95.997218
47.224318 -95.997218
47.224457 -95.997217
47.224598 -95.997215
47.224743 -95.997210
47.224890 -95.997205
47.225042 -95.997205
47.225192 -95.997203
47.225338 -95.997202
47.225482 -95.997202
47.225625 -95.997198
47.225767 -95.997195
47.225905 -95.997192
47.226052 -95.997192
47.226192 -95.997190
47.226337 -95.997192
47.226482 -95.997192
47.226630 -95.997188
47.226782 -95.997187
47.226928 -95.997187
47.227073 -95.997185
47.227212 -95.997183
47.227350 -95.997180
47.227502 -95.997177
47.227655 -95.997175
47.227803 -95.997175
47.227937 -95.997175
47.228067 -95.997173
47.228207 -95.997173
47.228350 -95.997172
47.228488 -95.997168
47.228627 -95.997165
47.228765 -95.997163
47.228903 -95.997162
47.229043 -95.997158
47.229182 -95.997157
47.229323 -95.997152
47.229458 -95.997148
47.229578 -95.997147
47.229688 -95.997145
47.229803 -95.997143
47.229938 -95.997143
47.230063 -95.997145
47.230195 -95.997145
47.230328 -95.997135
47.230467 -95.997132
47.230607 -95.997128
47.230752 -95.997122
47.230898 -95.997122
47.231040 -95.997123
47.231187 -95.997122
47.231332 -95.997118
47.231475 -95.997125
47.231603 -95.997123
47.231755 -95.997125
47.231908 -95.997123
47.232063 -95.997125
47.232212 -95.997125
47.232348 -95.997127
47.232492 -95.997128
47.232638 -95.997123
47.232782 -95.997120
47.232930 -95.997122
47.233075 -95.997123
47.233220 -95.997123
47.233363 -95.997123
47.233515 -95.997125
47.233662 -95.997127
47.233802 -95.997125
47.233943 -95.997125
47.234087 -95.997125
47.234230 -95.997125
47.234360 -95.997128
47.234503 -95.997132
47.234637 -95.997133
47.234778 -95.997137
47.234922 -95.997140
47.235065 -95.997138
47.235212 -95.997135
47.235360 -95.997135
47.235507 -95.997133
47.235653 -95.997132
47.235802 -95.997132
47.235943 -95.997133
47.236083 -95.997130
47.236217 -95.997130
47.236328 -95.997130
47.236415 -95.997130
47.236515 -95.997128
47.236620 -95.997128
47.236747 -95.997128
47.236878 -95.997128
47.237007 -95.997132
47.237110 -95.997132
47.237223 -95.997130
47.237343 -95.997132
47.237457 -95.997135
47.237577 -95.997137
47.237700 -95.997133
47.237828 -95.997133
47.237957 -95.997133
47.238083 -95.997133
47.238205 -95.997132
- Josh
Clint
January 27, 2012, 3:00pm
13
Josh,
Thanks for your post, I still had a sample setup from your earlier question and I was able to to get good results in North Dakota with the following line of code:
Collection<Feature> closestFeatures = NDRoads.QueryTools.GetFeaturesWithinDistanceOf(new PointShape(-97.3876, 47.1421), GeographyUnit.DecimalDegree, DistanceUnit.Mile, .25, new string[] { "FENAME", "FEDIRP", "FETYPE" });
This returns any features within a quarter mile of the point passed in.
I noticed that the coordinates you posted were from Minnesota but it should work exacltly the same as North Dakota assuming you have it in a MultiShapeFileFeatureLayer like you did earlier in North Dakota.
Hope this helps.
Thanks!
Josh2
January 30, 2012, 11:06am
14
I feel kind of like an idiot now I was using two different trucks and locations.
I got the right truck/shape files now and it will at least return me the correct roads however it still seems kinda slow so..
1.) What kind of speed where you seeing on your test?
QueryTools.GetFeaturesNearestTo(new PointShape(vertex), GeographyUnit.Feet, 5, new string[] { "FENAME" }); is taking almost 2 min per point to find.
2.) The GetFeaturesNearestTo does that do any filtering first or does it loop through every feature in the shape file and compare distances?
Again I appreciate any help.
- Josh
Clint
January 30, 2012, 1:12pm
15
Josh, I’m getting good speed on both of the queries (less than a second), maybe you don’t have your spatial indexes setup correctly. Here is the code where I’m loading up the MultiShapeFileFeatureLayer and the corresponding indexes. MultipleShapeFileFeatureLayer.BuildIndex(@“C:\Temp\ND* ;.shp”, BuildIndexMode.DoNotRebuild); MultipleShapeFileFeatureLayer NDRoads = new MultipleShapeFileFeatureLayer(@“C:\Temp\ND* ;.shp”, @“C:\Temp\ND* ;.mids”); Give that a try and I bet you will see the performance increase dramatically. Thanks!
Josh2
January 30, 2012, 6:48pm
16
Thats it and I bet I stared at that in other posts and the wiki multiple times just didn't click. Can run through about 5k points in about 2 min now which is acceptable on our end as we are doing alot of processing between plotting the point on the map and then moving to the next point.
I appreciate all the help.
- Josh
Clint
January 31, 2012, 10:47am
17
Thanks Josh, glad it’s working.