Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/android/232.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# iOs地图和android地图之间的多段线有什么区别?_C#_Android_Objective C_Google Maps_Xamarin.forms - Fatal编程技术网

C# iOs地图和android地图之间的多段线有什么区别?

C# iOs地图和android地图之间的多段线有什么区别?,c#,android,objective-c,google-maps,xamarin.forms,C#,Android,Objective C,Google Maps,Xamarin.forms,我正在用c#转换一个iOs应用程序,用xamarin.forms创建一个多平台版本。该应用程序提供了一个地图,其中有许多多段线,由不同的点(纬度和经度)创建。当一条多段线“完成”时,另一条多段线将无缝开始,即使是因为多段线的最后一点是下一条多段线的第一点。当我使用相同的JSON在c#中创建多段线时,它们是不连续的,产生了不想要的效果。我如何尝试解决此问题?我有一个本地android版本的应用程序,它有相同的问题,多平台版本。我不是iOs代码的作者。谢谢你的帮助 这是objective-c代码

我正在用c#转换一个iOs应用程序,用xamarin.forms创建一个多平台版本。该应用程序提供了一个地图,其中有许多多段线,由不同的点(纬度和经度)创建。当一条多段线“完成”时,另一条多段线将无缝开始,即使是因为多段线的最后一点是下一条多段线的第一点。当我使用相同的JSON在c#中创建多段线时,它们是不连续的,产生了不想要的效果。我如何尝试解决此问题?我有一个本地android版本的应用程序,它有相同的问题,多平台版本。我不是iOs代码的作者。谢谢你的帮助

这是objective-c代码:

id resp =[NSJSONSerialization JSONObjectWithData:tratta.polilinea options:NSJSONReadingMutableContainers error:nil];
        //NSLog(@"%@",resp);
        if([resp isKindOfClass:[NSArray class]])
        {
            NSArray *listatratte = (NSArray*)resp;
            CLLocationCoordinate2D* coords = malloc([listatratte count] * sizeof(CLLocationCoordinate2D));

            float diskkm = tratta.ini_km;

            for(int i = 0; i < [listatratte count]; i++)
            {
                id cordinate = [listatratte objectAtIndex:i];

                //Aggiungo offset
                float lineangle = atan2(tratta.ini_lat - tratta.end_lat, tratta.end_lon - tratta.ini_lon);
                //float halfGap = 0.0060;
                float halfGap = [self getOffsetStrade];
                float radians = 90/M_PI;

                float angleTop = 90/radians + lineangle;
                float topoffsetx = cos(angleTop)*halfGap;
                float topoffsety = sin(angleTop)*halfGap;

                float angleBottom = -90/radians + lineangle;
                float botoffsetx = cos(angleBottom)*halfGap;
                float botoffsety = sin(angleBottom)*halfGap;

                if([tratta.direzione isEqualToString:@"D"])
                {
                    CLLocationCoordinate2D punto = CLLocationCoordinate2DMake([[cordinate objectForKey:@"lat"]doubleValue]+topoffsetx, [[cordinate objectForKey:@"lon"]doubleValue]+topoffsety);
                    coords[i] = punto;
                }
                else
                {
                    CLLocationCoordinate2D punto = CLLocationCoordinate2DMake([[cordinate objectForKey:@"lat"]doubleValue]+botoffsetx, [[cordinate objectForKey:@"lon"]doubleValue]+botoffsety);
                    coords[i] = punto;
                }
            }
            MKPolyline *poly = [MKPolyline polylineWithCoordinates:coords count:[listatratte count]];
            if([tratta.direzione isEqualToString:@"D"])
            {
                poly.title = @"D";
            }
            else
            {
                poly.title = @"S";
            }
            free(coords);
id resp=[NSJSONSerialization JSONObjectWithData:tratta.polilinea选项:NSJSONReadingMutableContainers错误:nil];
//NSLog(@“%@”,分别为);
if([resp iskindof类:[NSArray类]])
{
NSArray*列表属性=(NSArray*)分别;
CLLocationCoordinate2D*coords=malloc([ListAtrate计数]*sizeof(CLLocationCoordinate2D));
float diskkm=tratta.ini_km;
对于(int i=0;i<[ListAtrate计数];i++)
{
id cordinate=[listatrate objectAtIndex:i];
//阿吉翁戈偏移量
浮点数线性角=atan2(tratta.ini_lat-tratta.end_lat,tratta.end_lon-tratta.ini_lon);
//浮动半间隙=0.0060;
浮动半间隙=[self getOffsetStrade];
浮动弧度=90/M_PI;
浮动角度顶部=90/弧度+线性角度;
浮动topoffsetx=cos(角顶)*半间隙;
浮动topoffsety=sin(角顶)*半间隙;
浮动角度底部=-90/弧度+线性角度;
浮动botoffsetx=cos(角底)*半间隙;
浮动底部偏置=正弦(角度底部)*半间隙;
if([tratta.direzione isEqualToString:@“D”])
{
CLLocationCoordinate2D punto=CLLocationCoordinate2DMake([[cordinate objectForKey:@“lat”]doubleValue]+topoffsetx,[[cordinate objectForKey:@“lon”]doubleValue]+topoffsety);
coords[i]=punto;
}
其他的
{
CLLocationCoordinate2D punto=CLLocationCoordinate2DMake([[cordinate objectForKey:@“lat”]doubleValue]+botoffsetx,[[cordinate objectForKey:@“lon”]doubleValue]+botoffsety);
coords[i]=punto;
}
}
MKPolyline*poly=[MKPolyline polylineWithCoordinates:coords count:[listatrate count]];
if([tratta.direzione isEqualToString:@“D”])
{
poly.title=@“D”;
}
其他的
{
poly.title=@“S”;
}
免费(coords);
这是c代码:

专用异步任务DrawPolyline(列出ListPolylinePoints列表)
{
//IsIntoFiPiLi=假;
如果(Map.Polylines.Count>0)删除多段线();
foreach(ListOfListPolylinePoints中的var listOfPoints)
{
var tratta=await RepositoryHelper.Instance.TratteRepository.GetItemAsync(listOfPoints.Item1);
var polyline_to_draw=新多段线();
var points_polilyne=点列表。项目2;
对于(变量i=0;i
那么,如何避免Newtonsoft.Json对从 json

您可以在
JsonSerializerSettings
中将
FloatParseHandling
设置为
Decimal
,下面是代码示例:

var settings = new JsonSerializerSettings(); 
settings.FloatParseHandling = FloatParseHandling.Decimal;
var data = JsonConvert.DeserializeObject(json, settings);

我不能很好地理解你的问题。iOS和Android的两个截图看起来是一样的。我无法找出区别,也没有看到任何不连续的多段线。另外,你能分享一个最小的、可重复的例子来重现这个问题吗?类似于
tratta.polilinea
中的那些点。如果你愿意,请看@JackHua MSFT请参见地图“Lastra a Signa”标签下方在android版本中,您可以看到两条多段线之间存在不连续性。通过更好地分析代码,我发现如果我获取多段线的点,并以一种艰难的方式放置,它会如预期的那样工作。因此,我看到当我从包含点的JSON反序列化点时,会出现一些十进制数字的舍入,而我假设这是真正的问题。那么我如何才能避免Newtonsoft.Json对取自Json的值进行舍入呢?好的,我看到了不连续的多段线。你可以试试下面的代码
var settings = new JsonSerializerSettings(); 
settings.FloatParseHandling = FloatParseHandling.Decimal;
var data = JsonConvert.DeserializeObject(json, settings);