ThinkGeo.com    |     Documentation    |     Premium Support

Wrong webImage url

Hi,


I'm developing a Dnn(v.6.2.5) module using the map control from web edition (using MapSuiteCore and WebEdition 6.0.0.102), and when i apply a custom style for the markers, the path for the webImages is changed the "\" for "% 5 c"(without spaces) and the image don't showup, but if i don't set the image path it shows the default blue marker i'm setting the value like this:



string iconsDirectory = MapPath("~/theme/Icons/");
MarkerValueItem valItemIcon1 = new MarkerValueItem("Icono1");
WebImage imgIcon1 = new WebImage(iconsDirectory + @"Icono1.png", 35, 35);
valItemIcon1.DefaultMarkerStyle.WebImage = imgIcon1;


When the map si drawn the markers have that red "X" and in its properties shown the image address with the %N instead their set values is this and encoding issue?, i've checked in the debugger and everything in the code behind seems ok, but in the map the markers don't show the images and neither the labels, any suggestions?



Hello Fernando, 
  
 Thanks for your post, I think it’s a html encoding problem, can you try use 
  
  System.Web.HttpUtility.UrlDecode 
  
  to decode the marker image address and have a try? 
  
 If it’s not working, is that possible you can provide a sample to us to recreate it? 
  
 Regards, 
  
 Gary

Hi Gary,


I'm not sure if i got right what you suggested, but tested using

WebImage imgIcon1 = new WebImage(HttpUtility.UrlDecode(iconsDirectory + @"icono1.png"), 35, 35);


and it didn't worked.

Attached to this post i send a sample, i've stripped out the map files from the directory just to keep it in the size to attach, those are the countries02.shp files that you use in your samples, that module is mounted on a dnn 6 installation. Hope you can find what's going on.

Thanks for your help.



MapSuiteModuleTest.zip (117 KB)

 Hi,


I'd like to offer an opinion on this matter, if it's ok.


It seems like a server-based path name is used in the client to display the images (re: the backward slash, and the use of MapPath), which is inherently wrong. The images should be referenced by urls on the client, rather than by (server/project) path names.


I haven't used the MarkerValueItem as such, but have used InMemoryMarkerOverlay and a custom MarkerStyle to go with it. In the latter I do create and display a WebImage, and here I use an url.


Furthermore, I've found the marker implementation in Map Suite to be quite unstable, having the client-side javascript  generating the markers crash very easily and for no obvious reason. E.g., it's not possible to use quote characters in texts or tags for some reason. Maybe the server-generated javascript isn't properly escaped ?


I hope you'll find a solution to your problem.


 



Hi Lars,

Thank you! removing the MapPath worked! now i can see the custom images and the labels! :)
And when you talk about unestable markers system and crashing is it associated with the user interaction or position updating or it’s related just with characters used in tags?

 Hi Fernando,


Great it worked :-)


The problem with stability lies with the way Map Suite and OpenLayers work together. The marker content is set up on server-side, and Map Suite publishes this content using dynamic JS services (GeoResource.???).


As I wrote, I utilize a custom MarkerStyle. In this, I populate a property named Popup:ContentHTML. I've found that the markup in ContentHTML cannot contain e.g. quote characters, or else the markers don't work (the layer won't display). This is probably due to some syntax violation, hence the hint at errornous escaping.


But simple labelling may work, unless the same missing escaping applies with them. But it's easy to test, just add some quotes (or apostrophes) to the label text, and see what happens.


Cheers.


 



Hello Fernando, Lars I,


 
So Fernando, looks like your problem was resolved, that's good.
 
And Lars I, I did some test on my side, I use two way:

markerOverlay123.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "'Kansas City'</Div>";
 
markerOverlay123.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "\"Kansas City\"</Div>";

The first way works fine, but with second way, the marker can't display.
 
The reason which marker does not display is because when we convert json object to client side, we will format the string, then the backslash will be remove because program think it's just define the quote character. So when the json string to the client side, the contentHtml become
 
and it will have syntax violation.

""Kansas City"</Div>"

The workaround is set more backslash like:

markerOverlay123.ZoomLevelSet.ZoomLevel01.DefaultMarkerStyle.Popup.ContentHtml = "\\\"Kansas City\\\"</Div>";

Then even after json convert, it still will be fine.
 
Regards,
 
Gary

 Hi Gary,


Thanks for this. But we do agree on that this is a work-around, right ?


Escaping should always occur at the point where the possible syntax violation is introduced, not anywhere else.


When setting a ContentHTML property to a string value, I can only provide correct HTML markup. Any escaping will need to be performed in relation to the actual usage, which in the Map Suite runtime system may be JSON, or may be something entirely different. I can't predict what possible usages my markup will encounter.


So when will Map Suite get correct escaping of the markup for marker layers ?


 



Hello Lars I, 
  
 Yes, you are absolutely right, this is just a workaround, and we are working on this now, we will fix it. 
  
 Thanks for the help on this. 
  
 Regards, 
  
 Gary

Hello Lars I, 
  
 We have fixed this bug, please get the newest dlls tomorrow and have another try. 
  
 Regards, 
  
 Gary