您的位置:首页 > 编程语言 > PHP开发

UWP php iCare地理信息服务平台

2016-06-28 23:23 423 查看
空间信息移动服务的实践课结束了,昨天给老师演示了大作业,老师说功能都实现了,但是UI做的怎么这么丑啊。。

记录下期间用到的东西。
数据库,张先生给装了个phpMyAdmin来管理数据库,然后我在电脑上用xshell来用命令行语言操作服务器(这么描述?)所以,简单的连接服务器后,cd 命令进入项目所在的文件夹,rz 上传文件,rm 文件名 移除文件,vi 文件名 查看文件,i 对文件进行编辑,编辑完成后’esc’退出编辑,:q 退出,mysql -u root -p 回车然后输入密码进入数据库。
PHP,帮助文档看这里→http://php.net/manual/en/mysqli-stmt.prepare.php ,$title = $_GET[“title”];这个可以从url里获取参数。在客户端用get方法向数据库上传数据,下面这个是从数据库取数据,存为xml文件
<?php
header(“Content-Type: text/xml”);
$mysqli=new mysqli(“localhost”,”root”,”yourpassword”,”databasename”);
if(mysqli_connect_errno()){
printf(“Connect failed:%s\n”,mysqli_connect_error());
exit();
}
$mysqli->set_charset(“utf8″);
$query=”SELECT * FROM tablename ORDER BY id DESC”;
$result = $mysqli->query($query) or die(“Invalid query:”.mysql_error());
//建立xml,声明版本和编码
$dom = new DOMDocument(“1.0″,”utf-8”);
//格式化输出
$dom->formatOutPut = true;
//建立根节点root
$root = $dom->createElement(“events”);
$dom->appendChild($root);
$dbtField = array(“id”,”title”,”time”,”latitude”,”longitude”,”description”,”validity”,”expectation”,”solved”,”location”,”image”);//数据表字段数组
while($row = $result->fetch_row()){
//建立root节点下的子节点record
$record = $dom->createElement(“event”);
for($i =0; $i < 11; $i++) {
$node = $dom->createElement($dbtField[$i]);//表字段
$nodeText = $dom->createTextNode($row[$i]);//表字段的值
$node->appendChild($nodeText);
$record->appendChild($node);
}
$root->appendChild($record);
}
$mysqli->close();
echo $dom->saveXML();
?>

网页返回的内容:


C#&UWP  get请求如下

获取网页xml如下

public static string commentID;
public static string eventID;
public static string userName;
public static string comContext;
public static string commentTime;
public static string replyto;

/// <summary>
/// 从网络获取的信息
/// </summary>
/// <param name=”eventID”></param>
public async static void LoadXML(string eventID)
{
string suri = “http://xxx.xxx/xxx.php” ;
Uri uri = new Uri(suri);
//将网络获取的信息转化成XMLDoc对象
XmlDocument doc = await XmlDocument.LoadFromUriAsync(uri);
//获取根节点Events
XmlElement events = doc.DocumentElement;
//获取根节点的所有子节点列表
XmlNodeList oneEventList = events.ChildNodes;
//NotifyPopup lackMesPopup = new NotifyPopup(oneEventList.Count.ToString());
//lackMesPopup.Show();
foreach (IXmlNode oneEvent in oneEventList)
{
XmlNodeList info = oneEvent.ChildNodes;
commentID = info.Item(0).InnerText;
eventID = info.Item(1).InnerText;
userName = info.Item(2).InnerText;
comContext = info.Item(3).InnerText;
commentTime = info.Item(4).InnerText;
replyto = info.Item(5).InnerText;

//如果要将xml存到本地,可以加上以下这些
//获取事件清单的文件夹对象
StorageFolder storage = await ApplicationData.Current.LocalFolder.GetFolderAsync(“EventsList”);
//创建一个XML对象
XmlDocument _doc = new XmlDocument();
//使用event来创建一个XML元素作为根节点
XmlElement _item = _doc.CreateElement(“event”);
_item.SetAttribute(“id”, id);
_item.SetAttribute(“title”, eventTitle);
_item.SetAttribute(“currentTime”, currentTime);
_item.SetAttribute(“description”, description);
_doc.AppendChild(_item);
//创建一个应用文件,如果已经存在那么就替换,使用 id+ 标题 作为文件名,也就是标识符
StorageFile file = await storage.CreateFileAsync(eventTitle + “.xml”, CreationCollisionOption.ReplaceExisting);
//把XML中的信息保存到文件中去
await _doc.SaveToFileAsync(file);

}

在控件中显示

//加载进来时显示事件详情
protected async override void OnNavigatedTo(NavigationEventArgs e)
{
//获取上一个清单列表传递过来的参数,该参数是一个StorageFile对象
StorageFile file = e.Parameter as StorageFile;
if (file == null) return;
//获取文件的名字
String itemName = file.DisplayName;
//把应用文件作为一个XML文档加载进来
XmlDocument doc = await XmlDocument.LoadFromFileAsync(file);

id = doc.DocumentElement.Attributes.GetNamedItem(“id”).NodeValue.ToString();
titleBlock.Text = doc.DocumentElement.Attributes.GetNamedItem(“title”).NodeValue.ToString();
timeBlock.Text = doc.DocumentElement.Attributes.GetNamedItem(“description”).NodeValue.ToString();

string imageName = doc.DocumentElement.Attributes.GetNamedItem(“image”).NodeValue.ToString();//图片名
if (imageName != null)
{
string url = “http://mollmy.com/iCare/upload/images/” + imageName;

photoImage.Visibility = Visibility.Visible;
//从url获取图片
photoImage.Source = new BitmapImage(new Uri(url));//在Image控件中显示来自web的图片
}

}

上传图片

public static void HttpUploadImage(string Path)
{
string URL = “http://xxx.xxx/upload/”;

HttpUploadFile(URL, Path);
}

public static string FileName = null;
//时间戳
public static string GetTimeStamp()
{
TimeSpan ts = DateTime.UtcNow – new DateTime(1970, 1, 1, 0, 0, 0, 0);
return Convert.ToInt64(ts.TotalSeconds).ToString();
}

private static async void HttpUploadFile(string URL, string Path)
{

HttpWebRequest _HttpWebRequest = WebRequest.Create(URL) as HttpWebRequest;
//_HttpWebRequest.AllowAutoRedirect = true;

_HttpWebRequest.Method = “POST”;

string Boundary = DateTime.Now.Ticks.ToString(“X”);//随机分隔线

_HttpWebRequest.ContentType = “multipart/form-data;charset=utf-8;boundary=” + Boundary;

byte[] ItemBoundaryBytes = Encoding.UTF8.GetBytes(“\r\n–” + Boundary + “\r\n”);
byte[] EndBoundaryBytes = Encoding.UTF8.GetBytes(“\r\n–” + Boundary + “–\r\n”);

int Pos = Path.LastIndexOf(“\\”);//返回最后的反斜线 从0开始的的索引位置
//string FileName = Path.Substring(Pos + 1);//文件名
FileName = GetTimeStamp();//用时间戳给文件命名
//请求头部信息
StringBuilder HeaderStringBuilder = new StringBuilder(string.Format(“Content-Disposition:form-data;name=\”file\”;filename=\”{0}\”\r\nContent-Type:application/octet-stream\r\n\r\n”, FileName));
byte[] PostHeaderBytes = Encoding.UTF8.GetBytes(HeaderStringBuilder.ToString());
await Task.Run(async () =>
{
await Task.Yield();

//使用指定的路径、创建模式和读/写权限初始化 FileStream 类的新实例。
FileStream ReadFileStream = new FileStream(Path, FileMode.Open, FileAccess.Read);

byte[] ContentBytes = new byte[ReadFileStream.Length];//要post的数据
ReadFileStream.Read(ContentBytes, 0, ContentBytes.Length);
ReadFileStream.Dispose();

Stream PostStream = await _HttpWebRequest.GetRequestStreamAsync();
PostStream.Write(ItemBoundaryBytes, 0, ItemBoundaryBytes.Length);
PostStream.Write(PostHeaderBytes, 0, PostHeaderBytes.Length);
PostStream.Write(ContentBytes, 0, ContentBytes.Length);//内容
PostStream.Write(EndBoundaryBytes, 0, EndBoundaryBytes.Length);
PostStream.Dispose();
});

//发送请求并获取响应回应数据
HttpWebResponse _HttpWebResponse = await _HttpWebRequest.GetResponseAsync() as HttpWebResponse;
//直到request.GetResponse()程序才开始向目标网页发送Post请求
_HttpWebResponse.GetResponseStream();
_HttpWebResponse.Dispose();
}

 

发布事件时上传图片,发布时选择图片并在canvas控件中显示参考了这里→


检测图像或视频中的人脸

文中有示例代码下载地址,下面是我修改后的

private StorageFile Photo = null;//记录图片位置

/// <summary>
/// 点击添加图片
/// </summary>
/// <param name=”sender”></param>
/// <param name=”e”></param>
private async void AddPhoto_Click(object sender, RoutedEventArgs e)
{
WriteableBitmap displaySource = null;//显示图片

try
{
FileOpenPicker photoPicker = new FileOpenPicker();
photoPicker.ViewMode = PickerViewMode.Thumbnail;
photoPicker.SuggestedStartLocation = PickerLocationId.PicturesLibrary;
photoPicker.FileTypeFilter.Add(“.jpg”);

StorageFile photoFile = await photoPicker.PickSingleFileAsync();

if (photoFile == null)
{
return;
}

this.Photo = photoFile;//记录图片路径
//上传图片
UploadImage.HttpUploadImage(this.Photo.Path);
this.ClearVisualization();

//this.rootPage.NotifyUser(“Opening…”, NotifyType.StatusMessage);

// 打开图像文件和位图解码到内存中。
using (IRandomAccessStream fileStream = await photoFile.OpenAsync(Windows.Storage.FileAccessMode.Read))
{
BitmapDecoder decoder = await BitmapDecoder.CreateAsync(fileStream);
BitmapTransform transform = this.ComputeScalingTransformForSourceImage(decoder);

using (SoftwareBitmap originalBitmap = await decoder.GetSoftwareBitmapAsync(decoder.BitmapPixelFormat, BitmapAlphaMode.Ignore, transform, ExifOrientationMode.IgnoreExifOrientation, ColorManagementMode.DoNotColorManage))
{
// Create a WritableBitmap for our visualization display; copy the original bitmap pixels to wb’s buffer.
displaySource = new WriteableBitmap(originalBitmap.PixelWidth, originalBitmap.PixelHeight);//用于显示的图片
originalBitmap.CopyToBuffer(displaySource.PixelBuffer);
this.SetupVisualization(displaySource);//显示图片
}
}

}
catch (Exception ex)
{
this.ClearVisualization();//清空画布
}
}

//清空画布
private void ClearVisualization()
{
this.PhotoCanvas.Background = null;
this.PhotoCanvas.Children.Clear();
}

private readonly uint sourceImageHeightLimit = 1280;

/// <summary>
/// 计算一个BitmapTransform缩减源图像,原图太大的话。
/// </summary>
/// <param name=”sourceDecoder”>Source image decoder</param>
/// <returns>A BitmapTransform object holding scaling values if source image is too large</returns>
private BitmapTransform ComputeScalingTransformForSourceImage(BitmapDecoder sourceDecoder)
{
BitmapTransform transform = new BitmapTransform();

if (sourceDecoder.PixelHeight > this.sourceImageHeightLimit)
{
float scalingFactor = (float)this.sourceImageHeightLimit / (float)sourceDecoder.PixelHeight;

transform.ScaledWidth = (uint)Math.Floor(sourceDecoder.PixelWidth * scalingFactor);
transform.ScaledHeight = (uint)Math.Floor(sourceDecoder.PixelHeight * scalingFactor);
}

return transform;
}

/// <summary>
/// 将图片在canvas中显示出来
/// </summary>
/// <param name=”displaySource”>Bitmap object holding the image we’re going to display</param>
private void SetupVisualization(WriteableBitmap displaySource)
{
ImageBrush brush = new ImageBrush();
brush.ImageSource = displaySource;
brush.Stretch = Stretch.Uniform;
this.PhotoCanvas.Background = brush;

double widthScale = displaySource.PixelWidth / this.PhotoCanvas.ActualWidth;
double heightScale = displaySource.PixelHeight / this.PhotoCanvas.ActualHeight;
}

主要的就是这些。

定位是用win 10 自带的位置服务来获取经纬度,

//获取当前地理位置信息
Geoposition pos = await geolocator.GetGeopositionAsync();
//纬度信息
string latitude = pos.Coordinate.Point.Position.Latitude.ToString();
//经度信息
string longitude = pos.Coordinate.Point.Position.Longitude.ToString();

导航是用的百度地图,使用webview控件显示。

C#部分代码分享下 链接:http://pan.baidu.com/s/1boVkfT1 密码:nlin
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签:  c# UWP php