ThinkGeo.com    |     Documentation    |     Premium Support

Rotation angle of each letter in label

Hello all,


in generally,  label is displayed according to each line in road layer.


if i don't want each letters changed its rotation angle, but label still shows according to curve of road.


could you give me some idea? 


if you don't understand what i said, you can look pictures as follows:


 


original picture.



but i want to show label like this...(please imagine the angle of each letters N,u,e,c,e,s is zero)




 Carol,


 
Thanks for your post, and your screen-shot is really helpful.
 
I got your meaning, but I think MapSuite don’t have this kind of API to fit your requirement and it’s not easy to make a workaround way too.
 
We could consider that we can add API to do it if needed.
 
Before that I want to make sure something:
There are four screen-shots that represent four conditions, could you modify them and let me know what result is your expect?
 


 
My suggestion is that just process the line is about vertical, the angle is within 60 degree. If the line is horizontal, don’t make any change just keep the original label.
 
 
Thanks
James

Thanks for your reply, James


sorry for my unclear picture. :(


I modify your picture as below:


(Each letter doesn't change its angle)




Displaying street labels as you request is not very common as a cartography standard for labeling line features such as streets. The vast majority of maps, paper maps and digital maps alike, display street labels as Map Suite does. I looked at a lot of maps in my carreer and I don’t remember seeing one with labels positioned that way. I think that there is a reason for that. Reading labels that way is more difficult and I would discourage using that letter positioning method for your own maps. But I am same time, I am open to consider that if you can point us out to some examples where labels are displayed that way.  I think it would help us designing the most appropriate style for labeling positioning if we have some concrete examples to be inspired from. Thank you.

Thanks for your reply, Val

sorry, i didn't use chinese word map to render.


i have presented examples as above picture, just one display method of chinese word in chinese map.


We are used to read the chinese word from left to right, top to bottom.

i'm not sure you could see the chinese word in google map or not.

you can search chinese map and show in chinese word.

i attach some pictures from google and some generated from your component.


you can compare some labels which i use a red circle mark.


this picture screen-shot of china map from google .



 


this picture screen-shot of Taiwan map from google .



this picture screen-shot of Taiwan map from your component.



please tell me if you still can't understand what i say... i colud use more example to explain.


 



Carol,


I have try to modified the code of our Core engine, I think it's what you want.


Our team will discuss how to let you work.


One way is extend our TextStyle, but that need write so many code and some code is secret which we don't want user know.


The other way is that we add some new API to our DesktopEdition and after next release you can work with new API.



Thanks


James



You are right! James


your picture is right to what i want.

so, does i have to wait a long time? :(


other problem, 

i find your component that seems doesn't support chinese fonts.

if i change font size and font type of label, they still doesn't change.


my code as follows:


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "中圓體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, GeoColor.StandardColors.White, 3, 0, 2)

        textStyle.TextLineSegmentRatio = Double.MaxValue

        textStyle.OverlappingRule = LabelOverlappingRule.NoOverlapping

        textStyle.DuplicateRule = LabelDuplicateRule.UnlimitedDuplicateLabels

        

         Dim road As ShapeFileFeatureLayer = New ShapeFileFeatureLayer(varADR & "road.shp")

      

        road.ZoomLevelSet.ZoomLevel15.CustomStyles.Add(textStyle)

        road.ZoomLevelSet.ZoomLevel15.CustomStyles.Add(New LineStyle(New GeoPen(GeoColor.StandardColors.Black, 5), New GeoPen(GeoColor.StandardColors.Khaki, 4)))

        road.ZoomLevelSet.ZoomLevel15.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20


if I have no set haloPenColor and width...the map will show as follow picture....


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "中圓體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black,  0, 2)



if I set haloPenColor and width...the map will show as follow picture.


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "中圓體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, GeoColor.StandardColors.White, 3, 0, 2)



my font size doesn't change, but the map shows is different.


...i change font type, but the map doesn't change.


 


 


 



 


Hi Carol,
 
It’s great that we are in the same boat.
 
I am not very sure when will we release next version, I think it will be soon because we have already fixed some other bugs and add some new features that many full licensed users want to use. But some of our colleagues are in vacation during Christmas holiday, I can’t make decision. If I know the exactly time I will tell you ASAP.
 
About the other problem you mentioned, I think it’s not a bug just maybe our documentation is not good that describe well about HaloPan.
I tested some Chinese font, they’re working properly, they’re the same font type no matter set halo pen or not, it just that the font size with halo pen is smaller than without halo pen, because if you set halo pen, the way of drawing will be a little different. You can set the size bigger to fix this problem.
 
I don’t have 中圓體  font, but from your screen-shots, I fell they’re the same font type just size different. Can you test other font which the results are much different if set halo pen, and paste your screen-shot again and let me know which font?
 
Any way, Merry Christmas! No matter where you are, I think we are very close.
 
Thanks
James
 

Merry Christams! James

i paste some screen-shot to let you know clearly  what i mean.


i don't set halo pen, i think follows picture will let you know clearly.


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "細明體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, , 0, 2)



 


 Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "中圓體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, , 0, 2)


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "特圓體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, , 0, 2)


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "中黑體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, , 0, 2)


Dim textStyle As TextStyle = TextStyles.CreateSimpleTextStyle("ADR", "特黑體", 12, DrawingFontStyles.Bold, GeoColor.StandardColors.Black, , 0, 2)


above picture looks like  the same as follows , no matter what font i set, it doesn't change anything.



Actually, each font is different. You can look picture as follows.




Carol,


Thanks for your more information to make the problem more clear.


Are you sure the font family name are exact what you write? For example, as I know if some one want to write label by 楷体, he needs use "楷体_GB2312" as family name, if he uses "楷体" as family name, it doesn't work.


So I made a small sample which can show the text according to the family name you input. This sample I don't use any MapSuite API, instead I only use the system method. My result is that 細明體 is different from others, the others all of them are the same,  can you test the sample and let me know the result?


If you get the same result, I think the problem is caused that what I said you are not sure the family name, the other reason maybe your OS is not support those kinds of fonts.


Thanks


James


 



1593-TestFont.zip (10.3 KB)

James, 
 I know what you mean. 
 you are right! 
 i use font family name "中圓體" instead of font family name "華康中圓體". 
 if i set font "華康中圓體", font of label shows correctly. 
 thanks for your help. :) 
  


Carol,


You're always welcome.


I am glad that you solve your problem.


Even though I am work at Christmas, I fell happy because you happy.


James



Carol, 
  
 We have added new item in SplineType called "ForceSplining", so that we can support your requirement. 
  
 After I finish the testing, I will send a temporary package to you. 
  
 Thanks 
 James

 


Carol,
 
Please contact our support by emailing support@thinkgeo.com to request the version 3.1.371 DesktopEdition DLL package.
 
Here is the sample code to guide you how to implement your requirement by using new API.
 
    public class CustomTextStyle : TextStyle
    {
        protected override bool CheckOverlappingCore(LabelingCandidate labelingCandidate, GeoCanvas canvas, Collection<SimpleCandidate> labelsInThisLayer, Collection<SimpleCandidate> labelsInAllLayers)
        {
            foreach (LabelInformation labelInformation in labelingCandidate.LabelInformation)
            {
                if (labelingCandidate.LabelInformation.Count > 1)
                {
                    labelInformation.RotationAngle = 0;
                }
            }
            return base.CheckOverlappingCore(labelingCandidate, canvas, labelsInThisLayer, labelsInAllLayers);
        }
    }

 
winformsMap1.MapUnit = GeographyUnit.DecimalDegree;
            winformsMap1.BackgroundOverlay.BackgroundBrush = new GeoSolidBrush(GeoColor.FromArgb(255, 233, 232, 214));

            ShapeFileFeatureLayer layer = new ShapeFileFeatureLayer(@"..\..\SampleData\Data\road_10019.shp");
            layer.Encoding = Encoding.GetEncoding("big5");
            layer.ZoomLevelSet.ZoomLevel01.ApplyUntilZoomLevel = ApplyUntilZoomLevel.Level20;
            layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(LineStyles.LocalRoad1);

            TextStyle textStyle = new CustomTextStyle();
            textStyle.TextColumnName = "ROADNAME";
            textStyle.Font = new GeoFont("Arial", 9);
            textStyle.TextSolidBrush = new GeoSolidBrush(GeoColor.SimpleColors.Black);
            textStyle.SplineType = SplineType.ForceSplining;
            layer.ZoomLevelSet.ZoomLevel01.CustomStyles.Add(textStyle);

            LayerOverlay staticOverlay = new LayerOverlay();
            staticOverlay.Layers.Add("AustinStreetsShapeLayer", layer);
            winformsMap1.Overlays.Add(staticOverlay);

            winformsMap1.CurrentExtent = new RectangleShape(120.675592281979, 24.1688350899964, 120.683531620663, 24.1631702645569); 

            winformsMap1.Refresh();

 
 
 
Thanks
 
James

 



OK!!  
 Thanks for your help, James! 


Carol, 
  
 We’re welcome. 
  
 James

Hello, James 
 I have contacted support@thinkgeo.com  to request the version 3.1.371 DesktopEdition DLL package. 
  
 but i still haven’t got any reply.

Carol, 
  
 Please keep patience, it’s Sunday that is not work day, I think our Support will reply you on Monday. 
  
 James

Carol, 



I have placed the 3.1.371 Dll pack in your FTP folder. Please check your e-mail for the login instructions.



Thanks all, 
 I got new dll. 
  
 I use James code sample. 
 follows code has error message: ForceSplining isn’t the member of ThinkGeo.MapSuite.Core.SplineType 
 textStyle.SplineType = SplineType.ForceSplining; 
  
 if I use textStyle.SplineType = SplineType.StandardSplining 
 some label haven’t show correct angle.