PowerMapSearchResult.fromJson constructor
PowerMapSearchResult.fromJson(})
Implementation
factory PowerMapSearchResult.fromJson(
Map<String, dynamic> json, {
String lang = 'auto',
String query = '',
}) {
final source = (json['_source'] ?? json) as Map<String, dynamic>;
final coords = (source['coordinates'] ?? [0, 0]) as List<dynamic>;
final String nameT = source['name_t']?.toString() ?? '';
final String nameE = source['name_e']?.toString() ?? '';
final String nameRaw = source['name']?.toString() ?? '';
final String nameThStr = nameT.isNotEmpty ? nameT : (nameE.isNotEmpty ? nameE : nameRaw);
final String nameEnStr = nameE.isNotEmpty ? nameE : (nameT.isNotEmpty ? nameT : nameRaw);
final String addrT = source['address_t']?.toString() ?? '';
final String addrE = source['address_e']?.toString() ?? '';
final String tambonT = source['tambon_t']?.toString() ?? '';
final String amphoeT = source['amphoe_t']?.toString() ?? '';
final String provinceT = source['province_t']?.toString() ?? '';
final String tambonE = source['tambon_e']?.toString() ?? '';
final String amphoeE = source['amphoe_e']?.toString() ?? '';
final String provinceE = source['province_e']?.toString() ?? '';
final String constructedAddrTh = addrT.isNotEmpty
? addrT
: (tambonT.isNotEmpty ? 'ต.$tambonT อ.$amphoeT จ.$provinceT'.trim() : addrE);
final String constructedAddrEn = addrE.isNotEmpty
? addrE
: (tambonE.isNotEmpty ? '$tambonE $amphoeE $provinceE'.trim() : addrT);
final cleanLang = lang.toLowerCase();
final hasThai = RegExp(r'[\u0E00-\u0E7F]').hasMatch(query);
final hasEnglish = RegExp(r'[a-zA-Z]').hasMatch(query);
final bool preferThai = (cleanLang == 'th' || (cleanLang == 'auto' && hasThai && !hasEnglish));
final String nameStr = preferThai ? nameThStr : nameEnStr;
final String addressStr = preferThai ? constructedAddrTh : constructedAddrEn;
return PowerMapSearchResult(
gid: source['gid'] is int ? source['gid'] : int.tryParse(source['gid']?.toString() ?? '0') ?? 0,
name: nameStr,
nameEn: nameEnStr,
nameTh: nameThStr,
address: addressStr,
addressEn: constructedAddrEn,
addressTh: constructedAddrTh,
position: LatLng(coords[1].toDouble(), coords[0].toDouble()),
province: provinceT.isNotEmpty ? provinceT : provinceE,
amphoe: amphoeT.isNotEmpty ? amphoeT : amphoeE,
tambon: tambonT.isNotEmpty ? tambonT : tambonE,
postCode: source['post_code']?.toString() ?? '',
rawData: source,
);
}